我正在开发一个基于STM32微控制器的USB设备。没什么花哨的,一种配置,一个接口,不使用端点(默认端点 0 除外)。该设备在 Ubuntu 上枚举正常,当我将设备连接到 Windows 计算机时会出现问题。它不起作用,而且由于配置描述符,我找不到比它更多的信息:
这是配置描述符的屏幕截图,如在 Ubuntu 机器上所示:
由于某种原因,Windows 计算机上的 Wireshark 看不到与该设备的通信(与其他设备的通信显示得很好)。设备上的日志表明设备接受地址并发送配置描述符,但从未收到 SET CONFIGURATION 命令。请建议我如何在 Windows 中找到一些更具描述性的错误消息或我的设备可能出现的问题。
我的设备发送的配置描述符长度错误。
我的 Linux 机器首先请求描述符的 9 个字节来计算其总长度,然后再次请求描述符,请求字节数。好吧,我的设备被编程为发送回主机请求的确切字节数,即:
HAL_PCD_EP_Transmit(hpcd, 0x00, configuration_descriptor, requested_length);
虽然我的 Windows 机器只请求一次配置描述符,请求 255 个字节。暂且不说它超出了我的缓冲区所包含的范围,我的设备只能发送一个数据包。由于最大数据包大小配置为 64 字节,因此主机在收到整个描述符后预计会有更多数据包。长话短说,修复如下:
if (requested_length > sizeof(configuration_descriptor)) {
requested_length = sizeof(configuration_descriptor);
}
HAL_PCD_EP_Transmit(hpcd, 0x00, configuration_descriptor, requested_length);