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