Rigo的胡言乱语录

Rigo's Stupid Blogs Archives

View on GitHub

EJTAG 电路简介

MIPS EJTAG

EJTAG 实际是 MIPS 的标准,而 EJTAG 出现在龙芯处理器上也是在龙芯 MIPS 时代。

这里随便给出一个标准文件,后续所有内容以及页面,在语境意及 MIPS EJTAG 标准文档时均称“标准”,并引用其 PDF 页码:http://www.t-es-t.hu/download/mips/md00047f.pdf ,文档编号:MD00047,修订版本:6.10 。

EJTAG 实际上是在 IEEE JTAG 的基础上进行了一些增强和修改而成。不同之处简单来说:

TAP 电气接口

JTAG 的 TAP(Test Access Port,这是在被调芯片上的电路)有五条信号:

TAP 使用方式

具体 TAP 状态机的状态转移见标准 90 页。复位 TAP 后位于Test-Logic-Reset状态,而后 TAP 通过每时钟上升沿时采样 TMS,使 TAP 状态转移,比如序列 010 会使 DR 内容被放进移位寄存器,此时不断在 TMS 上发送 0 使 DR 原内容被从 TDO 移出、新内容被从 TDI 读入。TDO 和 TDI 都是最低位优先进出。然后在 TMS 上发送 110 就会使 新数据被写入 DR、然后 TAP 回到 Run-Test/Idle 状态。JTAG TAP 的其他性质不再在此赘述,请自行检索。

MIPS EJTAG 插座

见标准 197 页,为标准 2.54mm 排针。龙芯官方的 EJTAG 调试探头沿用了这一形制,但开发板基本都会为了节省空间而使用其他引脚定义。

             
#TRST TDI TDO TMS TCK #BRST DINT
1 3 5 7 9 11 13
2 4 6 8 10 12 14
GND GND GND GND GND 空脚 VIO

官方 EJTAG 调试探头的第 12 脚为空脚,PCB上使用了缺 pin 的排针焊接,但其排线上并没有堵上这个 pin 的空位。其排线可以使用 IDC 插座,但官方硬件没有使用。我个人是推荐使用 IDC 插座提供防呆设计的。

官方 EJTAG 调试探头使用 3.3V 电平,而被调试的芯片可能需要电平转换 IC(如 2K0300 久久派需使用中科云售卖的转换器,将标准 EJTAG 接口转换为其小尺寸接口、将 3.3V 转换为 1.8V 逻辑电平)。

对官方 EJTAG 硬件的其他描述见对应章节。

从至少 LS3A4000 开始,LoongArch CPU 已经不使用 DINT 信号。在我观察到的开发板中,也基本不使用 #BRST 信号。理论上调试探头可以不实现 #BRST 和 DINT 信号也可以正常调试 LoongArch 硬件,但调试软件的配置文件中依然有对 LS1C103 之类的芯片使用 DINT、#BRST 信号的用法,所以为了保证兼容性,仍然应当实现这两个信号。