ARM9 2410移植之在Linux下,用OpenJTAG+OpenOCD烧写NAND Flash

ARM9 2410移植之在Linux下,用OpenJTAG+OpenOCD烧写NAND Flash



--------------------------------------------------------------------------------

一直以来,众多的开发工具都是基于windows的,nand flash的烧写工具也一样。

     我手头有数块s3c2410\s3c2440\at91sam9263\pxa310等开发板,除了在windows下,好像也找不到合适的烧写工具。对 于s3c2410仅仅只有jflash,通过并口和wiggler来烧写。大多数笔记本根本没有并口,连台式机有并口的都在慢慢消失,幸好我的笔记本有。 但是公司的笔记本全是无并口的linux。

     ARM的仿真器种类很多,比较常见的jlink, 也只能用于windows环境。偶然机会,发现OpenOCD这个好东西.接着又发现了OpenJTAG, 一个和jtagkey 是同一种layout的仿真器,而且一般配合OpenOCD使用。并且OpenJTAG用的是FT2232, 内部含两个uart通道, 再加了一个max的uart --> rs232电平信号转换芯片,这样就可以为我们的笔记本节省了一个usb转串的线了。在USB口比较稀少的本本上,甚至为你节省了一个USB hub. 但是网上一般都卖到180一个,个人觉得太离谱了,90块钱顶了天.

      没办法,在taobao拍了一个, 拿过来里面有张光盘,里面讲的烧写flash的方法居然是先init sdram, 再将u-boot放到sdram,通过u-boot来烧写nand. 这和我要求相差很远,因为我是要烧自已开发的bootloader,不是要烧别的,这样虽然可以做到,但是也太麻烦。没办法,我就下了个最新版的 OpenOCD,查看里面的代码,居然有烧写nand的部分,而且支持好几种nand.
      好了,废话少说,先说怎么实现直接烧写吧,下面以s3c2440为例:

      这里省略OpenOCD 编译,可以到csdn的下载中心搜索我上传的openjtag.tar.bz2的打包文件,里面openocd的代码我做了小更改,并且在README有编译和使用的详细步骤.

      首先在你的openocd.cfg中的最后加入:

              nand device s3c2440 0

      然后启动openocd:

              openocd

      再用telnet连上openocd:

              telnet   127.0.0.1 4444

      然后在执行nand的命令的前,都要先用nand probe探测:

              nand probe 0

       看是否找到你的nand flash, 记得给开发板上电哟.

       有的平台可能会出现   Address translation failure, 那是因为Openocd有bug, 本来D cache没有开,它认为了开了,并且认为MMU也开了,访问的每个地址都会进行转换,而又找不到页表,所以就出现转换错误。解决办法就是用:

              reset; halt

       将开发重启,注意, 将reset;halt输在一行,中间用分号隔开,这样arm刚重启就暂停了,这个时候d cache肯定是关着的。这个时候再用:

               nand probe 0

       就不会出现地址转换失败了.

      接下来就可以进行读、擦除、写了:

       从第0个nand上第10字节开始读512个字节到dump.bin文件中:

              nand dump 0   /dump.bin   10   512

       从第0个nand上第9块擦除到第15块(共擦除了7 * block_size个字节):

              nand erase 0 9 15

       将/u-boot.bin写到第0个nand上的4K开始的地方:

              nand write 0 /u-boot.bin   4096

       注意,写之前都要先擦除。写的时候是根据你文件大小来写的。

      很多时候会出现写不成功的情况,你可以在写完用nand dump看一下写成功没有,没有的话再写一遍就OK了。

 

Windows下OpenJTAG烧写u-boot过程

整理这次文档的目的,是在使用OpenOCD下载u-boot,通过u-boot烧写Nor/Nand Flash过程中,很多人都遇到不同的问题,比如在串口工具上无法打开超级终端,以及烧写u-boot后,启动单板无法看到信息等问题。我结合《EclipseOpenOCDOpenJTAG嵌入式开发教程》,以及百问网网友提供的信息,和南方大哥的指导。把自己的烧写u-bootNor/Nand Flash 的过程整理下来,以供大家参考。如有不完善的地方,请大家指出以完善,供更多的嵌入式爱好者参考。

 

注:开发板mini2440

 

1、  安装OpenJTAG驱动程序

2、  安装OpenOCD,交叉编译工具链,Eclipse

在百问网http://www.100ask.net/showtopic-542.aspx

EclipseOpenOCDOpenJTAG嵌入式开发教程》有详细的介绍,需要的请链接下载。

 

3、  使用OpenOCD下载u-boot,通过u-boot烧写Nor/Nand Flash

通过OpenOCD可以先把u-boot先放到SDRAM中,然后启动它,就可以使用u-boot来烧写Nor/Nand Flash了。

 

SDRAM能被访问之前,必须初始化存储控制器

 

(1)       下载、运行初始化程序init.bin

halt                                 //暂停

poll                                 //发现单板的MMUD-cache已经使能

arm920t     cp15              2     0            //禁止MMUD-cache

step                                 //进一步查看是否禁止MMUD-cache

load_image        init\init.bin     0x40000000           //下载到Nor Flash

resume              0x40000000

 

(2)       下载、运行u-boot

halt

load_image        u-boot\u-boot.bin   0x33f80000

verify_image     u-boot\u-boot.bin   0x33f80000

load_image        u-boot\u-boot.bin   0x30000000

resume              0x33f80000

 

                在串口工具(本人使用的超级终端)上可以看到u-boot的启动信息。之前我也遇到过正常操作在超级终端无法看到启动信息,经查是OpenJTAG随带的串口的问题,换用USB转串口使用后正常显示。

               

 

 

(3)             刚才的load_image只是下载到SDRAM 下面是在u-boot里执行命令进行烧写

烧写到Nor Flash

protect        off   all

erase   0     2ffff

cp.b    30000000       0     30000

 

烧写到Nand Flash

nand    erase       0     30000

nand    write.jffs2      30000000       0     30000

              

          完成烧写之后,重启单板即可看到运行情况(本人是在Nor Flash下启动的)

         

注:使用Eclipse 调试U-boot整理后附出。转载请注明:http://huanghao.cublog.cn

 

http://blog.chinaunix.net/uid-23601235-id-2395249.html
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 Nand flash 工作原理 .......................................................................................................................... 2 1.1 Nand flash 芯片工作原理 ...................................................................................................... 2 1.1.1 芯片内部存储布局及存储操作特点 ........................................................................ 2 1.1.2 重要芯片引脚功能 ..................................................................................................... 3 1.1.3 寻址方式 ...................................................................................................................... 3 1.1.4 Nand flash 主要内设命令详细介绍 ........................................................................... 4 1.2 Nand Flash 控制器工作原理 ................................................................................................. 4 1.2.1 Nand Flash 控制器特性 ............................................................................................... 5 1.2.2 Nand Flash 控制器工作原理 ....................................................................................... 5 1.3 Nand flash 控制器中特殊功能寄存器详细介绍 ................................................................. 5 1.4 Nand Flash 控制器中的硬件 ECC 介绍............................................................................... 6 1.4.1 ECC 产生方法................................................................................................................ 6 1.4.2 ECC 生成器工作过程 ................................................................................................... 6 1.4.3 ECC 的运用 ................................................................................................................... 6 2 在ADS 下 flash 烧写程序................................................................................................................ 7 2.1 ADS 下flash 烧写程序原理及结构....................................................................................... 7 2.2 第三层实现说明 ..................................................................................................................... 7 2.2.1 特殊功能寄存器定义 ................................................................................................. 7 2.2.2 操作的函数实现 ......................................................................................................... 7 2.3 第二层实现说明 ..................................................................................................................... 8 2.3.1 Nand Flash 初始化....................................................................................................... 8 2.3.2 Nand flash 复位 ............................................................................................................ 8 2.3.3 获取 Nand flash ID ...................................................................................................... 9 2.3.4 Nand flash 写入 ........................................................................................................... 9 2.3.5 Nand flash 读取 ..........................................................................................................10 2.3.6 Nand flash 标记坏块 ..................................................................................................12 2.3.7 Nand Flash 检查坏块 .................................................................................................13 2.3.8 擦除指定块中数据 ...................................................................................................13 2.4 第一层的实现 .....................................................................................................................14 2.4.1 NandFlash 烧写主函数说明 .....................................................................................14 3 在 U-BOOT 对Nand Flash 的支持 ................................................................................................16 3.1 U-BOOT 对从Nand Flash 启动的支持 ................................................................................16 3.1.1 从Nand Flash 启动 U-BOOT 的基本原理 ..............................................................16 3.1.2 支持 Nand Flash 启动代码说明..............................................................................16 3.2 U-BOOT 对Nand Flash 命令的支持 ...................................................................................18 3.2.1 主要数据结构介绍 ...................................................................................................19 3.2.2 支持的命令函数说明 ............................................................................................... 20 3.2.3 U-BOOT 支持 Nand Flash 命令移植说明 ................................................................ 20 4 在 LinuxNand Flash 的支持 .....................................................................................................22 4.1 LinuxNand Flash 调用关系 ............................................................................................22 4.1.1 Nand Flash 设备添加时数据结构包含关系 ............................................................22 4.1.2 Nand Flash 设备注册时数据结构包含关系 ............................................................22 4.1.3 当发生系统调用时数据结构调用关系 .................................................................23 4.2 LinuxNand Flash 驱动主要数据结构说明 ...................................................................23 4.2.1 s3c2410 专有数据结构 ..............................................................................................23 4.2.2 Linux 通用数据结构说明 .........................................................................................24 4.3 LinuxNand Flash 驱动说明 ............................................................................................29 4.3.1 注册driver_register ..................................................................................................29 4.3.2 探测设备probe .........................................................................................................30 4.3.3 初始化 Nand Flash 控制器 ......................................................................................30 4.3.4 移除设备 ....................................................................................................................30 4.3.5 Nand Flash 芯片初始化 .............................................................................................31 4.3.6 读Nand Flash ........................................................................................................31 4.3.7 写 Nand Flash ...........................................................................................................31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值