您的位置:首页 > 其它

s5pv210-SD卡启动详解

2017-08-17 22:08 267 查看
杭州夜晚没有星星?记忆中上一次看到星星是在家中的大树下听爷爷讲故事的时候。

SD卡启动详解

Makefile为总纲;

start.s为主线;

在start.s

第一步:关看门狗;

第二步:设置SVC栈;

第三步:开icache;

第四步:初始化DDR(外部执行程序);

第五步:重定位,从SD卡第45扇区内容到DDR的0x23e00000(外部执行程序);

第六步: 死循环(不能丢);

SD卡启动流程(bin文件小于16KB时和大于16KB时)

(1)启动的第一种情况是整个镜像大小小于16KB。这时候相当于我的整个镜像作为BL1被steppingstone直接硬件加载执行了而已。

(2)启动的第二种情况就是整个镜像大小大于16KB。(只要大于16KB,哪怕是17KB,或者是700MB都是一样的)这时候就要把整个镜像分为2部分:第一部分16KB大小,第二部分是剩下的大小。然后第一部分作为BL1启动,负责去初始化DRAM并且将第二部分加载到DRAM中去执行(uboot就是这样做的)

为什么是第45扇区?

BL1在SD卡中必须从Block1开始(Block0不能用,这个是三星官方规定的),长度为16KB内,我们就定为16KB(也就是32个block);BL1理论上可以从33扇区开始,但是实际上为了安全都会留一些空扇区作为隔离,譬如可以从45扇区开始,长度由自己定

为什么是0x23E00000?

因为在uboot中经常使用0x23E00000,所以为了方便,参考uboot

BL1:

因为重点在第五步中,所以要写一个c程序(命名自定义-sd_relocate.c)

1.start.s

2.makefile

3.link.lds

4.sdram_init.s(.s是汇编,初始化DDR)

5.write2sd(在BL1和BL2文件夹同目录,linux下烧录)

6.mkv210_image.c (主要作用就是由usb启动时使用的led.bin制作得到由sd卡启动的镜像210.bin)

7.sd_relocate.c

因为执行BL2需要跳转到0x23E00000

BL2:

start.s 为主线

makefile为总纲

任务为:LED闪烁(已写好相关程序)

1.led.c

2.link.lds

3.makefile

4.start.s

总结:

1.Makefile是编译

2.link.lds链接

3.start.s是具体执行的程序、

sdram_init.s

led.c

mkv210_image.c

5.write2sd是linux下烧录的需求
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息