Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4568740
  • 博文数量: 385
  • 博客积分: 21208
  • 博客等级: 上将
  • 技术积分: 4393
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-30 13:40
文章分类

全部博文(385)

文章存档

2015年(1)

2014年(3)

2012年(16)

2011年(42)

2010年(1)

2009年(2)

2008年(34)

2007年(188)

2006年(110)

分类: LINUX

2007-01-07 19:53:12

其实不能称为移植,只是将一般的Jflash代码修改一下,以适合自己的板子。

参考文档:
常见的JTAG cable结构都比较简单,一端是DB25,接到电脑的并口上,中间经过74HC244和一些电阻实现电平转换(5V<->3.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]
[2]
[3]
[4]
[5]

从这里明白了市场上各个板子公司的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
下载:下载

















阅读(9883) | 评论(12) | 转发(0) |
0

上一篇:enter my job

下一篇:Linux内核启动地址

给主人留下些什么吧!~~

chinaunix网友2010-09-15 21:05:47

我有一事不明: 修改的jtag.h文件,怎么能和./Jflash-s3c2410 vivi /t=5对应?

chinaunix网友2010-09-15 21:05:47

我有一事不明: 修改的jtag.h文件,怎么能和./Jflash-s3c2410 vivi /t=5对应?

kooder2009-08-09 13:08:23

上传的附件到底重名名为什么呢?我解压后怎么只有一个文件?

kooder2009-08-09 13:08:23

上传的附件到底重名名为什么呢?我解压后怎么只有一个文件?

chinaunix网友2009-06-25 10:45:07

请问我用Jflash在linux下烧录,在选择完block后就一直没出现 STATUS:Epppppppppppppppp 然后光标一直停着闪烁,也不提示退出,请问是怎么回事呢?