我正在尝试编写类似于stmicro STM-STUDIO的应用程序,该应用程序通过USB从设备(STM32Fx Discovery)上运行的嵌入式应用程序中读取变量。我如何阅读来自电路板的输出(变量),最好是使用C#应用程序的应用程序?
答案 0 :(得分:1)
您应该四处搜索并查看是否存在可用于与SWD调试器通信的某种API或库。或者也许他们有一个可以从你的程序运行的命令行界面。您可以尝试联系制造商(ST)。
如果他们不支持你,那么是时候加上逆向工程帽了。我会得到一个USB协议分析仪。 Total Phase卖得很好,而且我已经用他们的400美元来调试我的USB设备很长一段时间了。您的操作系统可能还具有一些内置的USB调试功能。然后只需运行STM STUDIO,看看单击各种按钮时会发生什么。希望你能搞清楚。
您可能需要深入了解SWD协议,以便找出您在分析仪上看到的USB流量。
答案 1 :(得分:0)
如果您使用OpenOCD(如果您正在使用OpenStm32通过USB连接的ST-Link进行开发和调试,则可能就是这样),那么您可以通过 telnet连接到OpenOCD on port 4444 并发出读写内存的命令。您可以使用交互式telnet会话尝试此操作。在telnet会话中,读取32位变量的OpenOCD command为mdw <hexAddress>
。例如,要读取地址为0x20000024的RAM中的变量,请使用命令mdw 0x20000024
并期望响应0x20000242: 89ABCDEF
,其中89ABCDEF表示十六进制值。在C#中转换十六进制值可以使用类似UInt32 myUInt32 = UInt32.Parse(myHexString, System.Globalization.NumberStyles.HexNumber);
有一个教程.pdf here,描述了如何使用telnet连接到OpenOCD。
那么问题是......应该使用哪些内存地址?有两种方法可以获取地址:从链接器.map文件中获取它(以编程方式或手动方式)或使用库来解析&amp;从.elf文件中提取调试信息。
我还没有找到一个自包含的DLL或dot.net包装器,可以在一个包中完成所有这些。
与STM-Studio类似的另一个工具是T.I。GUI Composer,它适用于T.I。的ARM处理器,并通过JTAG或SWD进行通信。我还没有尝试过使用带有STM处理器的GUI Composer,但概念类似,即使用调试接口作为GUI的一种通信协处理器而不修改FW。