使用JLink间接烧写s3c6410 nand_flash的方法

本文详细介绍了如何使用JLink工具,通过s3c6410的特性,将程序烧写到nand_flash的前4KB,以实现启动后自动运行大程序。主要步骤包括:烧写内存初始化代码、烧写具备nand_flash读写功能的程序,然后利用uboot命令将大程序烧写到nand flash。文章还提供了关键的初始化内存和nand flash的汇编代码示例。
摘要由CSDN通过智能技术生成

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已经启动起来了,

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值