s3c2440汇编语言,S3C2440 启动流程及汇编代码知识

1、框架

ec3caa396bb2c72a8dc5cb1cdc1c383e.png

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、几条常用汇编指令

LDR: 读内存

LDR    R0,[R1]

读取地址 R1 的数据(四字节),保存到R0中

STR: 写内存命令

STRR0,[R1]

将 R0 的值写入地址 R1 (四字节)

B: 跳转

MOV:

MOV     R0,R1

把 R1 的值赋给 R0 ,R0 = R1

MOV     R0,#0x100 ,R0 = 0x100

LDR    R0,=0x12345678

R0 = 0x12345678

伪指令,他会被拆分为几条真正的RAM指令

MOV R0,=0x12345678 错误的

05fd59a1c88c672f45641d7ef8afd04a.png

6. 加指令

add   r0,r1,#4r0 = r1 + 4

sub   r0,r1,#4r0 = r1- 4

sub   r0,r1,r2r0 = r1- r2

BL:

跳转到***

把返回地址保存到LR寄存器即下一条指令的起始地址

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程序是否一致,如果不一致会进入死循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值