聚豐項目 > 移植Black Magic Probe到RTT
使用RT-Thread開發的MCU調試器,嘗試移植Black Magic Probe的功能代碼作為獨立組件,完成SWD協議連接MCU,并通過RSP協議實現GDB調試。
jf_50393217
分享jf_50393217
團隊成員
jf_50393217 招采總監
1、使用stm32的SWD調試原理如下圖。
即通過中科藍訊AB32VG1開發板的PE0引腳作為SWD協議的輸入和輸出引腳,向目標設備(例如stm32)發送指令和接收數據,而PE1引腳作為SWD協議的時鐘數據引腳,向目標板輸出調試邏輯的時鐘信號。
<span style="color: rgb(51, 51, 51); font-family: " microsoft="" yahei",="" 微軟雅黑,="" roboto,="" "helvetica="" neue",="" helvetica,="" "pingfang="" sc",="" "microsoft="" "source="" han="" sans="" "noto="" cjk="" "wenquanyi="" micro="" hei",="" sans-serif;="" font-size:="" 11.25pt;="" letter-spacing:="" 0.75pt;="" text-align:="" justify;"="">
傳統的調試模式是這樣的:
也就是前端工具(例如VSCode,Eclipse等等)通過電腦上的GDB 連接gdbserver,然后gdbserver通過USB連接的硬件調試器(debug probe)來調試目標單片機設備(可通過swd接口或者jtag接口)。硬件調試器(debug probe)只充當協議解析(SWD和JTAG)和連接目標板的角色。
其實目前常見單片機的性能是相當充裕的,更不用說本次活動的藍訊驕龍AB32VG1芯片。可以將gdbserver這個橋接GBD和硬件調試器的角色轉移到硬件調試器上。如圖所示:
這樣做的好處就是,GDB可以直接通過USB串口來訪問自帶了gdbserver的調試器,免去調用gdbserver的過程。現在有些芯片需要使用特定版本的OpenOCD,否則連不上,安裝的版本多了,自己也不一定記得清到底哪個是給誰用的。而且一般調用openocd也只是開個程序掛在那里,有時候還經常忘記開。
現在把它集成到硬件調試器里,計算機上就不需要運行gdbserver,可以直接通過GDB調用串口設備來調試。
在Black Magic Probe源碼里,blackmagic/src/gdb_main.c文件定義了gdbserver的對應行為。src/target里定義了不同mcu目標的flash燒錄操作和McuID,以及swd協議對應操作。
本次工程的目標是將對應的gdbserver功能,以及swd協議,mcu目標源碼移植到RT-Thread上,實現對應的功能。
通過邏輯分析儀捕獲對應的協議信息并驗證(例如成功讀取操作響應時序應如下圖):
實際捕獲的信息(因項目未完成,暫無對應截圖和內容):
1、因工作時間較忙,項目未能及時完成,目前新建了對應的項目,還在分析對應源碼,需要時間完善