S3C2440 启动流程及汇编代码知识

S3C2440 框架与启动过程:

1、框架

在这里插入图片描述

2、启动过程

大多数ARM芯片从0地址启动

  • NOR启动:NOR Flash 基地址为0,片内 RAM 地址为 0X4000,0000
    CPU 读出Nor上第一个指令(前四个字节),执行
    CPU继续读出其他指令执行

  • Nand启动:片内 4K RAM 基地址为0,Nor Flash 不可访问
    2440硬件把Nand前4K内容复制到片内 RAM
    然后 CPU 从0地址取出第一条指令

例如:(汇编代码)

	ldr sp, =4096  /* nand启动 */
	ldr sp, =0x40000000+4096  /* nor启动 */

3、几条常用汇编指令

  1. LDR: 读内存
	LDR	    R0,[R1]
	读取地址 R1 的数据(四字节),保存到R0中 
  1. STR: 写内存命令
	STR		R0,[R1]
	将 R0 的值写入地址 R1 (四字节)
  1. B: 跳转
  2. MOV:
	MOV     R0,R1
	把 R1 的值赋给 R0 ,	R0 = R1
	MOV     R0,#0x100 ,	R0 = 0x100
    LDR    R0,=0x12345678	
    R0 = 0x12345678

伪指令,他会被拆分为几条真正的RAM指令
MOV R0,=0x12345678 错误的
在这里插入图片描述
6. 加指令

	add   r0,r1,#4		r0 = r1 + 4
	sub   r0,r1,#4		r0 = r1- 4
	sub   r0,r1,r2		r0 = r1- r2
  1. BL:
    跳转到***
    把返回地址保存到LR寄存器即下一条指令的起始地址

  2. ldm:读内存,写入多个寄存器
    stm:把多个寄存器的值写入内存

    内存就是寄存器

    4、NOR启动和NAND启动的区别

    nand flash与nor flash的最主要区别

    • 性能区别
      在JZ2440开发板上有两种Flash,分别为nand flash和nor flash。这两种flash的最主要的区别为:nor flash比较稳定,存在里面的数据不易丢失,但是容量小,nor flash在读的时候可以像内存一样操作;其次,NOR的读速度比NAND稍快一些。NAND的写入速度比NOR快很多。nand flash容量大,但是存在位反转,会导致数据丢失,读写需要通过一定的时序。所以一般nor flash里面存放的uboot代码,而nand flash里面存放的是占用容量比较大的linux内核和文件系统。在JZ2440上,nand flash的容量为256M,而nor flash只有2M。

    • 当从NAND启动时
      CPU会自动从NAND flash中读取前 4KB 的数据放置在片内SRAM里(s3c2440是soc),同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。cpu是从0x00000000开始执行,也就是NAND flash里的前 4KB 内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。通过这个载体把nandflash中大代码复制到RAM(一般是SDRAM)中去执行。

    • 当从非NAND flash启动时
      nor flash被映射到0x00000000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000). 然后CPU从0x00000000开始执行(也就是在Norfalsh中执行)。

    • Uboot里的流程:
      启动时先将0x4000003C处的数据清零,再读出0x0000003C处地址的数据,如果为0就意味着,这个地址是同时映射在0x4000003C处和0x0000003C处即为nandflash启动,不相等则为norflash启动。

    • 但是最后有一点很重要:
      如果是Nand flash启动,必须要复原清零的数据。原因是:在nand boot过后,会核对内部SRAM中的4K程序,和从Nand中拷贝到SDRAM的前4K程序是否一致,如果不一致会进入死循环。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值