2013-11-03 91 views
2

我正在嘗試編寫類似於stmicro STM-STUDIO的應用程序,它通過USB從設備上運行的嵌入式應用程序(STM32Fx Discovery)讀取變量。我如何閱讀來自董事會的輸出(變量),最好是使用C#應用程序的應用程序?如何通過USB讀取swd輸出?

+0

你想要實現哪個USB類? STM Studio正在與JTAG或SWD調試器一起工作,所以不清楚如何實現與USB相同的功能。 –

+0

我正在使用SWD調試器..他們(St Micro)有令人印象深刻的應用程序STMStudio,它可以快速讀取SWD。一旦運行.elf文件提供它列出所有變量,並動態讀取當前值 – TonyP

+1

好吧..我認爲這很明顯,當我說我想讀取SWD調試器輸出/並使用usb/swd將swd命令寫回到開發板。如果我使用HID或任何其他類,對我來說沒有關係。無論什麼讓我通過USB讀/寫swd都沒問題。 – TonyP

回答

1

您應該四處搜索並查看是否有可用於與SWD調試器交談的某種API或庫。或者也許他們有一個可以從程序運行的命令行界面。您可以嘗試聯繫製造商(ST)。

如果他們不會支持你,那麼現在是時候把逆向工程的帽子。我會得到一個USB協議分析儀。 Total Phase賣的很好,我用他們的400美元長時間調試我的USB設備。您的操作系統可能還具有一些內置的USB調試功能。然後運行STM STUDIO,看看當你點擊各種按鈕時會發生什麼。希望你能弄明白。

您可能需要深入瞭解SWD協議才能找出您在分析儀上看到的USB流量。

0

如果使用OpenOCD的(這你可能是,如果你使用OpenStm32用於通過USB連接通過ST-Link的開發和調試),那麼你可以通過遠程登錄連接 OpenOCD的到端口上併發出命令讀寫內存。您可以使用交互式Telnet會話嘗試此操作。在telnet會話中,讀取32位變量的OpenOCD commandmdw <hexAddress>。例如,要讀取地址爲0x20000024的RAM中的變量,請使用命令mdw 0x20000024,並期待類似0x20000242: 89ABCDEF的響應,其中89ABCDEF表示十六進制值。在C#中轉換十六進制值可以用UInt32 myUInt32 = UInt32.Parse(myHexString, System.Globalization.NumberStyles.HexNumber);

這樣的表達式來完成。有一個教程.pdf here描述瞭如何用telnet連接到OpenOCD。

然後問題是......應該使用什麼內存地址?有兩種方法獲取地址:從鏈接器.map文件中獲取(編程或手動)或使用庫來解析&從.elf文件中提取調試信息。

我還沒有找到一個自包含的DLL或dot.net包裝,在一個包中完成所有這些。

另一個類似於STM-St​​udio的工具是T.I.的GUI Composer,它可用於T.I.的ARM處理器並通過JTAG或SWD進行通信。我還沒有嘗試過在STM處理器上使用GUI Composer,但這個概念是相似的,即使用調試接口作爲GUI的一種通信協處理器而不修改FW。