在Linux下,用OpenJTAG+OpenOCD烧写NAND Flash

转自:http://tech.techweb.com.cn/thread-413979-1-1.html

 

一直以来,众多的开发工具都是基于windows的,nandflash的烧写工具也一样。'j' c, |3 j" d) x% k* L: e# f
. Y6 l$ t9 W$ w( r# W
   我手头有数块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口比较稀少的本本上,甚至为你节省了一个USBhub. 但是网上一般都卖到180一个,个人觉得太离谱了,90块钱顶了天.

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

    好了,废话少说,先说怎么实现直接烧写吧,下面以s3c2440为例:
+ k7 @/ R$ E* y9 r) r
    这里省略OpenOCD编译,详细的编译在我的下载中的OpenJTAG.tar.gz中的README中有详细描述.8z# q7 P" c' N. f% f

    首先在你的openocd.cfg中的最后加入:  A5s3 c" l6 y! }
0 f5 U* }) G5 x3 J/ t6 z. {
           nand devices3c2440 0

    然后启动openocd:

          openocd7h* G! [# K2 t6 g4 Q- h- N9 U

    再用telnet连上openocd:

          telnet  127.0.0.144444C$ u) W1 ?3 q3 M. V6 U9 E

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

           nand probe0%k! {3 S( E( n! s8 b. R5 q
; h, K6 F1 {0 K. |. {
     看是否找到你的nand flash, 记得给开发板上电哟. 

     有的平台可能会出现  Addresstranslation failure, 那是因为Openocd有bug, 本来Dcache没有开,它认为了开了,并且认为MMU也开了,访问的每个地址都会进行转换,而又找不到页表,所以就出现转换错误。解决办法就是用:
* _, U" ^0 L( v! N% e+ P
           reset;halt#?4 m# }$ v* z8 j

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

           nand probe0 8]3 ^" h1 \. G

     就不会出现地址转换失败了.
) Q1 @- [8 [. q( B3 j4 D: l7 U% `
    接下来就可以进行读、擦除、写了:
, [+ V1 e1 X+ O# }+ `
     从第0个nand上第10字节开始读512个字节到dump.bin文件中:
; G* Q0 G7 u# @# Z' O. L, }
           nand0  /dump.bin  10  512

     从第0个nand上第9块擦除到第15块(共擦除了7 *block_size个字节):
$ U- z3 S9 b7 v5 n- [" I( f
           nand 0 915

     将/u-boot.bin写到第0个nand上的4K开始的地方:1i2 ~: ]( q2 p: E# y
! M# R( R' f! G, x* w4 a
           nand write0 /u-boot.bin  40964z5 K4 B9 m' ~; F, E& ~
3 }! j' b& ~8 V5 X: g

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

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值