使用PCI转并口实现SJF刷写嵌入式开发板
本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/database/sjf_board_usingpci_to_ltp.html
整理电脑文件发现曾经写的这个文档,怕找不到了,丢这吧。
引言:
目前越来越多的高端主板取消了并口的设计,对于需要使用并口来刷写开发板的嵌入式开发者是极其不方便的,通过PCI插槽转接出并口是相对廉价的解决方案。但是使用PCI转接的并口,并口地址与刷写软件默认的地址往往不一致,这就需要对刷写软件进行修改。本文就解决了三星S3C 2440刷写程序SJF2440.exe的代码修改,使其可以支持任何PCI转接口上转接出的并口用JTAG刷机。
方法:
1. 安装GiveIo驱动
为了让Windows可以读写I/O端口,必须安装GiveIO驱动。
2. 获取并口地址
将PCI转接卡接入主板,并安装好并口。
右击 我的电脑->属性->硬件->设备管理器->端口(COM和LPT)->双击xx*[1] PCI ECP Parallel Port(LPTx*[2])->资源。这样就可看到“输入/输出范围CD00-CD07”和“输入/输出范围CC00-CC07”。可以读出并口地址CD00,当外接有多个并口时,则依次使用后续的地址。
3. 利用H-JTAG获取信号连接情况
打开H-JTAG,点击H-Jtag菜单上的settings->port settings,选择LPx。在LPx右边框填入0xCD00,这样就设置好了并口的地址,对开发板上电,H-JTAG就可以识别出接入的开发板。
然后点击H-Jtag菜单栏上的settings->jtag settings,可以在Wiggler Pin Assignment里看到TMS/TCK/TDI/TD0/nTRST/nSRST对应的针脚号。
例如我的S3C2440开发板是
TMS->Pin3 D1
TCK->Pin4 D2
TDI->Pin5 D3
TD0->Pin11 Busy
4. 修改SJF代码使其支持外接的PCI口
有了上面获取的信息就可以来修改SJF的源代码了。
以SJF2440为例,SJF2410同理。
A:修改源代码中的ppt.h头文
#define LPT1 0x378
#define LPT2 0x278
#define LPT3 0x3bc
将这三行改为
#define LPT1 0xcd00
#define LPT2 0xcd00
#define LPT3 0xcd00
对于我的PC机来说修改LPT1就够了。具体看各位装完PCI驱动后用了哪个LPT。
B:修改源代码中的jtag.h头文件
#define TCK_H 0x01
#define TDI_H 0x40
#define TMS_H 0x02
将这三行修改为
#define TCK_H 0x04
#define TDI_H 0x08
#define TMS_H 0x02
为什么如此修改呢?
对于上面获取的TMS TDI TCK 三个信号,分别对应D1,D2,D3三个针脚。则有如下关系:
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 0 1 0 (TMS_H)
0 0 0 0 0 1 0 0 (TCK_H)
0 0 0 0 1 0 0 0 (TDI_H)
用转为十六进制表示则是TMS_H=0x02,TCK_H=0x04,TDI_H=0x08。
5. 如此修改完之后,用VC++进行编译,通过,然后刷机,获得成功!