最近,我得到了一个锻炼设备,它有一个USB到PC接口,并记录在一个糟糕的Windows应用程序的锻炼。我的意图是读出USB并构建一个自定义应用程序来显示这些数据。
当连接到linux机器时,/dev/ttyUSB0中的设备寄存器可以用lsusb和stty报告其他信息中的波德率。我用stty设置启动minicom,一旦启动,设备就会发送41个字节。
我假设这些字节表示对PC接口的通知。
我想做的是模仿锻炼设备,并将这41个字节发送到个人电脑界面,以查看PC端在启动时做了些什么。有没有一种方法来模仿这个设备,以便PC软件能够识别它?
发布于 2018-03-13 15:10:21
如果设备是/dev/ttyUSB0,那么它很可能实现一个虚拟COM端口,这就是。
操作系统知道必须加载什么驱动程序/内核模块,因为当您在USB协议描述符中插入设备时(设备将其设备描述符发送到主机,据此主机加载驱动程序/内核模块),您可以在lsusb -v中看到此信息。具体而言,设备向主机发送以下描述符:设备描述符、配置描述符、接口描述符、端点描述符:http://www.beyondlogic.org/usbnutshell/usb1.shtml
为了模拟设备,您必须在MCU上使用精确的这些描述符以及标识符(供应商id )和PID (产品id )编写固件。
您接收到的41个字节在虚拟COM端口上流动,因此在RS-232协议中(您可以使用minicom接收它们),因此它们高于USB级别,但是它们是USB数据包中有效负载的一部分。如果在windows中的设备的windows中有一个专有驱动程序,那么这41个字节很可能寻址到驱动程序(这是您很可能没有的源代码.)。这是非常常见的,有具有RS-232接口的万用表,必须发送D = 44 (hex) = 01000100 (bin)才能接收任何data。
因此,您可以尝试使用RS-232嗅探器(即https://www.eltima.com/rs232-sniffer.html )直接嗅探虚拟COM端口( RS-232协议)。
或者,您可以尝试使用wireshark (或linux中的usbmon )嗅探底层USB流量,并从USB数据包中提取有效负载,以记录windows驱动程序与其他设备之间的通信。
https://ask.wireshark.org/question/36/how-to-capture-usb-packets-please/
https://www.youtube.com/watch?v=EfkC7kmIMt8 ( Wireshark中的USB )
https://www.kernel.org/doc/Documentation/usb/usbmon.txt
( https://www.kernel.org/doc/html/v4.13/driver-api/usb/URB.html )
https://stackoverflow.com/questions/49253222
复制相似问题