找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

  [复制链接]
本帖最后由 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.
 楼主| | 显示全部楼层
本帖最后由 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.
回复

使用道具 举报

 楼主| | 显示全部楼层
备用
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

使用道具 举报

鼎力支持,话说 专用内存运行版 breed 就是去掉cpu和内存初始化部分吧。

点评

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

使用道具 举报

来自手机 | 显示全部楼层
大神威武啊
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
拜读了,lz威武
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

顶 前排支持                                 。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
用力一顶
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

学习中。大神,接受我的膜拜吧。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

学习中。大神,接受我的膜拜吧。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

顶一个H大,不过这对动手能力很强的才行,一般人直接一个编程器简单多了

点评

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

使用道具 举报

H大 果然厉害  软硬都可以啊。。。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
软硬都这么厉害666
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

好贴,收藏了,谢谢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-28 05:05

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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