我在尝试声卡和键盘复合设备时遇到了这个问题。由于同步传输后没有ACK,直接进行下一个中断传输。这时不管端点有没有发送,中断传输就只会NAK了。目前凑合的办法是模拟两个键盘。第一个键盘不处理,永远NAK,为第二个键盘争取处理时间。
这个问题也可以由两个键盘描述符复现。该代码别处不会处理UEPn_T_LEN和UEPn_CTRL。所以此处设了发送就会一直发送。
如果只让EP3发送。EP2 NAK,EP3 ACK,很正常。
但是如果一起发送,就只有EP2能发送,EP3只会NAK了。
根据之前的调试结果。这种情况下中断会在EP3传输时发生。我猜测USB系统在中断未完成时不会响应下一个请求。但是这对于主机不重试的请求就会漏掉。我试图把UIF_TRANSFER移动到中断前面一些的位置,似乎不仅不能解决问题,连枚举都出错了。
请问有没有办法让CH552处理两个连续的USB请求?