|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 uperrua 于 2019-9-2 14:34 编辑 + N) o1 P5 o* u0 j6 p; D+ E- }
8 F/ }, |' T3 u, o& h' K, f% z- s
学习ARM时,看到三星ARM11 的官方手册上写道:S3C6410具备一个内部SRAM的缓冲器,叫做“STEPPINGSTONE”,支持NAND FLASH的系统引导。当系统启动时,NAND FLASH存储器的前4KB将自动被载入到“SETPPINGSTONE”中,然后系统自动执行这些载入的引导代码。(默认的话该存储区应该被映射到地址空间0处)。. e0 @2 P4 G/ Z6 b+ y8 O+ a: U
}, M" I6 A% i2 ~' m于是一直就想写个裸机程序,长度不超过4KB,存放在NAND FLASH的最开始,这样每次系统上电从NAND FLASH启动时,都会把这段代码拷贝到被映射到地址0x0 处的“STEPPINGSTONE”处。这个应该是bootloader 的雏形吧,一上电就执行的程序。可是在裸机环境下一直找不到烧写NAND FLASH的方法。买了个JLink,貌似在Windows 下据说不能烧写NAND FLASH,尚未验证。网上大部分方法都是针对Uboot 烧写内存,通过USB或者串口,网络。没有看到写道NAND FLASH的方法。没办法,只能凑活着写道内存中,先看看自己的程序是不是写对了。突然有一天,翻翻韦东山老师的书:《嵌入式Linux应用开发完全手册》上一张,降到Uboot中怎么从内存烧写东西到NAND FLASH中去。突然灵机一动,可以将程序先烧到内存中,在从内存中烧到NAND FLASH中去。最后,NAND FLASH中的Bootloader (Uboot)会被覆盖掉,上电就会自动运行自己的裸机程序,而非Bootloader。1 F8 ]& k8 k/ s
( p4 F T9 F4 }. X2 ^' T, |想法有了,就去实现下:为此写了个小程序,来验证下。改程序的思路是:四个按键对应四个LED,按键按下,LED亮;松开LED灭。
! Y- ~0 M7 E* }0 ^8 i& G8 ?
; j! [7 N7 X4 M, L& K. L$ n三个程序如下:
0 f% Y v( [5 i* w: K9 g
' y2 W6 m4 [% g2 Y
5 u" y6 J/ f' I q0 h0 A: A( A& V* q3 L; \$ ?6 l" @
) ~. d- h1 i% v1 U9 E" T
( @9 I1 l! a8 N% o8 ~ |
|