在到后來,“集成電路級”向“集成系統(tǒng)級”發(fā)展,現(xiàn)在的芯片大多是SoC,原有的測試手段就更用不上了。這些芯片設(shè)計(jì)者都是重點(diǎn)考慮的問題。專業(yè)上成為
DFT(design-for-test,可測試性設(shè)計(jì)),也就是在設(shè)計(jì)一款SoC,必須要考慮它的可測試性能。另外,為什么要在對資源要求比較苛刻的情
況下,把調(diào)試電路集成到SoC中,看似矛盾,實(shí)際上,SoC集成調(diào)試電路已經(jīng)成了普遍的共識(shí):只有這樣,才能減少調(diào)試成本,方便開發(fā)者進(jìn)行調(diào)試,從而吸引
開發(fā)者選擇使用SoC。如果沒有良好的調(diào)試手段,我想很少有開發(fā)者會(huì)選擇使用的。好了,現(xiàn)在介紹調(diào)試檢測技術(shù),F(xiàn)在比較成熟的技術(shù)有如下四種:
·Ad-hoc test
·Scan-based test
·Build-in-self test
·Boundary-scan test
因?yàn)椴皇菍I(yè)研究這個(gè)方向,對這四個(gè)測試技術(shù)的區(qū)別也沒大有必要深究,F(xiàn)在重點(diǎn)來看第四種技術(shù),Bounary-scan
test,即邊界掃描技術(shù)。ARM普遍采用了邊界掃描技術(shù),協(xié)議標(biāo)準(zhǔn)為IEEE
1149.1,簡介原來的文章也談到過了,就不必多說了。關(guān)于JTAG,它的作用主要有如下兩個(gè)方面:
·軟件(以及硬件)的調(diào)試。更重要的是,目標(biāo)系統(tǒng)的調(diào)試也要在宿主機(jī)的控制/輔助下進(jìn)行,而JTAG接口為宿主機(jī)與目標(biāo)系統(tǒng)之間的通信、控制提供了重要的
手段!镜切枰⒁獾氖,這并不是絕對的。通信手段倒是還可以借助于網(wǎng)絡(luò)實(shí)現(xiàn),調(diào)試也可以通過gdb遠(yuǎn)程串口調(diào)試。這里的意思是,它是當(dāng)前采用的調(diào)試的
一種重要的手段!
現(xiàn)在可以分析基于JTAG技術(shù)的ARM Debug Architecture。下面給出一個(gè)結(jié)構(gòu)圖:
·Debug Host
· Protocol converter
· Debug Target
也就是ARM Debug Architecture分為三層,這也可以認(rèn)為是一個(gè)完整的調(diào)試系統(tǒng)。當(dāng)然這是理論上的劃分,在實(shí)際實(shí)現(xiàn)中也可以在形式上有所變通。下面先解釋一下這三層結(jié)構(gòu)。
·Debug Host
Host computer running ARM or third party toolkit.
這是調(diào)試系統(tǒng)的Host前端。也就是我們常見到的IDE的debugger,比如ARM提供的ADW(ARM Debugger
for Windows,相應(yīng)的unix版本為ADU,即ARM Debugger for
Unix)。它所提供的功能是提供一個(gè)良好的圖形交互界面,使用戶可以方便的進(jìn)行調(diào)試操作,也可以完成下載等。另外,它實(shí)際上完成調(diào)試命令的驅(qū)動(dòng)部分。
ARM制定了一個(gè)協(xié)議,就是ADP(Angel Debug
Protocol),這是一個(gè)比較復(fù)雜的協(xié)議,分為三層,主要就是保證可靠穩(wěn)定的與目標(biāo)機(jī)進(jìn)行通信。
· Protocol converter
for example, multi-ICE。
這部分完成host端協(xié)議到j(luò)tag協(xié)議的轉(zhuǎn)換。轉(zhuǎn)換過程是雙向的。這個(gè)在這里也不太容易說,可以通過后面仿真器來進(jìn)行分析。
·debug target
development system containing an ARM7TDMI processor
也就是你的目標(biāo)SoC。
有了這個(gè)模型作為基礎(chǔ),就可以對現(xiàn)有的調(diào)試工具進(jìn)行一個(gè)大體的分析了。在這里,仿真器又可以稱為調(diào)試代理,它充當(dāng)了protocol converter的角色。
·第一層次 簡易JTAG小板
市場上有不少提供簡易JTAG小板,大多只是具備下載功能。其中,debug
host可以是jflash-s3c2410這樣的工具,它實(shí)際上就是用軟件實(shí)現(xiàn)JTAG時(shí)序,完成“串并”和“并串”轉(zhuǎn)換。即把目標(biāo)JTAG向量中的每
個(gè)字節(jié)都逐位地轉(zhuǎn)換成JTAG接口各條引線上的串行的波形,或者反過來。而jtag小板,只是完成一個(gè)基本的電平轉(zhuǎn)換電路,最差的只有幾個(gè)電路,普通的就
是一個(gè)74HC244做驅(qū)動(dòng)。簡單的說,就是:host(jflash-s3c2410等)--> 并口 --> jtag小板
--> SoC
JTAG接口。這樣完成了下載功能。如果在host端軟件增強(qiáng),可以完成一些調(diào)試功能。相對而言,這樣技術(shù)是用純軟件去實(shí)現(xiàn)JTAG時(shí)序,效率比較低。市
場上的wiggle、H-jtag、2410jtag等都是如此,只是在對應(yīng)的引腳設(shè)置和host軟件上有所不同。
·第二層次 cpld/fpga實(shí)現(xiàn)jtag狀態(tài)機(jī)
用軟件模擬jtag時(shí)序效率低,那么可以通過cpld等可編程器件實(shí)現(xiàn)jtag時(shí)序,那么host的軟件只要簡單的寫字節(jié)就可以了。這樣,效率就高的多了。
·第三層次 mcu+cpld/fpga實(shí)現(xiàn)基于以太網(wǎng)/USB的仿真器
其中,mcu用來實(shí)現(xiàn)tcp/ip協(xié)議,完成host調(diào)試協(xié)議的解析,cpld/fpga實(shí)現(xiàn)jtag狀態(tài)機(jī)。這種組合方式的效率又遠(yuǎn)遠(yuǎn)高于第二層次。現(xiàn)在的realview就是采用這種方案,原有的ads系列則不提供更新了。
我把使用的powerICE拆開看了一下,發(fā)現(xiàn)里面核心芯片就是cpld。由此可見,這個(gè)簡化版的仿真器也只是第二層次的產(chǎn)品,硬件實(shí)現(xiàn)jtag時(shí)
序,host IDE進(jìn)行調(diào)試協(xié)議處理。原來的jflash-s3c2410不能夠使用就很明顯了,不同層次,也不會(huì)兼容。
如果要深入研究,可以參考:
·IEEE 1149.1協(xié)議
·《嵌入式系統(tǒng)--采用公開源代碼和StrongARM/XScale處理器》
·OpenJTAG論壇
·ARM7TDMI Datasheet
---------------------------------------
幾個(gè)名詞:
spp: standard parallel protocol 標(biāo)準(zhǔn)并口協(xié)議
epp: enhanced parallel protocol 增強(qiáng)并口協(xié)議
dft: design for test 可測試性設(shè)計(jì)
tap: test access port 測試訪問口
tdi: test data input 測試數(shù)據(jù)輸入
tdo: test data output 測試數(shù)據(jù)輸出
tms: test mode select 測試模式選擇
tck: test clock 測試時(shí)鐘
trst: test reset 測試復(fù)位
wdm: win32 driver model win32驅(qū)動(dòng)模型
isp: in system programming 在系統(tǒng)編程
isc: in system config 在系統(tǒng)配置
adp: angel debug protocol 調(diào)試代理協(xié)議
rsp: remote serial protocol gdb的遠(yuǎn)程串行協(xié)議
rdi: remote debug interface ARM的遠(yuǎn)程調(diào)試接口