閱讀470 返回首頁    go 阿裏雲 go 技術社區[雲棲]


使用JLink間接燒寫S3C2410、S3C2440開發板Nor、Nand Flash的方法

1. 簡要說明
JLink的調試功能、燒寫Flash的功能都很強大,但是對於S3C2410、S3C2440的Flash操作有些麻煩:燒寫Nor Flash時需要設置SDRAM,否則速率很慢;燒寫Nand Flash隻是從理論上能夠達到,但是還沒有人直接實現這點。
本文使用一個間接的方法來實現對S3C2410、S3C2440開發板的Nor、Nand Flash的燒寫。原理為:JLink可以很方便地讀寫內存、啟動程序,那麼可以把一個特製的程序下載到開發板上的SDRAM去,並運行它,然後使用這個程序來燒寫。

2. 操作步驟
2.1 連接硬件
對於大多數的S3C2410、S3C2440開發板而言,它們所用的JTAG接口一般有3種(如圖1所示),其中前兩種用得比較多。

(原文件名:3種jtag.JPG)

但是市麵上的JLink,大多隻支持第3種JTAG接口,所以需要用到轉接板。或者直接使用JLink的變種,如圖2所示的兩種改進版JLink:

(原文件名:2種jlink.JPG)

以mini2440為例,如圖3接好JTAG線。

(原文件名:JLink_2440.jpg)

2.2 運行J-Link commander
J-Link commander啟動界麵如圖4所示,(如果沒有發現檢測到CPU,就在裏麵執行usb命令連接JLink,再執行r命令識別處理器)。

(原文件名:JLINK啟動界麵.JPG)

2.3 下載運行特製的程序
對於S3C2410、S3C2440處理器,它們內部有4K的SRAM,當使用Nor Flash啟動時,地址為0x40000000;當使用Nand Flash啟動時,地址為0。
對於S3C2410、S3C2440開發板,一般都外接64M的SDRAM。SDRAM能被使用之前,需要經過初始化。
所以,先把一個init.bin下載到內部SRAM去運行,它執行SDRAM的初始化;然後再下載一個比較大的程序,比如u-boot到SDRAM去動行,它將實現對Nor、Nand Flash的操作。
以下是在J-Link commander裏的命令,假設init.bin、u-boot.bin在e:盤下。
1. speed 12000               //設置TCK為12M,下載程序時會很快

2. 下載並運行init.bin,這是用來初始化SDRAM的
2.1 如果是NAND啟動:
loadbin e:\init.bin 0      
setpc 0
g
2.2 如果是Nor啟動:
loadbin e:\init.bin 0x40000000      
setpc 0x40000000
g

3. 下載特製的uboot:
h
loadbin e:\u-boot.bin 0x33f80000
setpc 0x33f80000
g

上述操作命令可以參考圖5。

(原文件名:使用jlink下載運行uboot.JPG)

現在,u-boot已經啟動了,在串口工具上可以看到如圖6所示界麵,以後就可以通過網絡、串口下載文件,然後使用u-boot裏的命令進行燒寫。

(原文件名:u-boot啟動界麵.JPG)

當然,如果沒有網絡,也不想忍受串口的速率,也可以通過jlink commander下載,比如:
h
loadbin your_file.bin 0x30000000
g

這時,你的文件已經被下載到SDRAM 0x30000000去了。
後麵的操作就是u-boot的命令了。


2.4 使用u-boot燒寫Flash
以例子為例,假設需要燒寫一個名為leds.bin的程序到Nor、Nand Flash,那麼請參考:
(1).通過Jlink下載:
在J-Link commander裏執行:
h
loadbin e:\leds.bin 0x30000000
g

注意leds.bin的大小

(2).通過u-boot燒寫到Nor Flash:
在u-boot裏執行:
protect off all        // 解鎖
erase 0 2ffff         // 擦除從0地址開始的大小為0x30000的NOR Flash扇區(大小為可擦除塊的整數倍,可以運行flash info命令查看)
cp.b 0x30000000 0 30000   // 把前麵下載到0x30000000的程序燒寫到NOR去

(3).通過u-boot燒寫到Nand Flash:
在u-boot裏執行:
nand erase 0 30000           // 擦除從0地址開始的大小為0x30000的Nnad Flash扇區
nand write.jffs2 30000000 0 30000   // 把前麵下載到0x30000000的程序燒寫到Nand去


注意,上麵用的2ffff、30000等數字是192K,如果你的程序比較小,請自行設置。
 
 
heky 當前離線
積分
1423
查看詳細資料
2
發表於 2009-3-4 14:37:36 | 隻看該作者
好東西
 
 
 
juedi 當前離線
積分
435
查看詳細資料
3
 樓主| 發表於 2009-3-4 14:38:19 | 隻看該作者
init.bin用匯編寫成,位置無關,可以在任何地方執行。
u-boot.bin也是經過了我的大量修改,可以適用於友善之臂、優龍、揚創等等開發板,具備以下特點:
1. 支持CFI、JEDEC接口的NOR FLASH
2. 支持各種NAND FLASH
3. 支持網絡CS8900、DM9000
4. 支持USB下載
5. 支持燒寫YAFFS文件係統映象

下載地址為:https://ouravr.com/bbs/bbs_upload34876/files_12/ourdev_422781.rar

這兩個程序是我為了基於FT2232D的OpenJTAG編寫、修改的,後來想想在JLink上也可以使用。
實際上,針對基於FT2232D的USB JTAG工具,我已經編寫了一個NOR、NAND FLASH燒寫器,目前JLINK燒寫NAND的工具還在研究中。
這是一種間接的、麻煩的、通過u-boot燒寫NOR、NAND的方法,但是:速度很快,並且對於JLink似乎也沒人搞定燒寫NAND。

最後更新:2017-04-03 14:54:43

  上一篇:go 安裝XML 功能定義文件方法
  下一篇:go 使用dic集合 加載xml文檔 並顯示至TreeView控件