咨询isochronous endpoint和interrupt endpoint是否可以在CH552上共存?

你好,

我想用CH552做一个声卡和键盘复合设备。我把端点1设置为Isochronous Output  ,端点2设置为Interrupt Input。于是遇到一个奇怪的问题:

当CH552直接插电脑(Win10台式机,INTEL和M1 Macbook Pro)的USB口,声卡无输出时,总线正常对端点2做PID IN请求,CH552也能正常输出NAK。但是声卡一旦输出,总线就不会做PID IN请求,每帧里就只有声卡的Isochronous传输。与此同时,主机的HID驱动因为得不到数据,会反复对USB BUS发RESET,也就造成声音断断续续。

但是,如果CH552和主机之间隔着个HUB,就没问题。我测试了Terminus FE1.1和Realtek RTS5411都可以。


下面付了USB信号的截图。第一张是直接插电脑的图,只有Isochronous传输。

第二张是经过USB HUB的图,Isochronous开始后125us,Interrupt传输开始。虽然SOF还是1ms间隔,但是似乎USB HUB插了微帧给CH552用。


请问CH552是否有可能让isochronous endpoint和interrupt endpoint在直接插电脑的情况下也能共存?


1714026537150903.png1714026537136463.png



补充一下,interrupt传输丢失的问题似乎不是端点的问题而是描述符的问题。

Tinyusb库里的cdc_uac2例程可以实现两个Isochronous,一个interrupt和两个Bulk同时使用,SOF之间的空隙基本可以占满。

C4NDY_KeyVLM项目通过调用Tinyusb实现了UAC2和HID的共存。


总结,通过逻辑分析仪发现CH552的Isochronous数据后面有ACK,而TINYUSB没有。正常Isochronous是不应该有ACK的。

经检查是UEP_R_RES_TOUT配置不正确导致,故障排除。


只有登录才能回复,可以选择微信账号登录