ARM CoreSight調(diào)試與追蹤體系在Cortex M3內(nèi)核中的實(shí)現(xiàn)
引言
在芯片制造技術(shù)飛速發(fā)展的今天,高速、高集成度、低功耗的極致追求給芯片設(shè)計(jì)人員提出了一個(gè)又一個(gè)挑戰(zhàn),而在這樣的片上系統(tǒng)中調(diào)試與追蹤內(nèi)核狀態(tài)更是芯片調(diào)試技術(shù)的一個(gè)難題。為了解決非侵入式、實(shí)時(shí)調(diào)試等多類問(wèn)題,ARM引入了全新的ARMCoreSight調(diào)試體系結(jié)構(gòu)。CoreSight是ARM公司于2003年開(kāi)發(fā)的、綜合而全面的調(diào)試與跟蹤架構(gòu)。部分ARM9與ARM11內(nèi)核采用早期版本的CoreSight,不過(guò)現(xiàn)在大范圍推廣的Cortex系列處理器已完全采用新版的調(diào)試體系并充分證明了它的優(yōu)勢(shì)。CoreSight包括眾多組件,每一種都能協(xié)助外部主機(jī)以極高的效率了解芯片的實(shí)時(shí)運(yùn)行情況。芯片中內(nèi)嵌的特定組件和為系統(tǒng)設(shè)計(jì)人員提供的調(diào)試工具使開(kāi)發(fā)人員可以友好的使用CoreSight構(gòu)架調(diào)試和跟蹤片上系統(tǒng),而不用再通過(guò)直接設(shè)置寄存器、遵循特定協(xié)議和處理電平信號(hào)來(lái)使用。
為了擴(kuò)大成本和功耗敏感的MCU和終端應(yīng)用(如智能測(cè)量、人機(jī)接口設(shè)備、汽車和工業(yè)控制系統(tǒng)、大型家用電器、消費(fèi)性產(chǎn)品和醫(yī)療器械)市場(chǎng),ARM公司針對(duì)這類混合信號(hào)設(shè)備進(jìn)行了優(yōu)化,貫徹了新一代的CoreSight調(diào)試構(gòu)架,推出了新一代CortexM系列微控制器。而意法半導(dǎo)體公司(ST)推出的STM32、德州儀器公司(TI)推出的Stellaris,都是一種ARMCortexM3內(nèi)核的實(shí)現(xiàn)。32位RISC處理器、低功耗、高性能模擬技術(shù)、高速DMA通道、豐富的外設(shè)和新一代的調(diào)試體系,都賦予了其不俗的表現(xiàn)。
然而,新一代調(diào)試構(gòu)架定義的多種功能對(duì)不熟悉新調(diào)試機(jī)制的開(kāi)發(fā)者來(lái)說(shuō)略嫌繁瑣,特別是傳統(tǒng)JTAG調(diào)試和新一代的SerialWireDebug(SWD)調(diào)試二合一的調(diào)試接口使不少開(kāi)發(fā)者無(wú)法理清頭緒。因此本文將從整體上分析ARMCoreSight調(diào)試構(gòu)架和ARMDebugInterfaceArchitecture(ADI),并通過(guò)對(duì)比ST和TI推出的芯片來(lái)明確新調(diào)試體系的實(shí)現(xiàn)方式,為開(kāi)發(fā)者掃清調(diào)試障礙。
1ARMCoreSight調(diào)試構(gòu)架
ARM新一代CoreSight調(diào)試構(gòu)架提供了微處理器所需全部的調(diào)試與追蹤功能。片上程序流可通過(guò)豐富的硬件執(zhí)行斷點(diǎn)與高級(jí)觀察點(diǎn)、矢量捕獲和元數(shù)據(jù)跟蹤功能進(jìn)行監(jiān)控,甚至在啟用全部中斷時(shí)也得到監(jiān)控。在處理器運(yùn)行的同時(shí)也能讀寫(xiě)寄存器與存儲(chǔ)器中的數(shù)據(jù),并能對(duì)片上資源的使用進(jìn)行驗(yàn)證。代碼描述可確定處理器在一定時(shí)間內(nèi)的工作情況,從而明確處理器何時(shí)會(huì)在無(wú)限循環(huán)中中止,或在何處全力加速程序執(zhí)行。此外,我們通過(guò)新的調(diào)試構(gòu)架還能看出哪些代碼從不執(zhí)行,從而釋放出寶貴的片上資源。程序員可確認(rèn)脈寬調(diào)制器是否能滿足要求,另外還可檢查堆棧是否存在潛在問(wèn)題,進(jìn)而確定意外情況的反饋以及狀態(tài)、條件碼和分支的有效性。
ARM新一代調(diào)試構(gòu)架提供了對(duì)多種調(diào)試方式的支持。經(jīng)典的JTAG調(diào)試方式經(jīng)過(guò)多年、大范圍的應(yīng)用,已經(jīng)具有了成熟、規(guī)范、通行等優(yōu)點(diǎn)。然而,現(xiàn)在的MCU對(duì)于速度和封裝的要求已經(jīng)越來(lái)越高,傳統(tǒng)的4線(5線可選)JTAG協(xié)議已經(jīng)不能滿足對(duì)芯片封裝尺寸的嚴(yán)格要求和對(duì)引腳需求的嚴(yán)格控制。在這種需求下,ARM在新一代調(diào)試體系中引入了旨在替代舊式JTAG調(diào)試方式的SerialWireDebug(SWD)調(diào)試方式,它很好地改良了ARM體系結(jié)構(gòu)下的產(chǎn)品調(diào)試機(jī)制。
ARMCoreSight構(gòu)架中的組件是通過(guò)存儲(chǔ)器映射機(jī)制訪問(wèn)它們自身的控制寄存器(例如AMBA3APB接口),而不通過(guò)傳統(tǒng)的JTAG訪問(wèn)其組件資源。ARM選擇這樣的實(shí)現(xiàn)方式有很多種原因,例如:傳統(tǒng)JTAG方式的時(shí)鐘信號(hào)TCK必須工作在所有調(diào)試組件共有的最低頻率,這極大限制了調(diào)試的速度(也許還將面對(duì)休眠態(tài)、工作在低頻率狀態(tài)的片上組件);傳統(tǒng)的同步JTAG接口在一個(gè)設(shè)備掉電時(shí)會(huì)導(dǎo)致整個(gè)調(diào)試鏈的終止等。
ARMCoreSightarchitecture包含三類子構(gòu)架:
Visiblecomponentarchitecture:規(guī)定了所有組件所必須遵守的、共有的編程者模型(軟件接口)。規(guī)定了對(duì)組件可用的拓?fù)涮皆L結(jié)構(gòu);
Reusablecomponentarchitecture:規(guī)定了調(diào)試體系的物理接口;
Systemarchitecture:規(guī)定了系統(tǒng)級(jí)需要的時(shí)鐘、控制信息、ROM表、追蹤信息格式等。
在ARMCoreSight構(gòu)架基礎(chǔ)上,ARM指定了具體的調(diào)據(jù)被鏈接調(diào)試資源類型的不同,ADI定義了兩類AP的實(shí)現(xiàn):MEM-AP和JTAG-AP。MEM-AP用來(lái)鏈接到存儲(chǔ)器映射(Memorymapped)類型的資源,而JTAG-AP主要用來(lái)鏈接到經(jīng)典的IEEE1149.1JTAG設(shè)備上。我們常用的是MEM-AP類型,通過(guò)對(duì)ARM存儲(chǔ)器映射機(jī)制下的系統(tǒng)資源的訪問(wèn),我們可以調(diào)試幾乎所有的片上資源。而當(dāng)我們使用IEEE1149.1JTAG調(diào)試設(shè)備做掃描邊界測(cè)試時(shí),我們需要用到JTAG-AP實(shí)現(xiàn)。
3基于CortexM3內(nèi)核調(diào)試的MCU實(shí)現(xiàn)
首先,我們先對(duì)比兩個(gè)具體的實(shí)現(xiàn)方案。其一是意法半導(dǎo)體公司的STM32MCU,而另一個(gè)則為德州儀器公司的Stellaris。
圖2所示為STM32的調(diào)試體系構(gòu)架。
試接口規(guī)范,旨在統(tǒng)一所有采用CoreSight調(diào)試體系的片上系統(tǒng)。
2ARM調(diào)試接口規(guī)范
采用ARM設(shè)計(jì)IP的芯片廠商在設(shè)計(jì)調(diào)試支持的時(shí)候,都必須要遵守ARMDebugInterfaceArchitectureSpecification(ARM調(diào)試接口體系結(jié)構(gòu)規(guī)范,ADI)。ARM調(diào)試接口規(guī)范為嵌入式片上系統(tǒng)
(SoC)中的調(diào)試組件定義了標(biāo)準(zhǔn)調(diào)試接口,其功能邏輯框圖如圖1所示。
ADI中定義了一"由DebugPort(DP)和AccessPort(AP)組成的調(diào)試訪問(wèn)接口DebugAccessPort(DAP),外部的調(diào)試設(shè)備統(tǒng)一由DAP來(lái)鏈接被調(diào)試的片上系統(tǒng)資源。
ADI中定義了一個(gè)單一的外部調(diào)試設(shè)備物理連接接口:DebugPort(DP)。ADI允許三種不同的DP實(shí)現(xiàn):JTAG-DP,SWD-DP,SWJ-DP。其中JTAG-DP即為經(jīng)典的JTAG調(diào)試機(jī)制物理接口,而SWD-DP則是ARM新引入的兩引腳串行線調(diào)試結(jié)構(gòu)。SWJ-DP則為JTAG/SWD二合一接口。
同時(shí),ADI還定義了訪問(wèn)接口:AccessPort(AP)。AP為DAP與被調(diào)試資源的鏈接提供了接口。AP通過(guò)資源特定的連接方式(例如一個(gè)debugbus)鏈接到被調(diào)試的資源,根據(jù)被鏈接調(diào)試資源類型的不同,ADI 定義了兩類 AP 的實(shí)現(xiàn) :MEM-AP 和 JTAG-AP。MEM-AP 用來(lái)鏈接到存儲(chǔ)器映射(Memory mapped)類型的資源,而 JTAG-AP 主要用來(lái)鏈接到經(jīng)典的 IEEE 1149.1 JTAG 設(shè)備上。我們常用的是 MEM-AP 類型,通過(guò)對(duì) ARM 存儲(chǔ)器映射機(jī)制下的系統(tǒng)資源的訪問(wèn),我們可以調(diào)試幾乎所有的片上資源。而當(dāng)我們使用 IEEE 1149.1JTAG 調(diào)試設(shè)備做掃描邊界測(cè)試時(shí),我們需要用到 JTAG-AP實(shí)現(xiàn)。
3 基于 Cortex M3 內(nèi)核調(diào)試的 MCU 實(shí)現(xiàn)
首先,我們先對(duì)比兩個(gè)具體的實(shí)現(xiàn)方案。其一是意法半導(dǎo)體公司的 STM32MCU,而另一個(gè)則為德州儀器公司的Stellaris。
圖 2 所示為 STM32 的調(diào)試體系構(gòu)架。
STM32MCU和StellarisMCU的設(shè)計(jì)都遵循了ARM的ADI規(guī)范。
STM32選用了SWD和JTAG二合一DP接口:SWJ-DP,這樣的選擇方便了對(duì)老式JTAG調(diào)試設(shè)備的兼容。通過(guò)固定的操作脈沖,調(diào)試設(shè)備開(kāi)發(fā)者可以輕松實(shí)現(xiàn)在JTAG和SWD方式之間的切換。而不同的硬件設(shè)備是復(fù)用接口引腳的,這對(duì)引腳分配嚴(yán)苛的MCU設(shè)計(jì)提供了很大便利。而Stellaris則只選用了SWD-DP一種物理連接實(shí)現(xiàn),這體現(xiàn)了TI設(shè)計(jì)人員對(duì)SWD調(diào)試方式能力的信任與把握,因?yàn)楣?jié)省出來(lái)的不僅僅是管腳,更是硅片的體積和成本。
同時(shí),STM32的AHB-AP是一種MEM-AP的實(shí)現(xiàn)。通過(guò)Internalprivateperipheralbus(PPB),調(diào)試者可以訪問(wèn)掛接
到ARM高性能總線的所有片上資源。而TI的Stellaris也通過(guò)類似的機(jī)制實(shí)現(xiàn)了對(duì)片上資源的訪問(wèn)控制。
ST公司在STM32系列的不同型號(hào)中還提供了可選的調(diào)試組件,當(dāng)然,這得益于CoreSight調(diào)試構(gòu)架中的組件化、模塊化設(shè)計(jì)。其中DWT、FPB的結(jié)合給調(diào)試者提供了數(shù)據(jù)觀察點(diǎn)、硬件斷點(diǎn)和FLASH重映射等功能,而ITM、ETM和TPIU的結(jié)合給調(diào)試者提供了不輸于大型系統(tǒng)調(diào)試方案的指令流、數(shù)據(jù)流監(jiān)控功能。而TI的Stellaris并沒(méi)有提供可選的ETM組件。TI官方也給出了令人信服的解釋:嵌入式跟蹤宏單元(ETM)旨在為開(kāi)發(fā)工具提供明確的逐指令跟蹤信息。該功能對(duì)較復(fù)雜的微處理器尤其實(shí)用,特別是那些所用片上資源太過(guò)動(dòng)態(tài),難以實(shí)現(xiàn)外部實(shí)時(shí)決定性的處理器。例如,片上高速緩存會(huì)根據(jù)程序環(huán)路執(zhí)行的具體變化而變化,同時(shí)數(shù)據(jù)和輸入也在不斷變化,因此無(wú)法以合理的價(jià)格通過(guò)外部工具來(lái)復(fù)制。但是,MCU不使用高速緩存,所以ETM作用不大。
由以上分析可以得出,只要不同的廠商在設(shè)計(jì)基于ARM內(nèi)核芯片時(shí)遵循了ARM相關(guān)協(xié)議和規(guī)范,開(kāi)發(fā)人員在選擇和開(kāi)發(fā)芯片時(shí)就能觸類旁通,大大減少相應(yīng)的學(xué)習(xí)開(kāi)發(fā)時(shí)間,降低開(kāi)發(fā)成本。同時(shí),更多的開(kāi)發(fā)工具和開(kāi)發(fā)平臺(tái)將能得到很好的重用,這對(duì)開(kāi)發(fā)者來(lái)說(shuō)是一個(gè)巨大的成本優(yōu)勢(shì)。
4JTAG和SWD對(duì)比
SerialWireDebug(SWD)是ARM體系結(jié)構(gòu)中定義的新一代調(diào)試機(jī)制,具有占有引腳少,高速下運(yùn)行穩(wěn)定等特點(diǎn),其所使用的基于分組的協(xié)議可提供比JTAG快一倍多的數(shù)據(jù)速率,SWD的誕生就旨在替代原始的JTAG調(diào)試方式。圖4所示為SWD下ARM調(diào)試機(jī)制示意圖。
從圖5中可以看出,SWD協(xié)議僅僅需要一個(gè)時(shí)鐘引腳和一個(gè)數(shù)據(jù)傳輸引腳即可完成工作。而可選的SWO引腳可以與ITM組件結(jié)合,提供類printf形式的跟蹤調(diào)試信息。相比于傳統(tǒng)的JTAG調(diào)試協(xié)議,新的SWD調(diào)試方式的各類優(yōu)勢(shì)不言而喻。同時(shí),在現(xiàn)有的SWD接口中,我們?nèi)匀豢梢允褂肑TAG的邊界掃描測(cè)試功能,當(dāng)然,這需要我們具有JTAG-AP接口的實(shí)現(xiàn)。
JTAG |
1149.1 |
SerialW |
ireDebug |
Pin |
Purpose |
Pin |
Purpose |
TCK |
Clock |
SWCLK |
Clock |
TMS |
StaleMachine Contro1 |
SWDIO |
DataIn&Out |
TDI |
Da/In |
— |
— |
TDO |
Da/Out |
SWO |
— |
TRST |
Reset |
— |
— |
圖5 SWD與JTAG1149.1引腳對(duì)比
5結(jié)語(yǔ)
ARM的新一代調(diào)試體系結(jié)構(gòu)極大的增強(qiáng)了ARM體系結(jié)構(gòu)功能的完整性和健壯性,及時(shí)轉(zhuǎn)入新的調(diào)試體系結(jié)構(gòu)是必要的,也是具有極大好處的。我們?cè)谶x擇功能芯片時(shí),在考慮了成本和開(kāi)發(fā)難度的前提下,對(duì)芯片可維護(hù)性和延續(xù)性的考慮也要列入其中。同時(shí),在選用開(kāi)發(fā)工具和平臺(tái)的過(guò)程中,是否支持ARM新的調(diào)試機(jī)制也應(yīng)該成為我們一個(gè)重要選擇因素。
20211123_619d050896007__ARMCoreSight調(diào)試與追蹤體系在CortexM3內(nèi)核中的實(shí)現(xiàn)