如何通过 USB 读取 swd 输出



我正在尝试编写一个类似于stmicro STM-STUDIO的应用程序,该应用程序通过USB从设备上运行的嵌入式应用程序(STM32Fx Discovery)中读取变量。如何读取来自开发板的输出(变量),最好是使用 C# 应用程序的应用程序?

您应该四处搜索,看看是否有某种 API 或库可用于与 SWD 调试器通信。 或者,也许他们有一个命令行界面,您可以从程序运行。 您可以尝试联系制造商 (ST)。

如果他们不打算支持你,那么是时候戴上逆向工程的帽子了。 我会得到一个USB协议分析仪。 Total Phase 卖得很好,我已经用他们的 400 美元来调试我的 USB 设备很长时间了。 您的操作系统可能还具有一些内置的 USB 调试功能。 然后只需运行STM STUDIO,看看当您单击各种按钮时会发生什么。 希望你能弄清楚。

您可能需要深入了解 SWD 协议,才能弄清楚您在分析仪上看到的 USB 流量。

如果您使用OpenOCD(如果您使用OpenStm32通过USB连接的ST-Link进行开发和调试,则可能是OpenOCD),那么您可以通过端口4444上的telnet连接到OpenOCD,并发出命令来读取和写入内存。您可以通过交互式远程登录会话尝试此操作。在 telnet 会话中,读取 32 位变量的 OpenOCD 命令mdw <hexAddress> 。例如,要在地址 0x20000024 处读取 RAM 中的变量,请使用命令 mdw 0x20000024 并期望得到类似 0x20000242: 89ABCDEF 的响应,其中 89ABCDEF 表示十六进制值。在 C# 中转换十六进制值可以使用类似 UInt32 myUInt32 = UInt32.Parse(myHexString, System.Globalization.NumberStyles.HexNumber);

这里有一个教程.pdf描述了如何使用telnet连接到OpenOCD。

那么问题是...应该使用哪些内存地址?有两种方法可以获取地址:从链接器.map文件(以编程或手动方式)获取地址,或使用库从.elf文件中解析和提取调试信息。

我还没有找到一个独立的 DLL 或 dot.net 包装器可以在一个包中完成所有这些操作。

另一个类似于STM-Studio的工具是T.I.的GUI Composer,它适用于T.I.的ARM处理器,并通过JTAG或SWD进行通信。我还没有尝试将 GUI Composer 与 STM 处理器一起使用,但概念是相似的,即在不修改固件的情况下将调试接口用作 GUI 的一种通信协处理器。

最新更新