Linux 如何测试USB设备堆栈?
我正在为微控制器开发USB设备堆栈。“为什么?”你可能会问?首先也是最重要的:制造商的驱动程序,这是我的出发点,完全是垃圾。它没有以正确的方式响应USB重置(所有端点都应该重新初始化),它没有以正确的方式响应设置数据包(当接收到设置数据包时,端点0必须重新初始化),并且它不允许根据设备是以高速还是全速模式运行而使用不同的描述符。除此之外,由于控制器非常智能,所以没有太多工作要做:端点基本上由控制器管理,控制器使用DMA缓冲区的链接列表与应用程序通信。所有ACK/NACK/NYET逻辑都在控制器本身中,如果DMA缓冲区用完,它会自动发送NACK/NYET 但是我越来越沮丧了。该设备对我(TM)有效,但朋友报告说它对他们无效。我慢慢地发现了制造商的驱动程序的所有问题。所需要的只是一个坏的USB端口或电缆,主机缺少一些ACK,USB驱动程序/控制器处于坏状态,我的设备不再响应。我能想到很多必须处理的角落案例,但我没有任何方法来测试它们。尤其是我的设备发送的数据包丢失ACK似乎是一个问题Linux 如何测试USB设备堆栈?,linux,usb,Linux,Usb,我正在为微控制器开发USB设备堆栈。“为什么?”你可能会问?首先也是最重要的:制造商的驱动程序,这是我的出发点,完全是垃圾。它没有以正确的方式响应USB重置(所有端点都应该重新初始化),它没有以正确的方式响应设置数据包(当接收到设置数据包时,端点0必须重新初始化),并且它不允许根据设备是以高速还是全速模式运行而使用不同的描述符。除此之外,由于控制器非常智能,所以没有太多工作要做:端点基本上由控制器管理,控制器使用DMA缓冲区的链接列表与应用程序通信。所有ACK/NACK/NYET逻辑都在控制器本
让我们考虑两个场景: