作者:楊碩,華清遠見嵌入式學院講師。
在嵌入式系統的設計中,模擬應用的範圍主要集中在對程式的模擬上。在ARM的開發過程中,一種最簡單和原始的開發流程是:編寫程式,然後燒寫到晶片上驗證功能,這種方法對於簡單的小系統是可以對付的,但在大系統中使用這種方法則是完全不可能的。所以很多時候我們需要在不燒寫代碼的情況下偵錯工具,這就是模擬調試技術。
現代調試技術可以分為軟體模擬調試和硬體模擬調試兩種:
一.軟體模擬(指令集模擬):
概念:
用資料結構描述目標機CPU中各個寄存器和其他資源(記憶體等),通過軟體類比,可以逐條指令解釋執行目標機可執行映象中的程式。
應用場合:
● 當嵌入式軟體開發在目標硬體平台不存在的情況下進行,就要使用這種軟體來類比目標CPU,以驗證代碼邏輯。
● 是學習嵌入式開發有效地工具,可以讓學習者從底層具體硬體細節中解脫出來,專註於軟體,尤其是與具體硬體無關的系統軟體(TCP/IP協議棧)。
幾個不錯的硬體類比平台:
● Skyeye:清華大學電腦系博士後陳渝發起,開源項目,主要類比ARM核心CPU。
● ARMulator:ARM公司推出,ARM指令集模擬器(ADS,Realview MDK上就用這個)。
● ZIX:一個快捷高效、功能強大、易於配置的嵌入式Linux開發環境。
軟體模擬的缺點:
無法完全模擬與硬體相關的部分,最終還要通過硬體模擬來完成最終的設計。
二.硬體模擬調試:
以前的晶片沒有JTAG調試邏輯,要向模擬它就必須要有專門的模擬器,這種模擬器成本較高,而且每種晶片都不一樣,現在這種模擬器已經不存在了。
現在的晶片一般都內建了JTAG調試邏輯,並不需要CPU模擬器,需要的只是一個JTAG協議轉接器(現在還稱其為模擬器,其實叫做調試器比較合適)。所以下面主要介紹JTAG及其模擬技術。
JTAG簡介
JTAG是Joint Test Action Group的簡稱,該組織致力於統一晶片的測試標準,它們最初向IEEE提出了IEEE1149.1標準,後來經過IEEE批准並且標準化,所以IEEE1149.1標準又叫JTAG標準,它是一套晶片測試介面和標準,現在幾乎所有的CPU核裡面都會實現JTAG邏輯單元。JTAG原本是用來測試晶片設計是否正確,其基本原理就是在晶片的各個管腳上放置鎖存器,然後串聯起來構成移位寄存器,可以監控晶片管腳的輸入和輸出。後來大家發現用JTAG線上調試晶片非常方便(其實就是利用JTAG控制CPU核心),還不需要設計專門的模擬晶片,因此就出現了用JTAG調試風行的局面。
邊界掃描技術(Boundary-Scan):
JTAG調試主要就是基於這種邊界掃描技術。
邊界掃描技術的基本思想是在靠近晶片的輸入輸出管腳上增加一個移位寄存器單元。因為這些移位寄存器單元都分布在晶片的邊界上,所以被稱為邊界掃描寄存器 (Boundary-Scan Register Cell) 。當晶片處於調試狀態的時候,這些邊界掃描寄存器可以將晶片和外圍的輸入輸出隔離開來。通過這些邊界掃描寄存器單元,可以實現對晶片輸入輸出訊號的觀察和控制。
JTAG的主要作用:
● 檢測晶片是否良好
■這是JTAG最初設計的目標
● 鏡像檔案的燒寫功能
■可以燒寫編譯出來的二進位或者十六進位可執行檔到目標板的Flahs晶片上
■當開發板為裸板(沒有固化任何程式)的時候,通常需要通過JTAG介面下載bootloader
■調試功能
■JTAG介面為宿主機和目標系統之間的通訊、控制提供了方便的途徑
ARM7TDMI調試架構:
一個調試系統通常包含三個部分:
● 調試主機
■是一台運行調試軟體(ADS,Keil等)的電腦
■可以發出一些高層的調試命令,設定斷點,訪問記憶體等
● 協議轉換器
■將調試主機發出的高層調試命令轉換為底層的ARM JTAG調試命令
■偵錯目標
■基於目標晶片的開發板
ARM7TDMI典型的調試架構如所示:
經過協議轉換器進行命令解釋,主機上啟動並執行調試軟體就可以通過JTAG介面直接和目標晶片對話了。
為了支援底層的調試,ARM7TDMI提供了硬體上的調試擴充,包括:
● 停止程式的運行
● 檢查和修改ARM7TDMI的核心狀態
● 觀察和修改記憶體
● 恢複程式的運行
常見ARM調試工具:
● BDI1000/2000/3000
■非常好的調試工具,可以調試ARM、MIPS、PowerPC、Xscale等多種架構處理器
■JTAG下載速度可以上兆,乙太網路介面
■效能優越但是價格不菲,可以調試Linux核心這種複雜的代碼
● U-Link
■U-Link是Keil公司做的用於ARM和某些增強型8051單片機調試的工具
■由於Keil公司做的時候沒有加密,導致現在盜版滿天飛
■U-link僅僅支援Keil,JTAG下載速度20K~30K
U-Link下載程式不是簡單通過JTAG,而是先用JTAG下載一段韌體程式到目標板,然後再用這個韌體程式和JTAG把使用者代碼寫入Flash以提高速度
● J-Link
■J-Link是IAR公司為ARM晶片開發的調試工具
■支援RDI協議的調試工具,如Keil、ADS、IAR等
■J-Link不支援ARM10以上的核心
■JTAG下載速度400K~500K
● Multi-ICE
■ARM公司原創調試工具,支援全系列ARM晶片
■JTAG下載速度130K左右
● Wiggler電纜
■Wiggler是世界上最泛濫的一種調試工具
■結構非常簡單:一片74HC244 + 一個9013 + 幾個電阻
■效能一般,但是價格非常便宜
■後人又在Wiggler的硬體基礎上開發了很多的調試工具,例如大名鼎鼎的H-Jtag