s3c6410对nand_flash的烧写功能,有些公司已经提供了SD卡的方法。但是我们也可以使用JLink把我们的uboot等程序以下面的方式烧写到我们的nand_flash上
硬件环境:JLink V8、三星s3c6410板
软件环境:xp3、JLink4.12驱动、ADS1.2
原理:针对s3c6410,nand flash启动时,系统会把nand flash前4KB的内容自动下载到0xc000000(steppingstone)中运行,我们可以利用
这个特性,来做一些事情,把大的程序烧写到nand flash的0x0地址,这样,在重新启动之后,就会自动运行我们的大程序了。但是这里我们
还忽略了一些细节。细心的读者发现,系统只会把nand flash的地址前4K下载到0xc000000运行,那么大程序如何完全放到内存中运行呢?
如果你玩过uboot的代码搬运的话,那就不是难事了。
s3c6410的0xc000000地址做为steppingstone在nand_flash启动的时候,这段空间是可读可写的。因此我们可以使用JLINK连接板子,并通过JLINK的下载功能,把PC机上的程序写到板子的内存中,通过JLINK的loadbin命令。
1.利用JLINK,烧写能够初始化s3c6410内存的代码到0xc000000,使得内存能够使用
2.利用JLINK,烧写对nand有读写能力并可提供命令处理的程序到内存(没有第一步的初始化内存,我们无法下载程序到内存)
3.烧写我们的第二步的代码到nand flash的0地址,这样在重新启动后,我们的第二步代码就会被下载到0xc000000地址,并运行,
我们可以利用第二步代码所提供的命令来烧写我们其他的程序。第二步的代码往往是引导程序,例如uboot。
学前预备:
1. 对arm体系结构有一定认识,看过s3c6410的datasheet,最起码看过memory map这一章节
2. 会使用ADS1.2 IDE开发工具
3. 会使用JLink工具
步骤:
1.JLink和你的板子连接(别告诉我不会,我截图能力有限)
JLink一端通过JTAG口连接到板子上(具体连接方式还要看硬件连线,不过一般都是这样了,我用的转接板),另一端是USB口连接到你的主机上;
2.运行JLink
如果第一步连接正确,启动后将显示以下界面,如果没有检测到CPU,命令行使用usb命令连接板子,r命令识别CPU,正确识别如下所示:
3.下载程序(nand_flash启动方式)
1)loadbin c:\init.bin 0xc000000
2)setpc 0xc000000
3)g
4)h
5)loadbin c:\boot.bin 0x57e00000
6)setpc 0x57e00000
7)g
解释:loadbin c:\sdram_init.bin 0xc000000,loadbin为JLink内置命令,命令的含义是加载二进制文件到板子的特定地址。c:\sdram_init.bin为二进制文件,0xc000000是地址,如有需要sdram_init程序及源码,请发送邮件eabi010@gmail.com。
setpc 0xc000000,setpc是把板子的pc值设置为后面的地址。
g让板子开始执行0xc000000处的代码。
h(halt),停止运行,并显示硬件信息。
loadbin c:\boot.bin 0x57e00000,boot.bin是我的uboot代码,具有nand_flash烧写、网络传输、串口IO等功能,0x57e00000是我的boot.bin代码的运行地址
上面操作的步骤如下图:
setpc 0x57e00000,然后g,打开终端便可以看到你的bootloader已经启动起来了,