Jflash-s3c2410 linux移植(轉)

作者:斷水刀
轉載自:todaygood.cublog.cn



其實不能稱爲移植,只是將一般的Jflash代碼修改一下,以適合自己的板子。
參考文檔:
常見的JTAG cable結構都比較簡單,一端是DB25,接到電腦的並口上,中間經過74HC244和一些電阻實現電平轉換(5V3.3V?)(也有比較猥瑣的只用了 幾個100 Ohm電阻的方案,似乎我這裏用來燒CPLD的就是一條這樣子的...),另一端的JTAG header接到目標板的JTAG interface。
並口DB25原先主要是用來連接打印機,其引腳定義如下:
25 Pin D-Sub SPP SIGNAL DIRECTION IN/OUT
1 /Strobe In/Out
2 Data 0 Out
3 Data 1 Out
4 Data 2      Out
5 Data 3 Out
6 Data 4 Out
7 Data 5      Out
8 Data 6 Out
9 Data 7 Out
10 /ACK In
11 Busy In
12 Paper Out In
13 Select In
14 /Line Feed In/Out
15 /Error In
16 /INIT In/Out
17 /Select In In/Out
18-25 Ground GND
可見,數據線Pin2~Pin9可以用來發送數據,Pin10~Pin13等可以用來接收數據。
JTAG的數據傳輸形式是串行,主要使用了以下引腳:
TDI (Test Data In)
TDO (Test Data Out)
TCK (Test ClocK)
TMS (Test Mode Select)
TRST (Test ReSeT) optional.
因此,DB25-JTAG實際上只利用了DB25的少數幾根線。但由於DB25的8條數據線都可以作爲output,市面上就出現了各種使用不同Pin Assignment的JTAG線。例如Wiggler的Pin assignment:
TMS : Pin3 (D1)
TCK : Pin4 (D2)
TDI : Pin5 (D3)
TDO : Pin11 (Busy)
SRST    : Pin2 (D0)
TRST    : Pin6 (D4)
(參見Wiggler的電路圖,但最後的nSRST和nTRST可能不一定用到,並且在H-JTAG中的定義也不一樣,TRST是Pin2,沒有SRST)
H-JTAG裏還有另外一種接法--STD,定義如下:
TMS : Pin3 (D1)
TCK : Pin2 (D0)
TDI : Pin8 (D6)
TDO : Pin13 (Select)
SRST    : N/A
TRST    : Pin4 (D2)
而S3C2410的燒寫程序SJF2410用的是:
TCK : Pin2 (D0)
TDI : Pin3 (D1)
TMS : Pin4 (D2)
TDO : Pin11 (Busy)
這個可以在源代碼中的jtag.h文件裏看到。
除了DB25那邊的Pin Assignment有多種方案,JTAG connector也有20pin, 14pin, 12pin, 10pin等幾種標準。這裏一塊ARM9開發板配的DB25-JTAG轉換板就十分好玩,上面也是隻有一塊244,但是有Wiggler, STD, S3C2410三個20pin接口。由於20pin connector的Pin Assignment是固定的,三個接口對應的是DB25那邊的三種接法,因此開發板可以根據pc上運行的程序不同選擇不同的接口來接。
20Pin Connector的定義如下(參考此圖):
Vcc     1    2 NC
nTRST 3    4 GND
TDI     5    6 GND
TMS     7    8 GND
TCK     9 10 GND
GND      11 12 GND
TDO      13 14 GND
NRESET    15 16 GND
NC     17 18 GND
NC     19 20 GND
14Pin:
nTRST    1 2 GND
TDI 3 4 GND
TDO 5 6 GND
TMS 7 8 GND
TCK 9    10 GND
nSRST 11    12 n/a
DINT    13    14 Vcc
(DINT pin is used to raise Debug Interrupt. Many chips has no this pin.)
12Pin:
nTRST    1 2 GND
TDI 3 4 GND
TDO 5 6 GND
TMS 7 8 GND
TCK 9    10 GND
nSRST 11    12 GND
10Pin:
TCK 1 2 Vcc
TDI 3 4 Vcc
TDO 5 6 GND
TMS 7 8 GND
nTRST    9    10 GND
關於JTAG幾個信號,在H-JTAG主頁上提供了一個文檔,裏面有對此進行介紹:
……下面,讓我們從TAP(Test Access Port)開始。
  TAP是一個通用的端口,通過TAP可以訪問芯片提供的所有數據寄存器(DR)和指令寄存器(IR)。對整個TAP的控制是通過TAP Controller來完成的。TAP總共包括5個信號接口TCK、TMS、TDI、TDO和TRST :其中4個是輸入信號接口和另外1個是輸出信號接口。一般,我們見到的開發板上都有一個JTAG接口,該JTAG接口的主要信號接口就是這5個。下面,我 先分別介紹這個5個接口信號及其作用。
Test Clock Input (TCK)
TCK爲TAP的操作提供了一個獨立的、基本的時鐘信號,TAP的所有操作都是通過這個時鐘信號來驅動的。TCK在IEEE 1149.1標準裏是強制要求的。
Test Mode Selection Input (TMS)
TMS信號用來控制TAP狀態機的轉換。通過TMS信號,可以控制TAP在不同的狀態間相互轉換。TMS信號在TCK的上升沿有效。TMS在IEEE 1149.1標準裏是強制要求的。
Test Data Input (TDI)
TDI是數據輸入的接口。所有要輸入到特定寄存器的數據都是通過TDI接口一位一位串行輸入的(由TCK驅動)。TDI在IEEE 1149.1標準裏是強制要求的。
Test Data Output (TDO)
TDO是數據輸出的接口。所有要從特定的寄存器中輸出的數據都是通過TDO接口一位一位串行輸出的(由TCK驅動)。TDO在IEEE 1149.1標準裏是強制要求的。
Test Reset Input (TRST)
TRST可以用來對TAP Controller進行復位(初始化)。不過這個信號接口在IEEE 1149.1標準裏是可選的,並不是強制要求的。因爲通過TMS也可以對TAP Controller進行復位(初始化)。
  事實上,通過TAP接口,對數據寄存器(DR)進行訪問的一般過程是:
  1 通過指令寄存器(IR),選定一個需要訪問的數據寄存器;
  2 把選定的數據寄存器連接到TDI和TDO之間;
  3 由TCK驅動,通過TDI,把需要的數據輸入到選定的數據寄存器當中去;同時把選定的數據寄存器中的數據通過TDO讀出來。
另外,可選信號nSRST的定義如下(見參考資料1):
nSRST is a "system reset" signal and acts like conventional "Reset' button.
參考資料:
[1] http://www.linux-mips.org/wiki/JTAG
[2] http://en.wikipedia.org/wiki/Jtag
[3] http://docwiki.gumstix.org/JTAG
[4] http://wiki.openwrt.org/OpenWrtDocs/Customizing/Hardware/JTAG_Cable
[5] http://www.bluewaternz.com/corporate/uni/unikit/jtag/
從這裏明白了市場上各個板子公司的jtag接口爲何有20pin, 10pin,12pin,14pin的原因。再閱讀了高手
litron 的文檔,http://blog.chinaunix.net/u/23070/showart.php?id=157735
把jtag.h文件改動了一下
// Pin Connections
// TCK :DATA[0] (2) // my is 4    DATA[2]
// TDI :DATA[1] (3) // my is 5    DATA[3]
// TMS :DATA[2] (4)    //my is 3 DATA[1]
// TDO :STATUS[7] (11)
//#define TCK_H         0x01
#define TCK_H         0x04
//#define TDI_H         0x02             
#define TDI_H         0x08             
//#define TMS_H         0x04
#define TMS_H         0x02
編譯,燒寫,
[root@hujunlinux Jflash]# ./Jflash-s3c2410    vivi    /t=5

+------------------------------------+
|      SEC JTAG FLASH(SJF) v 0.11      +
|      modified by MIZI 2002.7.13      +
+------------------------------------+
> flashType=5
> S3C2410X(ID=0x0032409d) is detected.
> K9S1208 is detected. ID=0xec76

K9S1208 NAND Flash JTAG Programmer Ver 0.0
0:K9S1208 Program     1:K9S1208 Pr BlkPage 2: Exit

Select the function to test :0

[SMC(K9S1208) NAND Flash Writing Program]

Source size: 0x13a53

Available target block number: 0~4095
Input target block number:0
target start block number      =0
target size         (0x4000*n) =0x14000
STATUS:Epppppppppppppppppppppppppppppppp
Epppppppppppppppppppppppppppppppp
Epppppppppppppppppppppppppppppppp
Epppppppppppppppppppppppppppppppp
Epppppppppppppppppppppppppppppppp

K9S1208 NAND Flash JTAG Programmer Ver 0.0
0:K9S1208 Program     1:K9S1208 Pr BlkPage 2: Exit

Select the function to test :2
jflash 可以燒寫了,但是把vivi燒進去之後,運行minicom,串口沒有輸出,但是在windows下用
sjf2410燒寫同樣的一個vivi,正常運行,
碰到這個問題是因爲我燒寫vivi之後,
沒有關閉電源,再打開板子, 只是按了一下板子上的Reset按鈕,重新關閉再打開,串口就看到了vivi的啓動信息。
這裏提供我的Jflash源代碼,
說明適合採用wiggler的jtag ,
// TCK :DATA[0] (2) // my is 4    DATA[2]
// TDI :DATA[1] (3) // my is 5    DATA[3]
// TMS :DATA[2] (4)    //my is 3 DATA[1]
意思是TCK->pin4,也就是DATA[2],應爲pin2-pin9組成了DATA,所以pin2就是DATA[0]
依次類推TDI,TMS。TDO採用的是pin11, 因爲我的jtag的TDO跟litron大俠採用的是一樣的,
pin11,就沒管它了。

文件:
Jflash-s3c2410_linux.tar.bz2
大小:
8KB
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章