概括
我目前正在使用wireshark从将数据发送到FPGA板的程序中嗅探USB串行数据包。到目前为止,我能够获取数据包和数据,但我不确定如何测试我找到的每个命令。我想开发自己的程序,该程序可以在与原始程序运行的平台不同的平台上执行相同的操作。
问题
我会得到另一个程序来连接到 USB 串行连接,然后测试发送每个命令吗?什么程序适合测试?
我将如何确定串行连接规范?波特率、数据位、停止位、奇偶校验、流量控制和转发?
概括
我目前正在使用wireshark从将数据发送到FPGA板的程序中嗅探USB串行数据包。到目前为止,我能够获取数据包和数据,但我不确定如何测试我找到的每个命令。我想开发自己的程序,该程序可以在与原始程序运行的平台不同的平台上执行相同的操作。
问题
我会得到另一个程序来连接到 USB 串行连接,然后测试发送每个命令吗?什么程序适合测试?
我将如何确定串行连接规范?波特率、数据位、停止位、奇偶校验、流量控制和转发?
对于初学者来说,你会想要一个像 Linux 这样的内核 USB 监视器,一个通过 USB 分析仪(更昂贵,但更灵活)或类似逻辑分析仪的东西。
这是一个视频,它比任何人都更详细地介绍了后者https://www.youtube.com/watch?v=4FOkJLp_PUw视频中的注释https://opentechlab.org.uk/videos: 011:笔记
总而言之,您将需要一个逻辑分析器,这可能是一种让设备告诉您它即将以某种方式发送数据包的方法(否则您将在 USB 分析器或内核 USB 监视器中获得更好的运气)。Sigrok 是在那里使用的软件……但还有其他软件。
这是视频中的人使用的一些python代码,可能对您有用。这只是使用 pyusb 的一个基本示例,他使用它与他正在调试的任何微控制器板进行通信,您可以使用它与您的 FPGA 通信,也许当您弄清楚它的协议正在做什么时。
#! /usr/bin/env python3
import usb.core
import time
dev = usb.core.find(idVendor=0x0925, idProduct=0xD100)
if dev is None:
raise ValueError('Device not found')
res = dev.ctrl_transfer(
bmRequestType=0x40, # OUT, VENDOR, DEVICE request
bRequest=1, # Request #1
wValue=0xCAFE,
wIndex=0xD00D,
data_or_wLength=[0x01, 0x23, 0x45, 0x67])
您选择的方法在很大程度上取决于您需要了解的内容,如果设备运行正常并且您不需要对其进行更改,也许软件监视器就足够了。如果确实是USB串口是专用芯片吗?如果是这样,请找到它的数据表......并调查可能会告诉您一些事情的电路。常见的 USB 到串行芯片如下,它们要么使用标准的 USB CDC ACM 协议(检查有问题的芯片是否是这个,那么您可以在此处获取规范)或自定义驱动程序。
请注意,协议本身的 USB 端可能与波特率无关,但您可能需要告诉 USB 串行转换器以什么速率运行……这在很大程度上取决于它的设计方式。如果您无法从电路本身中找出正确的波特率,则探测控制器的 Uart 输出品脱可以让您找出正确的波特率。
解决此问题的另一种方法是找出至少一个可以给您响应的命令……然后彻底尝试不同的波特率和配置,直到获得预期的响应。
Silicon Labs CP2102 和变体。 https://www.silabs.com/documents/public/data-sheets/CP2102-9.pdf
MicroChip MCP2200 http://www.microchip.com/wwwproducts/en/en546923