
你的位置:首頁(yè) > 測(cè)試測(cè)量 > 正文
你的設(shè)計(jì)為何出問(wèn)題?也許是嵌入式JTAG接口惹的禍
發(fā)布時(shí)間:2017-02-14 責(zé)任編輯:susan
【導(dǎo)讀】通常所說(shuō)的JTAG大致分兩類(lèi),一類(lèi)用于測(cè)試芯片的電氣特性,檢測(cè)芯片是否有問(wèn)題;一類(lèi)用于Debug;一般支持JTAG的CPU內(nèi)都包含了這兩個(gè)模塊。

一個(gè)含有JTAG Debug接口模塊的CPU,只要時(shí)鐘正常,就可以通過(guò)JTAG接口訪問(wèn)CPU的內(nèi)部寄存器和掛在CPU總線上的設(shè)備,如FLASH,RAM,SOC(比如4510B,44Box,AT91M系列)內(nèi)置模塊的寄存器,象UART,TImers,GPIO等等的寄存器。
上面說(shuō)的只是JTAG接口所具備的能力,要使用這些功能,還需要軟件的配合,具體實(shí)現(xiàn)的功能則由具體的軟件決定。
例如下載程序到RAM功能。了解SOC的都知道,要使用外接的RAM,需要參照SOC DataSheet的寄存器說(shuō)明,設(shè)置RAM的基地址,總線寬度,訪問(wèn)速度等等。有的SOC則還需要Remap,才能正常工作。運(yùn)行Firmware時(shí),這些設(shè)置由Firmware的初始化程序完成。但如果使用JTAG接口,相關(guān)的寄存器可能還處在上電值,甚至?xí)r錯(cuò)誤值,RAM不能正常工作,所以下載必然要失敗。要正常使用,先要想辦法設(shè)置RAM。在ADW中,可以在Console窗口通過(guò)Let 命令設(shè)置,在AXD中可以在Console窗口通過(guò)Set命令設(shè)置。
下面是一個(gè)設(shè)置AT91M40800的命令序列,關(guān)閉中斷,設(shè)置CS0-CS3, 并進(jìn)行Remap,適用于AXD(ADS帶的Debug)
setmem 0xfffff124,0xFFFFFFFF,32 ---關(guān)閉所有中斷
setmem 0xffe00000,0x0100253d,32 ---設(shè)置CS0
setmem 0xffe00004,0x02002021,32 ---設(shè)置CS1
setmem 0xffe00008,0x0300253d,32 ---設(shè)置CS2
setmem 0xffe0000C,0x0400253d,32 ---設(shè)置CS3
setmem 0xffe00020,1,32 ---Remap
如果要在ADW(SDT帶的DEBUG)中使用,則要改為:
let 0xfffff124=0xFFFFFFFF ---關(guān)閉所有中斷
let 0xffe00000=0x0100253d ---設(shè)置CS0
let 0xffe00004=0x02002021 ---設(shè)置CS1
let 0xffe00008=0x0300253d ---設(shè)置CS2
let 0xffe0000C=0x0400253d ---設(shè)置CS3
let 0xffe00020=1 ---Remap
為了方便使用,可以將上述命令保存為一個(gè)文件config.ini, 在Console窗口輸入 ob config.ini 即可執(zhí)行。
使用其他debug,大體類(lèi)似,只是命令和命令的格式不同。
設(shè)置RAM時(shí),設(shè)置的寄存器以及寄存器的值必須和要運(yùn)行程序的設(shè)置一致。一般編譯生成的目標(biāo)文件是ELF格式,或類(lèi)似的格式,包含有目標(biāo)碼運(yùn)行地址,運(yùn)行地址在Link時(shí)候確定。Debug下載程序時(shí)根據(jù)ELF文件中的地址信息下載程序到指定的地址。如果在把RAM的基地址設(shè)置為0x10000000, 而在編譯的時(shí)候指定Firmware的開(kāi)始地址在0x02000000, 下載的時(shí)候,目標(biāo)碼將被下載到0x02000000,顯然下載會(huì)失敗。
通過(guò)JTAG下載程序前應(yīng)關(guān)閉所有中斷,這一點(diǎn)和Firmware初始化時(shí)關(guān)閉中斷的原因相同。在使用JTAG接口的時(shí)候,各中斷的使能未知,尤其是FLASH里有可執(zhí)行碼的情況,可能會(huì)有一些中斷被使能。使用JTAG下載完代碼,要執(zhí)行時(shí),有可能因?yàn)槲赐瓿沙跏蓟彤a(chǎn)生了中斷,導(dǎo)致程序異常。所以,需要先關(guān)閉中斷,一般通過(guò)設(shè)置SOC的中斷控制寄存器完成。
使用JTAG寫(xiě)Flash。在理論上,通過(guò)JTAG可以訪問(wèn)CPU總線上的所有設(shè)備,所以應(yīng)該可以寫(xiě)FLASH,但是FLASH寫(xiě)入方式和RAM大不相同,需要特殊的命令,而且不同的FLASH擦除,編程命令不同,而且塊的大小,數(shù)量也不同,很難提供這一項(xiàng)功能。所以一般Debug不提供寫(xiě)Flash功能,或者僅支持少量幾種Flash。
目前就我知道的,針對(duì)arm,只有FlashPGM這個(gè)軟件提供寫(xiě)FLASH功能,但使用也非常麻煩。AXD,ADW都不提供寫(xiě)FLASH功能。我寫(xiě)Flash的方法時(shí)是,自己寫(xiě)一個(gè)簡(jiǎn)單的程序,專(zhuān)門(mén)用于寫(xiě)目標(biāo)板的FLASH,利用JTAG接口,下載到目標(biāo)板,再把要燒寫(xiě)的目標(biāo)碼裝成BIN格式,也下到目標(biāo)板(地址和燒FLASH的程序的地址不同),然后運(yùn)行已經(jīng)下載的燒FLASH的程序。使用這種方式,比起FlashPGM的寫(xiě)Flash,速度似乎要快一些。
關(guān)于簡(jiǎn)單JTAG電纜
目前有各種各樣簡(jiǎn)單JTAG電纜,其實(shí)只是一個(gè)電平轉(zhuǎn)換電路,同時(shí)還起到保護(hù)作用。JTAG的邏輯則由運(yùn)行在PC上的軟件實(shí)現(xiàn),所以在理論上,任何一個(gè)簡(jiǎn)單JTAG電纜,都可以支持各種應(yīng)用軟件,如Debug等。我就曾使用同一個(gè)JTAG電纜寫(xiě)Xilinx CPLD,AXD/ADW調(diào)試程序。關(guān)鍵再于軟件的支持,大多數(shù)軟件都不提供設(shè)定功能,因而只能支持某種JTAG電纜。
關(guān)于簡(jiǎn)單JTAG電纜的速度
JTAG是串行接口,使用打印口的簡(jiǎn)單JTAG電纜,利用的是打印口的輸出帶鎖存的特點(diǎn),使用軟件通過(guò)I/O產(chǎn)生JTAG時(shí)序。由JTAG標(biāo)準(zhǔn)決定,通過(guò)JTAG寫(xiě)/讀一個(gè)字節(jié)要一系列的操作,根據(jù)我的分析,使用簡(jiǎn)單JTAG電纜,利用打印口,通過(guò)JTAG輸出一個(gè)字節(jié)到目標(biāo)板,平均需要43個(gè)打印口I/O, 在我機(jī)器上(P4 1.7G),每秒大約可進(jìn)行660K次 I/O 操作,所以下載速度大約在660K/43, 約等于15K Byte/S. 對(duì)于其他機(jī)器,I/O速度大致相同,一般在600K ~ 800K.
關(guān)于如何提高JTAG下載速度
很明顯,使用簡(jiǎn)單JTAG電纜無(wú)法提高速度。要提高速度,大致有兩種辦法,
1.使用嵌入式系統(tǒng)提供JTAG接口,嵌入式系統(tǒng)和微機(jī)之間通過(guò)USB/Ethernet相連,這要求使用MCU。
2.使用CPLD/FPGA提供JTAG接口,CPLD/FPGA和微機(jī)之間使用EPP接口(一般微機(jī)打印口都支持EPP模式),EPP接口完成微機(jī)和CPLD/FPGA之間的數(shù)據(jù)傳輸,CPLD/FPGA完成JTAG時(shí)序。
這兩種方法本人都實(shí)現(xiàn)過(guò)。第一個(gè)方法可以達(dá)到比較高的速度,實(shí)測(cè)超過(guò)了200KByte/S(注意:是Byte,不是Bit);但是相對(duì)來(lái)說(shuō),硬件復(fù)雜,制造相對(duì)復(fù)雜。第二種相對(duì)來(lái)說(shuō),下載速度要慢一些,最快時(shí)達(dá)到96KByte/S,但電路簡(jiǎn)單,制造方便,而且速度可以滿(mǎn)足需要。第二種方案還有一個(gè)缺點(diǎn),由于進(jìn)行I/O操作時(shí),CPU不會(huì)被釋放,因此在下載程序時(shí),微機(jī)CPU顯得很繁忙。
總的來(lái)說(shuō),本人認(rèn)為,對(duì)于個(gè)人愛(ài)好者來(lái)說(shuō),第二種方法更可取。
特別推薦
- 高功率密度的電源模塊設(shè)計(jì)要點(diǎn)及方案推薦
- 基于國(guó)產(chǎn)高性能SoC開(kāi)發(fā)的多軸機(jī)器人控制系統(tǒng)方案
- 硅基功率開(kāi)關(guān)已經(jīng)轉(zhuǎn)向GaN開(kāi)關(guān)了嗎?
- CITE2025智慧家庭展區(qū):萬(wàn)億賽道“引爆點(diǎn)”
- PN連接二極管的設(shè)計(jì)
- 如何在低功耗MCU上實(shí)現(xiàn)人工智能和機(jī)器學(xué)習(xí)
- 華為海思NB-IOT技術(shù)方案在智能電網(wǎng)監(jiān)測(cè)與穿戴式設(shè)備中的應(yīng)用
技術(shù)文章更多>>
- 全民智駕熱潮下,ADAS系統(tǒng)對(duì)電源芯片的四大需求
- 華為海思NB-IOT技術(shù)方案在智能電網(wǎng)監(jiān)測(cè)與穿戴式設(shè)備中的應(yīng)用
- 輸送鋼帶怎么選?瑞典百年品牌IPCO傳動(dòng)系統(tǒng)高效耐用方案,助你輕松應(yīng)對(duì)工業(yè)挑戰(zhàn)!
- 如何在低功耗MCU上實(shí)現(xiàn)人工智能和機(jī)器學(xué)習(xí)
- PN連接二極管的設(shè)計(jì)
技術(shù)白皮書(shū)下載更多>>
- 車(chē)規(guī)與基于V2X的車(chē)輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車(chē)安全隔離的新挑戰(zhàn)
- 汽車(chē)模塊拋負(fù)載的解決方案
- 車(chē)用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門(mén)搜索
電壓互感器
電源變壓器
電源風(fēng)扇
電源管理
電源管理IC
電源連接器
電源濾波器
電源模塊
電源模塊
電源適配器
電子書(shū)
電阻測(cè)試儀
電阻觸控屏
電阻器
電阻作用
調(diào)速開(kāi)關(guān)
調(diào)諧器
鼎智
動(dòng)力電池
動(dòng)力控制
獨(dú)石電容
端子機(jī)
斷路器
斷路器型號(hào)
多層PCB
多諧振蕩器
扼流線圈
耳機(jī)
二極管
二極管符號(hào)