大多數(shù)情況下,在嵌入式開發(fā)中,調(diào)試嵌入式系統(tǒng)與調(diào)試桌面應(yīng)用程序沒有太大區(qū)別。通常,運(yùn)行我們的開發(fā)環(huán)境的主機(jī)沒有任何訪問外部硬件狀態(tài)的工具。這就是為什么我們需要配置一組額外的硬件和軟件組件,以便我們可以使用某種通信通道將從主機(jī)上的調(diào)試器發(fā)送的命令轉(zhuǎn)換為目標(biāo)設(shè)備。讓我們了解一下調(diào)試嵌入式目標(biāo)的典型設(shè)置。
調(diào)試接口-問題?
現(xiàn)在有兩種流行的接口用于調(diào)試嵌入式系統(tǒng):JTAG 和串行線調(diào)試 (SWD)。經(jīng)典 JTAG 由 Joint Test
Access Group 在 80 年代開發(fā),作為在制造后驗(yàn)證設(shè)計(jì)和測(cè)試印刷電路板的標(biāo)準(zhǔn)。今天,JTAG
被半導(dǎo)體行業(yè)廣泛采用,并經(jīng)常用于編程、測(cè)試和調(diào)試嵌入式系統(tǒng)。 JTAG 接口的主要缺點(diǎn)是它至少需要四個(gè)引腳(TRST
是可選的)才能正常工作。當(dāng)我們使用引腳數(shù)量有限的小封裝 IC 時(shí),這可能是一個(gè)問題。
Arm 開發(fā)了一個(gè)簡(jiǎn)化的替代接口,稱為串行線調(diào)試 (SWD)。它用兩個(gè)信號(hào)代替 JTAG 接口 - 一條雙向數(shù)據(jù)線
(SWDIO) 和時(shí)鐘 (SWCLK),提供所有常用的調(diào)試和測(cè)試功能,與 JTAG 相比具有更高的性能。盡管許多現(xiàn)代微控制器同時(shí)支持 JTAG 和 SWD
接口,但 SWD 是一種專有接口,主要用于 Arm 生態(tài)系統(tǒng)。
調(diào)試探針-問題?
我們可以將調(diào)試探針描述為主機(jī)和目標(biāo)嵌入式系統(tǒng)的調(diào)試端口之間的硬件中介。任何調(diào)試探針的主要任務(wù)是將來(lái)自調(diào)試器的命令轉(zhuǎn)換為目標(biāo)設(shè)備可理解的信號(hào)。通常,調(diào)試探針通過
USB 連接到主機(jī),但以太網(wǎng)或 Wi-Fi 連接也有更多奇特的變化,允許嵌入式開發(fā)人員甚至從世界任何地方遠(yuǎn)程調(diào)試設(shè)備。
市場(chǎng)上有很多調(diào)試適配器,從開源和供應(yīng)商不可知探針 (Black Magic Probe) 到來(lái)自芯片供應(yīng)商
(Atmel-ICE、ST-link) 和獨(dú)立商業(yè)公司 (Segger) 的專有解決方案J-鏈接)。一些供應(yīng)商還提供帶有板載調(diào)試探針的開發(fā)套件(Nordic
nRF52-DK、NXP i.MX RT1010),因此開發(fā)人員無(wú)需任何額外硬件即可開始調(diào)試。
值得一提的是,PlatformIO Unified Debugger
具有高度可配置性,可與各種調(diào)試探針一起使用,它還為具有內(nèi)置調(diào)試電路的開發(fā)套件提供了大量預(yù)定義配置。這意味著開發(fā)人員不需要任何調(diào)試配置,只需連接您的開發(fā)板并開始新的調(diào)試會(huì)話。
調(diào)試服務(wù)器-問題?
簡(jiǎn)單地說(shuō),調(diào)試服務(wù)器是一個(gè)運(yùn)行在主機(jī)上的軟件,它充當(dāng)調(diào)試器和連接到目標(biāo)設(shè)備的調(diào)試探針之間的橋梁。 OpenOCD
是免費(fèi)和開源調(diào)試服務(wù)器的最佳示例之一。這是一個(gè)社區(qū)驅(qū)動(dòng)的項(xiàng)目,具有大量受支持的調(diào)試探針和目標(biāo)設(shè)備。另一個(gè)例子是 pyOCD——一個(gè)用于編程和調(diào)試 Arm
Cortex-M 微控制器的開源包。另一方面,像 Segger 這樣的公司提供自己的工具集(包括調(diào)試服務(wù)器),可以更好地利用其 J-link
調(diào)試探針的功能。在嵌入式開發(fā)中,還有一些調(diào)試探針根本不需要任何中間主機(jī)軟件(例如 Black Magic
Probe),并且可以通過串行端口模擬調(diào)試服務(wù)器來(lái)直接與調(diào)試器交互。