ST40 自制 JTAG 适配器
// 文章首发于 https://zhuanlan.zhihu.com/p/28762429
// 但是不知道为什么搜索引擎还没有收录,便在博客再次发布。
0. 引言
意法半导体生产的 SH4 架构的 ST40 CPU 被广泛地用于机顶盒中。
对于DIY家庭硬件来说,救砖途径十分重要,尤其是在 FLASH 由于误操作被清空时,不能使用 u-boot 之类的 bootloader,JTAG 几乎就成了唯一较方便的救转方式。
(当然还可以用编程器直接写 FLASH,不过贴片的 FLASH 芯片用烙铁拆还是有点小怕。)
而对于 ST40 CPU 来说,需要购买 ST 官方的 ST Micro Connect 仿真器,才可使用 JTAG 进行调试与运行程序,价格比较昂贵,其实这样的一个 JTAG 适配器,是可以自己DIY制作的。
1. 准备
- FT4232 或者 FT2232 系列模块
- 双母头杜邦线若干
- 目标板(此处为 STb7100 板子)
- PC(Fedora 14 x86 与 Windows)
- 万用表
2. 操作
2.1 目标板 JTAG
首先在目标板上,找到 JTAG 针脚(一般为20针),可以利用 Google 搜索一下板子的 Datasheet,比如我的 STb7100 板子可以在这找到:
http://www.avi-plus.com/download/STb7100MB.pdf
翻阅找到有关 JTAG 的一页,可以看到针脚是这样定义的,如下图。
由于板子上的 JTAG 针脚没有标记,而偶数针脚均为 GND,因此利用万用表测试各针脚与 GND 的连通性,能够找到所有偶数针脚,便可确定各针脚的定义。
(注意:第 7 针应为nASEBRK;第 17 针也可叫nRST)
2.2 FTDI 模块
对于 FTDI 的芯片,国内存在着大量山寨芯片,一般淘宝上比较便宜的那种,十拿九稳就是山寨芯片了,虽然功能没有影响,但性能有不同,还是强烈建议购买正版。
比较方便的模块之一是 UM232H,国内淘宝存在如下两种:前者应为国内小厂商自己山寨的模块,后者应为 FTDI 官方版本,都可以用。
一般来说,模块购买后,应该是空的,即没有进行烧写程序的;当然如果有,也不影响。
基本的思路就是将 FTDI 模块的 VID 和 PID 修改为 ST Micro Connect 对应的值,达到欺骗的效果。
将购买的模块连接至 PC,前往 FTDI 官网下载驱动后安装,下载使用 MProg 对其进行烧写。首先扫描设备 Device -> Scan,然后读取数据 Tools -> Read and Parse,进入编辑模式后,可修改其数据,修改后如下图。
之后使用闪电图标进行烧写,就完成了欺骗第一步,如果你发现烧写后发现信息错误,可以在 FTDI 的驱动 INF 文件中,加入你设备当前的 VID 和 PID,对你的设备重新安装该驱动,即可识别为 FTDI 设备,便可再次使用 MProg 进行烧写操作。
下图为连线图,使用了 FTDI 官方模块作为图例。对于 FTDI 官方模块来说,需要使用跳线帽对其电源进行设置:VIO 与 3V3,5V0 和 USB 连接;而对于山寨模块来说,一般不需要考虑电源,厂商都已经设置好,因此可直接看左下侧的连线。
根据下图将 UM232H 模块与目标板 JTAG 相连。
(注意:GND 在此可不连)
2.3 工具集
目前暂未找到 Windows 下的 ST Micro Connect 驱动程序,估计 ST 官方的 FTP 有,不过前些年流传的用户名和密码失效了。
ST 其实有个专用的 Toolset 和 Package 的,Toolset 的下载地址(Windows):
ST40 Micro Toolset R5.3.0. Get the software safe and easy.
目前我的解决方案是使用 STLinux 内置的工具集,需要安装 STLinux,下载地址:
http://archive.stlinux.com/stlinux/2.4/iso/STLinux-2.4-sh4-20141119.iso
也就是说 Windows 有工具集但缺驱动,而 Linux 下要安装一个大东西。
这玩意儿坑的我非常厉害,等有空了我再单独发一篇文章。
2.4 工具集使用
如果安装了 STLinux 或者 Toolset 并有驱动,可以打开其提供的 gdb。
对于我的 STb7100 来说,使用 mb411 的包,
Windows 下使用
(gdb) sh4tp STMCLT2333A:mb411:st40
Linux 下使用
(gdb) sh4tp STMCLT2333_A:mb411:st40
接下来就可以加载程序了,可以加载 ELF 格式的程序
(gdb) load /home/st/bootloader/u-boot
继续执行
(gdb) continue
理论上现在的串口就可以使用了。
A. 参考资料
[1] How to JTAG Interface STMCLT Clone (Rev 2) http://www.avi-plus.com/images/fbfiles/files/HOWTO_JTAG_Interface_STMCLT_Clone_REV2.pdf