作者lihgong (当宪兵是我一辈子的耻辱)
看板ASM
标题[闲聊] JTAG 原理
时间Wed Sep 30 22:37:08 2009
这篇文章在讲解 JTAG 的原理, 是一篇很枯燥乏味的文章
建议按左离开 XD
----
现代 IC 在设计时, 会在输出入的地方加入 flip flop
这个 Flip flop 可以用来阻挡IC输出/外界输入
进而做到, 隔离 IC 的功能
这里讲的 IC 不一定是整颗包起来的晶片, 也可以是 IC 内部的 module
运用加 flip flop 的方法, 可以把一整个 module 输出入隔离开来...
----
这些 flip flop 还可以串起来, 一个串一个, 这样做用途多多
串起来的 flip flop 叫做 shift-register
这个结构很有意思, 只要灌 clock 给这堆 flip flop
shift-register 的资料就可以被敲出来
反过来说, 我们想要的资料也可以敲进去
这个结构有个专业的名词: scan chain
scan chain可以拿来测试 IC/module
举例来讲, 我们可以把输入灌到某条 scan-chain
这条 scan-chain 正好是 IC 的输入, 看到了吗, 我们可以自行决定输入
反过来讲, scan-chain也可以把 IC 的输出敲出来
所以刚刚打进去的输入, 产生的输出, 就可以用这招再敲出来 !!
----
以 ARM7 的 CPU 来讲, CPU会存取的 data bus 上, 正好就有条 scan-chain 经过
如果我们想知道 register R0 的内容, 可以把下面这道指令塞到 scan chain 上...
str R0, [R10]
这个指令会把 R0 的内容写到 R10 指向的记忆体
CPU 会去执行这道指令, 但在 debug 模式时, CPU 被隔离, 没办法存取到记忆体
上面这道指令只为了让 R0 的内容出现在 scan-chain 上
看CPU 的结构, R0 可能要一两个 cycle 以後才会出现
这时候可以再塞一些 NOP 指令给 CPU 泡茶聊天...
等资料出现在 scan chain 时, 再敲 clock 就可以读出 register R0 内容了
这个方法真的是, 很巧妙啊 !!
类似的技巧可以组合出, 读写记忆体, 读写 CPU 暂存器
----
实际看 JTAG 的文件, 还会包涵一张 state machine 的图
除非有打算做 ICE, 不然知道 JTAG 的根本原理是用 scan-chain 做坏事就可以了 XD
ARM7 的文件有提到, 他的 scan chain 位在 CPU 哪里
以及嵌入的 debug unit 怎麽用 scan chain 操作
了解 ICE 的根本原理, 其实很有意思的 :)
--
非专业读书心得, 有错请更正, 感谢 :)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.84.2
1F:推 panrong:推一个 10/25 20:44
2F:推 nfsong:推 03/11 20:28