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