找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 33456|回复: 67

另类方法制作 JTAG 调试器,AR9341 JTAG 救砖方法

  [复制链接]
发表于 2015-11-27 00:17 | 显示全部楼层 |阅读模式
本帖最后由 hackpascal 于 2015-11-27 00:19 编辑

转载请注明原作者及原帖链接

注:本帖在方法在 AR9341 上测试成功。此方法理论上适用于任何路由,只要你有此路由对应的openocd初始化文件

楼主没有专用的 JTAG 调试器,因此一直无法开发 NAND 以及并行 NOR 的路由。最近研究 JTAG 标准,发现可以使用 GPIO bitbang 的方式来操作 JTAG,因此有了此方法。

此方法的原理是将一块开发板作为 JTAG 调试器,通过 GPIO 与目标板的 JTAG 接口相连,然后直接在开发板里对目标板进行操作。在 PC 上通过 SSH 和 Telnet 协议来与开发板通信。
此方法优点是不需要 LPT 并口和 Wiggler 线,只需要一根网线即可进行操作,缺点是需要一块至少有5个 GPIO 的开发板,以及通信速度慢。

[本帖内容]
  • 1楼 - 准备开发板和目标板
  • 2楼 - JTAG 救砖过程
  • 3楼 - 备用


准备开发板

开发板的要求是至少拥有5个可以软件控制的 GPIO (用来连接 TCK TDI TDO TMS TRST),此外还有 SRST,TRST 与 SRST 至少需要一个,TRST 优先。此外要能够启动 Linux 固件。

这里楼主使用的是一个迷你的 AR9331 开发板,上面有足够的 GPIO,楼主给其中6个 GPIO 焊上了排针,另外两个是 VCC 和 GND。



开发板系统使用 OpenWrt,需要安装 openocd 包

此外需要记住开发板上使用的 GPIO 的编号,这会在 openocd 中用到
楼主用到的是 6 - TRST/7 - TDI/8 - TDO/18 - TMS/19 - TCK/20 - SRST

准备目标板

目标板楼主使用的是迅捷 FW300R v3。

FW300R v3 并没有现成的 JTAG 插座,但是 JTAG 必需的4个引脚全部被引出,如图:



这里除了这4根 JTAG 必要的线,还需要 RESET_L 用作 TRST,另需要焊一根线用作 GND

注意导线要焊在电阻的远地端

设备连接

将路由的 JTAG 线与开发板对应的 GPIO 相连:



注意一定要将目标板的 GND 与开发板的 GND 相连,以便给开发板提供基准电平。VCC 不用连接。

如果目标板上有 JTAG 接口,那么更方便,按照此图进行连接:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2015-11-27 00:17 | 显示全部楼层
本帖最后由 hackpascal 于 2015-11-27 01:29 编辑

JTAG 救砖过程

这里假定 FW300R v3 的 Flash被清空了,导致路由无法启动。楼主通过取下 Flash 来实现这种情形。

首先,启动开发板,通过 SSH 进入 shell。

然后将附件 ar934x.cfg 通过 WinSCP 复制到开发板的 /tmp 目录下。

ar934x.cfg 是楼主写的 openocd 脚本,它用来探测目标板,并进行 CPU 和内存的初始化操作。

ar934x.cfg 开头的内容如下:

  1. telnet_port 4444

  2. interface sysfsgpio

  3. #                   tck tms tdi tdo
  4. sysfsgpio_jtag_nums 19 18 7 8

  5. sysfsgpio_trst_num 6
  6. # sysfsgpio_srst_num 6

  7. adapter_nsrst_delay 100
  8. jtag_ntrst_delay 100

  9. reset_config trst_and_srst

  10. set CHIPNAME ar9341

  11. jtag newtap $CHIPNAME cpu -irlen 5 -ircapture 0x1 -irmask 0x1f -expected-id 1

  12. set TARGETNAME $CHIPNAME.cpu
  13. target create $TARGETNAME mips_m4k -endian big -chain-position $TARGETNAME

  14. $TARGETNAME configure -work-area-phys 0xa0600000 -work-area-size 0x20000
复制代码


其中 telnet_port 表示用于操作 openocd 的端口号,可以自行修改
interface sysfsgpio 表示使用 /sys/class/gpio 来进行 GPIO 模拟 JTAG 的操作
sysfsgpio_jtag_nums 19 18 7 8 后面的4个数字依次指定 TCK TMS TDI TDO 对应的 GPIO 号,需要根据自己的开发板配置进行修改
sysfsgpio_trst_num 6 指定 TRST 对应的 GPIO 号,需要根据自己的开发板配置进行修改
sysfsgpio_srst_num 6 指定 SRST 对应的 GPIO 号,需要根据自己的开发板配置进行修改
sysfsgpio_trst_num 与 sysfsgpio_srst_num 二者至少需要一个,且不能相同

其它的设置不用修改。请修改后再传入开发板。

这里说一点:
AR9341 本来是没有 TRST 的,RESET_L 本来应该用作 SRST。但是如果这样做,OpenOCD 无法对目标板进行操作,提示  Failed to enter Debug Mode。
因此如果用其他的目标板也遇到这种情况,不妨将目标板的 SRST 连接在开发板上的 TRST 上进行尝试。


然后启动目标板,这里已经假定目标板没有 bootloader,也就是没有进行任何初始化。


然后就是启动 openocd 了:
在 /tmp 目录下执行 openocd -f ar934x.cfg 或者直接执行 openocd -f /tmp/ar934x.cfg:



如果 JTAG 连接正常,那么 openocd 将会提示检测到一个 TAP (Test Access Port) 设备,且没有输出 Error,表示成功:



如果出现类似于下面的错误,那么就要检查:导线是否焊接良好,JTAG接线是否正确。。。此外如果目标板里面有 bootloader 并且启动了,那么 bootloader 可能会禁用 JTAG,那么也会出现这样的错误。

  1. Error: JTAG scan chain interrogation failed: all ones
  2. Error: Check JTAG interface, timings, target power, etc.
  3. Error: Trying to use configured scan chain anyway...
  4. Error: ar934x.m4: IR capture error; saw 0x00 not 0x01
复制代码



openocd 正常启动后,便是通过 Telnet 连接开发板对 openocd 进行控制了
可以直接在命令行中执行 telnet <开发板IP> <端口号>来启动,<端口号> 是 ar934x.cfg 中 telnet_port 指定的端口号

这里楼主使用 PuTTY 来连接 telnet:



telnet 连接成功后如图:





进入 telnet 之后,便可以对目标板进行操作了

首先要对目标板进行复位,并将其暂停执行,以便可以手动初始化 CPU 和内存。

首先执行 reset 进行复位,然后执行 halt 暂停 CPU 执行:



然后执行下面的命令进行 CPU 与内存的初始化:

  1. ar934x_init ()
复制代码


该命令在 ar934x.cfg 中,可以对 AR9341/AR9342/AR9344 + SDRAM/DDR/DDR2 进行初始化

初始化结果如图:



注意三项 Initializing 输出都必须要有,任何一项缺失都说明初始化没有成功


初始化过后,路由的内存便可以正常使用了,只是缓存还没有初始化

然后将附件中特制的 JTAG 专用内存运行版 breed 加载到内存

首先将 breed-ar934x-ram-raw-0xa0201000.bin 复制到开发板 /tmp 目录下
然后执行下面的命令

  1. load_image /tmp/breed-ar934x-ram-raw-0xa0201000.bin 0xa0201000
复制代码

此命令最后的 0xa0201000 指的是此文件加载到内存中的地址,此地址记录在文件名中。



可以看到传输速度相当慢



将 breed 写入内存后,便可以执行它了:

  1. resume 0xa0201000
复制代码




这里的 0xa0201000 当然指的是加载地址

不出意外的话,可以在 TTL 中看到 breed 正常启动了:



如果没有正常启动,可以执行 halt 暂停 CPU 运行,再重新执行 resume 0xa0201000 命令,可以多试几次,也可以全部重来:





breed 启动后,便可以将目标板连接到电脑上刷机救砖了:



可以看到 Breed 上显示没有 Flash,这种情况当然是没法刷机的,必须将 Flash 装上再这么做。


附件包含
ar934x.cfg - 用于 openocd 的脚本
breed-ar934x-ram-raw-0xa0201000.bin - 用于 SPI 闪存的 AR934X 设备的特制 breed
breed-ar9344-wndr4300-ram-raw-0xa0201000.bin - 用于 WNDR4300 NAND 的特制 breed


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

点评

搂主 wndr4300 是不是要补电阻啊,附件中有wndr 4300 的raw 文件,没有wndr 4300 jtag 口的介绍啊。 看看下面帖子,能不能介绍下,谢 https://www.right.com.cn/forum/thread-1786304-1-1.html  详情 回复 发表于 2019-12-19 21:47

评分

参与人数 1恩山币 +1 收起 理由
好猫不一样 + 1 城会玩

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2015-11-27 00:17 | 显示全部楼层
备用
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-11-27 00:49 | 显示全部楼层
前排~~~~~~~~~~~~~~~~~~~~~~~~~~
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-11-27 04:17 | 显示全部楼层
鼎力支持,话说 专用内存运行版 breed 就是去掉cpu和内存初始化部分吧。

点评

还要在非缓存内存上运行  发表于 2015-11-27 09:40
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-11-27 05:51 来自手机 | 显示全部楼层
大神威武啊
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-11-27 06:31 来自手机 | 显示全部楼层
拜读了,lz威武
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-11-27 06:37 | 显示全部楼层
顶 前排支持                                 。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-11-27 08:56 来自手机 | 显示全部楼层
用力一顶
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-11-27 09:49 | 显示全部楼层
学习中。大神,接受我的膜拜吧。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-11-27 15:35 | 显示全部楼层
学习中。大神,接受我的膜拜吧。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-11-27 16:21 | 显示全部楼层
顶一个H大,不过这对动手能力很强的才行,一般人直接一个编程器简单多了

点评

如果是NAND或者并行NOR的闪存呢  发表于 2015-11-27 19:38
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-11-27 19:10 | 显示全部楼层
H大 果然厉害  软硬都可以啊。。。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-11-28 07:13 来自手机 | 显示全部楼层
软硬都这么厉害666
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2015-11-28 19:27 | 显示全部楼层
好贴,收藏了,谢谢H大。
找出了闲置的mw300r v6,刷了wrtnode的固件,把led剪了,用5个网口对应的引脚,一番百度+折腾后连上了一块stm32最小系统板。。

点评

使用正常么 我也连接过stm32,一切正常  详情 回复 发表于 2015-11-28 19:44
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-20 05:03

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表