最近在移植bootloader,搜集了一些u-boot移植文档,然后成功编译了u-boot,想将其烧到norflash中测试,于是通过j-link arm这个工具对其进行烧写,不料烧写的过程出现了错误,提示无法擦除xx sector之类的,并中止了擦写,原厂的u-boot被擦除了,自己编译了u-boot又无法烧写进去,而我的nandflash里叶没有U-boot,结果是,我心爱的Mini2440完全就瘫痪了,于是疯狂百度,google,想找到一种方法能够使J-LINK ARM正确的烧写NOR,搜到了N多哥们遇到类似的情况,就是没有牛人的出现来解决。想起以前看的某位哥们一个帖子,他为了不破坏Nor里面的u-boot,将u-boot烧写到了SDRAM里面测试,于是想通过这个方法来运行u-boot,然后通过u-boot来烧写nand。我想通过AXD来将u-boot,后来发现AXD只能烧写axf文件,而不能烧写Bin文件,于是这个思路又夭折,无奈到各种ARM技术交流群放肆请教,有位现在在日本的哥们给我提供了一条思路“间接烧写nand”,于是百度,果然有一篇“J-LINK间接烧写S3C2440 S3C2410 NORFLASH NANDFLASH”的帖子(该贴地址:http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=3228953),通过该帖子的指点,我顺利烧写了Norflash,该贴还有一些遗漏之处,现将我的步骤记叙如下:
我的平台是Mini440的, ARM是s3c3440,2M Norflash,128M nandflash
该贴的思路是:通过j-link command工具将内存初始化程序加载到ARM得RAM里运行,然后将U-BOOT加载到SDRAM运行,最好通过u-boot烧写NOR 和 NAND
1 加载内存初始化程序到RAM
连接好J-LINK打开J-LINK COMMAND工具,如果是从nor启动,输入loadbin f:/init.bin 0x40000000,如果是nand启动,输入loadbin f:/init.bin 0x0
输入setpc 0x40000000或者setpc 0x0将程序运行pc指针定位到init.bin的地址
输入g,运行内存初始化文件
这个init.bin文件,某位哥们已经上传到csdn上,可以去下载http://download.csdn.net/source/3033969,我的S3C2440运行没问题,其他的就不清楚了
2 加载u-boot到SDRAM
输入 h,停止内存初始化程序
输入loadbin f:/u-boot.bin 0x33f80000
输入 setpc 0x33f80000
输入 g运行
这个时候终端上就能看到打印了,如不能重复第二步操作
不是所有的u-boot都支持的内存启动,我用的是tekkeman编译好的u-boot.bin,下载地址是http://blog.chinaunix.net/space.php?uid=20543672&do=blog&id=94379
3 擦写norflash
如果需要擦除Nor就要在带电的情况将启动开关拨到Nor端,否则将无法擦写
在j-link comand输入h停止u-boot的运行
再输入loadbin f:/your-u-boot.bin 0x30000000将你要下载的u-boot的加载到SDRAM
输入g,运行u-boot
再U-boot的终端下输入protect off all将nor flash解锁,否则下载时就会提示,芯片已锁定,无法擦写的错误
再U-boot的终端下输入erase all将Nor擦除
如显示“erasing setctor xxx … ok.”一串打印则表示擦除成功
输入cp.b 0x30000000 0 0x3dfd8,将your-u-boot烧写进Nor,如终端打印“copy to flash。。。“,则表示正在烧写,否则则表示失败
注意0x3dfd8是your-u-boot的文件大小,我的是250kb,所以通过250*1024然后换成16进制就是0x3dfd8了
最好显示“copy to flash… done“,大功告成!
我的nandflash坏块了,没用烧写成功,再此不表,如想知道如何擦写,请看原版的帖子。
PS:遇到问题,不要慌,不要乱,理一下思路,先干什么,后干什么,然后去网上查资料,网上有众多牛人,问题总会解决的。