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,如果你的程序比較小,請自行設置。