[閒聊] J-Link
作者 lihgong (好想退休喔 QQ) 看板 lihgong
標題 JTAG 原理
時間 Fri Sep 25 00:18:38 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 的輸入, 看到了嗎, 我們可以自行決定輸入 yo
反過來講, 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 的根本原理, 其實很有意思的 :)
標題 JTAG 原理
時間 Fri Sep 25 00:18:38 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 的輸入, 看到了嗎, 我們可以自行決定輸入 yo
反過來講, 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 的根本原理, 其實很有意思的 :)
留言