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

一個含有JTAG Debug接口模塊的CPU,只要時鐘正常,就可以通過JTAG接口訪問CPU的內(nèi)部寄存器和掛在CPU總線上的設(shè)備,如FLASH,RAM,SOC(比如4510B,44Box,AT91M系列)內(nèi)置模塊的寄存器,象UART,TImers,GPIO等等的寄存器。
上面說的只是JTAG接口所具備的能力,要使用這些功能,還需要軟件的配合,具體實現(xiàn)的功能則由具體的軟件決定。
例如下載程序到RAM功能。了解SOC的都知道,要使用外接的RAM,需要參照SOC DataSheet的寄存器說明,設(shè)置RAM的基地址,總線寬度,訪問速度等等。有的SOC則還需要Remap,才能正常工作。運行Firmware時,這些設(shè)置由Firmware的初始化程序完成。但如果使用JTAG接口,相關(guān)的寄存器可能還處在上電值,甚至?xí)r錯誤值,RAM不能正常工作,所以下載必然要失敗。要正常使用,先要想辦法設(shè)置RAM。在ADW中,可以在Console窗口通過Let 命令設(shè)置,在AXD中可以在Console窗口通過Set命令設(shè)置。
下面是一個設(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
為了方便使用,可以將上述命令保存為一個文件config.ini, 在Console窗口輸入 ob config.ini 即可執(zhí)行。
使用其他debug,大體類似,只是命令和命令的格式不同。
設(shè)置RAM時,設(shè)置的寄存器以及寄存器的值必須和要運行程序的設(shè)置一致。一般編譯生成的目標(biāo)文件是ELF格式,或類似的格式,包含有目標(biāo)碼運行地址,運行地址在Link時候確定。Debug下載程序時根據(jù)ELF文件中的地址信息下載程序到指定的地址。如果在把RAM的基地址設(shè)置為0x10000000, 而在編譯的時候指定Firmware的開始地址在0x02000000, 下載的時候,目標(biāo)碼將被下載到0x02000000,顯然下載會失敗。
通過JTAG下載程序前應(yīng)關(guān)閉所有中斷,這一點和Firmware初始化時關(guān)閉中斷的原因相同。在使用JTAG接口的時候,各中斷的使能未知,尤其是FLASH里有可執(zhí)行碼的情況,可能會有一些中斷被使能。使用JTAG下載完代碼,要執(zhí)行時,有可能因為未完成初始化就產(chǎn)生了中斷,導(dǎo)致程序異常。所以,需要先關(guān)閉中斷,一般通過設(shè)置SOC的中斷控制寄存器完成。
使用JTAG寫Flash。在理論上,通過JTAG可以訪問CPU總線上的所有設(shè)備,所以應(yīng)該可以寫FLASH,但是FLASH寫入方式和RAM大不相同,需要特殊的命令,而且不同的FLASH擦除,編程命令不同,而且塊的大小,數(shù)量也不同,很難提供這一項功能。所以一般Debug不提供寫Flash功能,或者僅支持少量幾種Flash。
目前就我知道的,針對arm,只有FlashPGM這個軟件提供寫FLASH功能,但使用也非常麻煩。AXD,ADW都不提供寫FLASH功能。我寫Flash的方法時是,自己寫一個簡單的程序,專門用于寫目標(biāo)板的FLASH,利用JTAG接口,下載到目標(biāo)板,再把要燒寫的目標(biāo)碼裝成BIN格式,也下到目標(biāo)板(地址和燒FLASH的程序的地址不同),然后運行已經(jīng)下載的燒FLASH的程序。使用這種方式,比起FlashPGM的寫Flash,速度似乎要快一些。
關(guān)于簡單JTAG電纜
目前有各種各樣簡單JTAG電纜,其實只是一個電平轉(zhuǎn)換電路,同時還起到保護(hù)作用。JTAG的邏輯則由運行在PC上的軟件實現(xiàn),所以在理論上,任何一個簡單JTAG電纜,都可以支持各種應(yīng)用軟件,如Debug等。我就曾使用同一個JTAG電纜寫Xilinx CPLD,AXD/ADW調(diào)試程序。關(guān)鍵再于軟件的支持,大多數(shù)軟件都不提供設(shè)定功能,因而只能支持某種JTAG電纜。
關(guān)于簡單JTAG電纜的速度
JTAG是串行接口,使用打印口的簡單JTAG電纜,利用的是打印口的輸出帶鎖存的特點,使用軟件通過I/O產(chǎn)生JTAG時序。由JTAG標(biāo)準(zhǔn)決定,通過JTAG寫/讀一個字節(jié)要一系列的操作,根據(jù)我的分析,使用簡單JTAG電纜,利用打印口,通過JTAG輸出一個字節(jié)到目標(biāo)板,平均需要43個打印口I/O, 在我機(jī)器上(P4 1.7G),每秒大約可進(jìn)行660K次 I/O 操作,所以下載速度大約在660K/43, 約等于15K Byte/S. 對于其他機(jī)器,I/O速度大致相同,一般在600K ~ 800K.
關(guān)于如何提高JTAG下載速度
很明顯,使用簡單JTAG電纜無法提高速度。要提高速度,大致有兩種辦法,
1.使用嵌入式系統(tǒng)提供JTAG接口,嵌入式系統(tǒng)和微機(jī)之間通過USB/Ethernet相連,這要求使用MCU。
2.使用CPLD/FPGA提供JTAG接口,CPLD/FPGA和微機(jī)之間使用EPP接口(一般微機(jī)打印口都支持EPP模式),EPP接口完成微機(jī)和CPLD/FPGA之間的數(shù)據(jù)傳輸,CPLD/FPGA完成JTAG時序。
這兩種方法本人都實現(xiàn)過。第一個方法可以達(dá)到比較高的速度,實測超過了200KByte/S(注意:是Byte,不是Bit);但是相對來說,硬件復(fù)雜,制造相對復(fù)雜。第二種相對來說,下載速度要慢一些,最快時達(dá)到96KByte/S,但電路簡單,制造方便,而且速度可以滿足需要。第二種方案還有一個缺點,由于進(jìn)行I/O操作時,CPU不會被釋放,因此在下載程序時,微機(jī)CPU顯得很繁忙。
總的來說,本人認(rèn)為,對于個人愛好者來說,第二種方法更可取。
特別推薦
- 即插即用的6TOPS算力:慧為智能RK3588 SMARC核心板正式商用
- 精度與速度兼得:徴格半導(dǎo)體雙通道運放,挑戰(zhàn)精密放大性能極限
- 創(chuàng)新汽車區(qū)控架構(gòu)配電解決方案
- CITE 2026—擘畫產(chǎn)業(yè)新圖景,鏈接全球新機(jī)遇
- 破1734億美元!韓國半導(dǎo)體出口狂飆22%,成全球經(jīng)濟(jì)低迷中的“逆增長極”
技術(shù)文章更多>>
- 算力賦能,打造生命科學(xué)云上新范式
- 連接器廠家怎么選?2026年最新基于行業(yè)報告與客戶反饋的終極選型攻略
- 2026年靠譜繼電器供應(yīng)商嚴(yán)選推薦:這十家企業(yè)的長期口碑與技術(shù)實力經(jīng)得起考驗。
- 從CES 2026看趨勢:Arm串聯(lián)全棧生態(tài),開啟物理AI新紀(jì)元
- 面向工業(yè)4.0的自動化與智能系統(tǒng),貿(mào)澤電子攜手ST發(fā)布了全新電子書
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
電流傳感器
電流互感器
電路保護(hù)
電路圖
電路圖符號
電路圖知識
電腦OA
電腦電源
電腦自動斷電
電能表接線
電容觸控屏
電容器
電容器單位
電容器公式
電聲器件
電位器
電位器接法
電壓表
電壓傳感器
電壓互感器
電源變壓器
電源風(fēng)扇
電源管理
電源管理IC
電源連接器
電源濾波器
電源模塊
電源模塊
電源適配器
電子書




