CH569 USB3.0 BULK出现复位

在使用USB3.0 BULK 实现UVC时,在ITP中断中如果获取到的待发送的包数量大于等于设置的最大数量时,再调用一次send_ready,主机会发送复位。请问是怎么回事?

代码如下:

image.png

请问,当通过USB30_IN_Nump函数读到的剩余待发送包数量为最大时要怎么恢复呢?我实际测试发现,一旦变成最大值不管时等待,还是重新调用Send_ERDY都无法恢复。


CH569/565,USB3.0的BULK传输,最大nump为4. ISO传输支持最大nump为16.

实现BULK传输时,始终应当在进入对应传输的CALLBACK中或之后,处理剩余的或者是下一次数据的传输。

且在调用send_erdy之前,始终应当配置IN_SET或者是OUT_SET.

可以参考:?https://www.wch.cn/bbs/thread-86707-1.html



请问在什么情况下会造成数据发送不出去?

我现在是BULK传输,nump设置成1,包长度是12。发送数据先调用USB30_IN_Set,再调用USB30_Send_ERDY,这样运行一段时间后数据就发不出去了,用bushound抓不到数据,也没有IN中断触发。

image.png



需要确保在任意时刻,主机和从机的收发步调一致。

通俗的说,从机接下去想要上传,主机接下去想要下传,那USB后续就卡死了。


从贴出的代码看,这是个同步端点?如果是同步端点,则不应当调用send_erdy函数。同步传输的代码实现请参考:

https://www.wch.cn/bbs/thread-91615-1.html

image.png


USBSS->UEP1_TX_DMA需要指向16字节对齐的地址,不然也会有问题。


我用的是BULK传输,端点1不能作为BULK传输的端点吗?

我是UVC设备,单一方向,不存在主机发数据。


我在USB30_Send_ERDY之后打印一个log,经过长时间(10分钟以上)测试不会出现数据发送不出去的情况,这是怎么回事呢?

不加log,坚持不到2分钟就会出现数据无法发送出去。


请问这个代表什么意思(USBSS->UEP1_TX_CTRL >> 21) & 0x1F;

数据发送不出去的时候这个的递增和要发送的包个数不一致。正常情况每次发4包,这个值的递增也是4;异常时发送4包,这个值的递增是1,然后就不产生IN中断了。


我在代码里后来添加了等待这个值的递增和要发送的包数一致的代码(也不知道这样写是否正确),偶尔也会出现无IN中断产生的情况。

image.png



使用CH569/565 USBSS功能时请基于CH372DEVICE函数库: https://www.wch.cn/bbs/thread-91615-1.html

image.png

该函数库为唯一受支持且维护的。


你好,我下载了你说的这个库函数,代码流程没有修改,只是打开了Log,烧录到569后USB无法识别。请问是什么原因呢?

image.png

image.png



之前代码USB2.0控制传输请求响应有些问题,代码已更新,请前往下载。


请问下,HSPI中断优先级比USB中断优先级高的情况下,如果某一时刻这2个中断条件同时产生了,会不会造成USB中断无法响应的情况?


正常处理的情况下不会有问题(正常做些缓冲区处理、状态切换、控制使能之类操作)。

同样的问题,也可以提问成:

"USB中断优先级比HSPI中断优先级高的情况下,如果某一时刻这2个中断条件同时产生了,会不会造成HSPI中断无法响应?"

是一样的道理,中断本身就不适合处理特别花费时间的运算。


你好,更新了库文件后还是会出现USB中断无响应的问题,我把寄存器信息打印出来了,麻烦看下是什么原因。红色框是USB中断没响应后的值。代码还是之前那样,先设置DMA地址,再IN_Set,最后send_ERDY。

image.png



可以帖一下代码相应端点CALL_BACK中是怎么写的,如果有在别的地方也调用了IN_SET函数,可以一起贴出来,简单描述下调用的逻辑,看下是否有不合理的地方。


icon_rar.gifusb_in.rar

代码如附件,麻烦看下哪里有问题


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