JLink的調試功能、燒寫(xiě)Flash的功能都很強大,但是對于S3C2410、S3C2440的Flash操作有些麻煩:燒寫(xiě)Nor Flash時(shí)需要設置SDRAM,否則速率很慢;燒寫(xiě)Nand Flash只是從理論上能夠達到,但是還沒(méi)有人直接實(shí)現這點(diǎn)。
本文使用一個(gè)間接的方法來(lái)實(shí)現對S3C2410、S3C2440開(kāi)發(fā)板的Nor、Nand Flash的燒寫(xiě)。原理為:JLink可以很方便地讀寫(xiě)內存、啟動(dòng)程序,那么可以把一個(gè)特制的程序下載到開(kāi)發(fā)板上的SDRAM去,并運行它,然后使用這個(gè)程序來(lái)燒寫(xiě)。
2. 操作步驟
2.1 連接硬件
對于大多數的S3C2410、S3C2440開(kāi)發(fā)板而言,它們所用的JTAG接口一般有3種(如圖1所示),其中前兩種用得比較多。

但是市面上的JLink,大多只支持第3種JTAG接口,所以需要用到轉接板?;蛘咧苯邮褂肑Link的變種,如圖2所示的兩種改進(jìn)版JLink:

以mini2440為例,如圖3接好JTAG線(xiàn)。

2.2 運行J-Link commander
J-Link commander啟動(dòng)界面如圖4所示,(如果沒(méi)有發(fā)現檢測到CPU,就在里面執行usb命令連接JLink,再執行r命令識別處理器)。

2.3 下載運行特制的程序
對于S3C2410、S3C2440處理器,它們內部有4K的SRAM,當使用Nor Flash啟動(dòng)時(shí),地址為0x40000000;當使用Nand Flash啟動(dòng)時(shí),地址為0。
對于S3C2410、S3C2440開(kāi)發(fā)板,一般都外接64M的SDRAM。SDRAM能被使用之前,需要經(jīng)過(guò)初始化。
所以,先把一個(gè)init.bin下載到內部SRAM去運行,它執行SDRAM的初始化;然后再下載一個(gè)比較大的程序,比如u-boot到SDRAM去動(dòng)行,它將實(shí)現對Nor、Nand Flash的操作。
以下是在J-Link commander里的命令,假設init.bin、u-boot.bin在e:盤(pán)下。
1. speed 12000 //設置TCK為12M,下載程序時(shí)會(huì )很快
2. 下載并運行init.bin,這是用來(lái)初始化SDRAM的
2.1 如果是NAND啟動(dòng):
loadbin e:\init.bin 0
setpc 0
g
2.2 如果是Nor啟動(dòng):
loadbin e:\init.bin 0x40000000
setpc 0x40000000
g
3. 下載特制的uboot:
h
loadbin e:\u-boot.bin 0x33f80000
setpc 0x33f80000
g
上述操作命令可以參考圖5。

現在,u-boot已經(jīng)啟動(dòng)了,在串口工具上可以看到如圖6所示界面,以后就可以通過(guò)網(wǎng)絡(luò )、串口下載文件,然后使用u-boot里的命令進(jìn)行燒寫(xiě)。

當然,如果沒(méi)有網(wǎng)絡(luò ),也不想忍受串口的速率,也可以通過(guò)jlink commander下載,比如:
h
loadbin your_file.bin 0x30000000
g
這時(shí),你的文件已經(jīng)被下載到SDRAM 0x30000000去了。
后面的操作就是u-boot的命令了。
2.4 使用u-boot燒寫(xiě)Flash
以例子為例,假設需要燒寫(xiě)一個(gè)名為leds.bin的程序到Nor、Nand Flash,那么請參考:
(1).通過(guò)Jlink下載:
在J-Link commander里執行:
h
loadbin e:\leds.bin 0x30000000
g
注意leds.bin的大小
(2).通過(guò)u-boot燒寫(xiě)到Nor Flash:
在u-boot里執行:
protect off all // 解鎖
erase 0 2ffff // 擦除從0地址開(kāi)始的大小為0x30000的NOR Flash扇區(大小為可擦除塊的整數倍,可以運行flash info命令查看)
cp.b 0x30000000 0 30000 // 把前面下載到0x30000000的程序燒寫(xiě)到NOR去
(3).通過(guò)u-boot燒寫(xiě)到Nand Flash:
在u-boot里執行:
nand erase 0 30000 // 擦除從0地址開(kāi)始的大小為0x30000的Nnad Flash扇區
nand write.jffs2 30000000 0 30000 // 把前面下載到0x30000000的程序燒寫(xiě)到Nand去
注意,上面用的2ffff、30000等數字是192K,如果你的程序比較小,請自行設置。
聯(lián)系客服