關(guān)于使用AVR的JTAG
ATmega128單片機(jī)具有一個(gè)符合IEEE 1149.1標(biāo)準(zhǔn)的JTAG接口。JTAG接口實(shí)現(xiàn)了三個(gè)功能:采用邊界掃描功能對(duì)芯片進(jìn)行檢測(cè),對(duì)芯片內(nèi)部的非易失性存儲(chǔ)器(Flash和E2PROM)、熔絲和鎖定位進(jìn)行編程,以及實(shí)現(xiàn)在線調(diào)試(On-chip debugging)仿真。
JTAG接口占用了4個(gè)AVR單片機(jī)的引腳,與組成了JTAG接口,即JTAG術(shù)語(yǔ)中的檢測(cè)訪問(wèn)端口(Test Access Port—TAP)。由于JTAG的4個(gè)端口(TDI/PF7、TDO/PF6、TMS/PF5和TCK/PF4)同PF口的高4位占用相同的引腳,因此當(dāng)JTAG接口處于使能狀態(tài)時(shí),PF[7:4]就不能作為通用I/O口或ADC的輸入口使用了。所以用戶應(yīng)該根據(jù)實(shí)際的需要,正確設(shè)計(jì)、配置和使用JTAG口。
作為一般的用戶,主要是將JTAG口用于程序下載和在線仿真調(diào)試,本小節(jié)就這兩種使用情況介紹對(duì)JTAG口的配置和使用的注意點(diǎn)。
1.JTAG口的控制
在ATmega128中,使用兩個(gè)熔絲位(JTAG使能JTAGEN,OCD使能OCDEN)和MCUCR寄存器中的JTD位對(duì)JTAG進(jìn)行控制。其中JTD位可以通過(guò)用戶程序改變,而熔絲位則不能通過(guò)程序指令設(shè)置。表5.1給出了3個(gè)控制位不同設(shè)置時(shí),JTAG接口的特性。
表5.1 JTAG口使能控制
JTAGEN OCDEN JTD LB2/LB1 PF[7:4]功能
1 x x x/x I/O,ADC
0 1 0 x/x JTAG(僅編程)
0 1 1 x/x I/O,ADC
0 0 0 1/1 JTAG(編程,在線調(diào)試)
0 0 1 x/x I/O,ADC
注:芯片出廠時(shí)JTAGEN=0,OCDEN=1
根據(jù)表5.1,用戶應(yīng)根據(jù)實(shí)際情況,先對(duì)相應(yīng)的熔絲位進(jìn)行正確的設(shè)置,然后在上電后的初始化程序中正確的改變JTD位的設(shè)置。
注意:JTD在RESET后初值為0,同時(shí)為了防止意外開(kāi)啟或關(guān)閉JTAG口,用戶程序?qū)TD的設(shè)置要按照規(guī)定的操作時(shí)序:必須在四個(gè)時(shí)鐘周期內(nèi)對(duì)JTD位重復(fù)2次寫(xiě)入,才能將JTD標(biāo)志位設(shè)置成所希望的值。
2.不使用在線調(diào)試功能
如果用戶不使用JTAG的在線調(diào)試功能,那么建議使用SPI串口編程下載程序,不使用JTAG口。其優(yōu)點(diǎn)是可以直接并可靠的使用PF[7:4]口的I/O功能,不必考慮JTD的設(shè)置。此時(shí)只要先將熔絲位JTAGEN配置為1,禁止JTAG功能即可。
如必須使用JTAG口編程下載程序,具體做法為:
a.設(shè)置JTAGEN為0,OCDEN為1,僅使能JTAG口的編程功能。
b.用戶程序應(yīng)在上電后立即將JTD位設(shè)置為1,禁止JTAG口,開(kāi)放PF[7:4]的I/O口功能。
這樣,芯片在隨后的運(yùn)行中仍可將PF[7:4]作為I/O使用。如果需要使用JTAG口編程下載程序代碼時(shí),將外部復(fù)位信號(hào)拉低2個(gè)時(shí)鐘周期,使芯片復(fù)位,以此把JTD清零,進(jìn)入JTAG編程方式。
3.使用在線調(diào)試功能
如果需要使用JTAG口的在線調(diào)試功能,那么在硬件設(shè)計(jì)時(shí)應(yīng)盡量考慮不使用PF[7:4]的I/O功能(損失4個(gè)引腳資源)。因?yàn)楫?dāng)JTAG口使能后,這4個(gè)引腳不能作為I/O使用,當(dāng)然也無(wú)法對(duì)其進(jìn)行在線的調(diào)試了。
如系統(tǒng)必須使用PF[7:4]的I/O功能,可采取以下處理方式:
a.將PF[7:4]僅用于簡(jiǎn)單的I/O使用,如驅(qū)動(dòng)LED指示、蜂鳴器等。電路設(shè)計(jì)還要注意與JTAG口的適當(dāng)?shù)母綦x,防止由于外接器件造成對(duì)JTAG接口信號(hào)的影響。
b.設(shè)置JTAGEN為0,OCDEN為0,使能JTAG口的全部功能。
c.用戶程序中不改變JTD位的初始值0。使能JTAG口功能。
e.使用JTAG口編程和進(jìn)行除PF[7:4]之外的在線調(diào)試。
f.調(diào)試完成后,稍微修改用戶程序,在上電后立即將JTD位設(shè)置為1,禁止JTAG口,開(kāi)放PF[7:4]的I/O口功能。
g.復(fù)位芯片,使用JTAG下載修改后的程序,觀察程序的實(shí)際運(yùn)行情況。
總之,一旦使用了JTAG口,就和PF[7:4]的I/O功能產(chǎn)生沖突和矛盾。因此,在硬件設(shè)計(jì)時(shí)應(yīng)盡量考慮不使用PF[7:4]的I/O功能(損失4個(gè)引腳資源)。
(以上摘自《M128》一書(shū))
在我的實(shí)驗(yàn)室里,有多臺(tái)AVR的JTEG的仿真器,從老的到新的,都是原裝的。但我在教學(xué)中和設(shè)計(jì)調(diào)試產(chǎn)品過(guò)程中,從來(lái)沒(méi)使用過(guò)。我感覺(jué)到,在現(xiàn)在的技術(shù)層面上,在線仿真的技術(shù)完全可以用其他的方式代替,而且更加方便。
我不使用在線仿真技術(shù)建立以下的基礎(chǔ)上:對(duì)AVR的初始化過(guò)程參考ICC或CVAVR的程序生成器生成的程序編寫(xiě);盡量使用高級(jí)語(yǔ)言編寫(xiě)系統(tǒng)程序;使用AVR的軟件模擬環(huán)境調(diào)試;使用串口或LED輸出或查看程序運(yùn)行(反正是ISP,多寫(xiě)幾次,我至今沒(méi)寫(xiě)失效過(guò)芯片)。當(dāng)然,這要求你的軟件工夫要好。
關(guān)于程序調(diào)試,是經(jīng)驗(yàn)的積累,也看個(gè)人的習(xí)慣。我個(gè)人認(rèn)為,一定要使用在線仿真是學(xué)51留下的“惡習(xí)”。實(shí)際上,對(duì)于外部硬件的錯(cuò)誤,對(duì)時(shí)序要求嚴(yán)格,以及通信協(xié)議的處理等,在線仿真也解決不了問(wèn)題的。
評(píng)論