折腾 WNDR4300 v1 的 JTAG

转载请注明原帖链接和作者!

最近重新入手WNDR4300v1进行折腾,主要是为了测试完全重写了 flash 驱动框架的 breed 的功能是否正常。因为已经入手 TRACE32,因此就想把 JTAG 功能用上。

根据 WNDR4300v1 的 GPIO 定义可知,JTAG 所在的 4 个 GPIO, 0~3 已经全部被 LED 占用了,因此第一步就是断开 GPIO 到 LED 的连接,改为到 JTAG 插座的连接。

经过一番测量,最终找出了 4 个连接 LED 的电阻,和 4 个连接 JTAG 的空电阻焊盘:

4 个连接 LED 的电阻分别是 R26/R27/R30/R31

4 个连接 JTAG 插座的电阻则是 R22/R23/R24/R25,挨在一起的。只需要将连接 LED 电阻挪到这里就行。

接下来是连接 JTAG 焊盘的另一组电阻焊盘,要全部焊上 0Ω 电阻,才能保证 JTAG 信号全部连通:

R831 - TDI
R833 - TDO
R835 - TMS
R837 - TCK
R830 - nSRST

但是即使信号全部通了,GPIO pinmux 也设定为了 JTAG,TRACE32 还是连不上。读取出来的 IDCODE 是 00000000,而非 MIPS EJTAG 常见的 00000001。

这个问题折腾了我很久,直到我看 AR9344 datasheet 时,看到 Bootstrap 才想起来,Atheros 的 JTAG 有两种模式,JTAG 和 EJTAG。通过一个 GPIO 来确定的:

于是将 GPIO18 设置为 input 模式,并读取了电平,果然是 0。这显然不对,必须要找到这个 GPIO 所连接的电阻位置。然后经过一番测量,才找到了对应的电阻:

R397,在屏蔽罩里面,AR9344 芯片的上方。但奇怪的是,经过测量,发现这是个上拉电阻,一端是 GPIO18,一端是跟 JTAG 的 VRef 和串口 (TTL) 的 VCC 直连的。更奇怪的是,通电测量电压,发现这个电阻上只有 2.6V 的电压, JTAG 插座 VRef 上也是 2.6V,JTAG 4 个信号也全都是 2.6V,只有串口 VCC 才是 3.3V的。

当我尝试将 GPIO18 直连到串口的 3.3V 上后,GPIO 寄存器才认为 GPIO18 处于高电平状态,而这时 TRACE32 才能顺利连上 JTAG。

我不知道为什么串口 VCC 跟 JTAG 的 VRef 的电压会不一致,因为使用电阻档进行通断测量时,蜂鸣器会响,证明这两个引脚是短接的。但是我也没有别的办法了,能用就行。因此最终就是用飞线,将串口 VCC 直接跟 GPIO18 接在一起。万事大吉。

折腾 WNDR4300 v1 的 JTAG》有3个想法

发表评论

邮箱地址不会被公开。 必填项已用*标注