码迷,mamicode.com
首页 > 其他好文 > 详细

用J-LINK烧写Bootloader到ARM开发板的Nand Flash

时间:2016-05-12 20:17:18      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

一、起因和原理

起因:以往电脑烧写bootloader到 nand中是采用jtag以及jflash,jtag是使用并口连接的,目前电脑一般没有并口了,现今一般是使用较便宜入手的J-LINK,使用USB,就不能再使用以往的jflash烧写了。因此需要找到一个J-LINK烧写Nand的方法。

以下说明J-LINK烧写Nand的原理。

以realarm2410开发板为例子说明,该开发板要把跳线设置为Nand Flash启动模式才可以操作Nand,此时的内存映射如下图:

技术分享

图1

 

如图1,内存中并没有对Nand的映射,而只能通过S3C2410A中的Nand Flash的控制器访问Nand,而访问nand的这一段程序大小,肯定会超过4KB,因此只能放在SDRAM 中执行。假设板子出厂时是完全空白的,nand中没有程序,断电情况下,SDRAM和SRAM中更不可能存储程序。那么,可按照下面思路来进行,结合图2的内存分配图来说明。

技术分享
技术分享

图2:SRAM和SDRAM的分配图

把SRAM用于执行初始化SDRAM的程序init.bin,该程序小于4KB;要烧写的bootloader.bin放在SDRAM最开始的1MB空间内,通常bootloader只有几十KB,留出1MB的空间已足够;从0x33df3000-0x33ef3000的1MB空间用于存放烧写的执行代码RO的段,1MB的Heap和20K的Stack也如图2所示分配,剩下的SDRAM用作RW段。

因此,烧写步骤为:

  1. 准备好init.bin,bootloader.bin,program.bin三个文件;
  2. 把init.bin加载到SRAM中,并运行;
  3. 把bootloader.bin加载到SDRAM的0x30000000-0x30100000;
  4. 把program.bin加载到SDRAM的0x33df3000-0x33ef3000中,并运行;

下面进行具体说明。

 

二、准备好init.bin,bootloader.bin,program.bin文件

init.bin是一小段在SRAM中运行的,初始化SDRAM的程序,如何通过分散加载文件来设置程序的加载段,参考我的另一篇博文Keil MDK使用J-LINK分别在Sram,Nor Flash以及Sdram中调试代码的原理和方法,该文介绍了设置RO、RW、Stack、Heap等加载位置的原理和方法。程序的实现也很简单,不再赘述。这里提供init.bin的MDK工程下载。Target需选择RunFromSram_norflash_boot,生成的bin文件改名为init.bin则可。

bootloader.bin本文采用vivi,因为不同的开发板bootloader不一样,所以请根据实际选择。

program.bin涉及到nand flash的控制器对nand的操作,以及坏块识别、ecc纠错等,具体可参照S3C2410A以及NAND FLASH的数据手册,本文主要不是论述nand驱动的,不在本文赘述;要把程序设置为在SDRAM的0x33df3000起始位置加载执行,也请参考我的另一篇博文Keil MDK使用J-LINK分别在Sram,Nor Flash以及Sdram中调试代码的原理和方法。这里提供program.bin的MDK工程下载

 

三、加载Init.bin到SRAM中执行

加载bin文件可以使用J-LINK进行,为方便叙述,把准备好的init.bin,vivi(就是bootloader.bin),program.bin放到JLink.exe的目录中,执行JLink.exe,进入控制台。连接开发板串口0到电脑串口,并打开电脑的串口终端(建议使用SecureCRT)。在JLink控制台按如下进行操作:

J-Link复位:

J-Link> r

 

加载init.bin到0x0位置(即SRAM的起始地址),设置PC为0x0,并执行:

J-Link> Loadbin InitSdram.bin 0
J-Link> setpc 0
J-Link> go

 

这样SDRAM就被初始化了。

 

四、加载bootloader.bin到0x30000000-0x30100000

这里bootloader.bin就是vivi文件。按如下操作:

暂停init.bin的运行:

J-Link> h

 

加载vivi到0x30000000起始的位置:

J-Link> Loadbin vivi 0x30000000

 

五、加载program到0x33df3000并执行

加载program.bin到0x33df3000并执行:

J-Link> Loadbin program.bin 0x33df3000
J-Link> setpc 0x33df3000
J-Link> go

在电脑串口终端上可以看到打印的烧写Nand Flash过程的信息,以及校验结果。烧写完成后,重新启动开发板就可以看到vivi的启动界面以及串口打印信息了。

修改或移植了新的bootloader后,仍可按照这个方式烧写。有了bootloader后,内核以及文件系统的烧写自然就不在话下了。

用J-LINK烧写Bootloader到ARM开发板的Nand Flash

标签:

原文地址:http://blog.csdn.net/kenzhang1031/article/details/51357331

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!