WCH565 USB30 巨量LINK_RDY_FLAG中断发生

用WCH565开发USB3.0相机,在大多数机器上识别没有问题,但有一台台式机很奇怪。它上面的USB3.0口用USB30 U盘测试是好的,能够正常识别最高速率能达到200MBps, 但是死活识别不出基于WCH565的相机。刚开始怀疑是USB3.0布线的问题,但是严格按照USB3.0布线规范,问题依旧。所以想办法将USBSS Link中断记录输出,经过日志分析发现出现大量连续不断的LINK_RDY_FLAG中断。

正常工作的机器上, MCU输出的日志(你们一定会说:输出日志会打断时序,USB30LinkLog只是把数据暂存内存中,实际打印在main函数主进程中完成,因此对时序的影响很小).

01.png


插入不能正常识别的机器上输出的日志如下:

02.png


可以看到连续不断地出现LINK_RDY_FLAG中断,似乎清中断标志无效。





Q1:

? if( tx_lmp_port ) // LMP, TX PORT_CAP & RX PORT_CAP

? ? ? ? {

? ? ? ? ? ? USBSS->LMP_TX_DATA0 = LINK_SPEED | PORT_CAP | LMP_HP;

? ? ? ? ? ? USBSS->LMP_TX_DATA1 = UP_STREAM | NUM_HP_BUF;

? ? ? ? ? ? USBSS->LMP_TX_DATA2 = 0x0;

? ? ? ? ? ? tx_lmp_port = 0;

? ? ? ? }

这段代码来自你们的Demo, LMP, tx_lmp_port?是什么含义?


Q2: 日志中发现USBSS->LINK_ERR_STATUS错误码等于0x200, 0x200的含义是什么?

03.png

Q3: USBSS PHY在何种情况下会连续不断触发LINK_RDY中断?


附日志打印函数:

1669890515339247.png

1669890515334989.png


根据截图中LINK中断函数,应该不是最新版本。
前往获取最新版本代码,以EVT包中CH372DEVICE示例程序为基础代码工程:

/downloads/CH569EVT_ZIP.html



06.png

标准CH372DEVICE:-LIB VERION2.0-20221124中的例子直接下载到WCH565评估板上,怎么提示"配置描述符请求失败?"



按照CH372Device例程中的LINK_IRQHandler的是实现方式(主要是else if语句 替换为if语句),仍然是原来正常识别的机器能够正常识别,不能识别的还是不能识别。

07.png


新的发现是LINK中断标志寄存器值等于0x00010083时, 对应4个中断标志,?

0x00010083,

1<<0, LINK_RDY_FLAG

1<<1, LINK_RECOV_FLAG,LINK_IRQHandler函数未处理

1<<7, LINK_GO_U0_FLAG,??LINK_IRQHandler函数未处理

1<<16, 未知,LINK_IRQHandler函数未处理

LINK_IRQHandler只处理了LINK_RDY_FLAG


08.png

LINK_ERR_STATUS的值依然时0x00000200, 强烈要求解释一下它的含义!

正常识别机器上的日志如下图所示:

09.png

可以看到正常识别情形下LINK_ERR_STATUS始终为0, LINK中断程序只执行了4次。

Q:请问LINK_INT_FLAG bit16的含义是什么?




可以分享一下有问题电脑的硬件型号是什么,看能否找到相似电脑来进行测试。

LINK有异常,可能是由枚举数据交互中出错导致,那就还是请以官网下载的示例程序为准:/downloads/CH569EVT_ZIP.html


下载 WCH569 USB3.0 CDC程序到CH565评估板上, 短暂识别为串口设备后,反复掉线上线,不稳定.

1670047826156594.png

1670047826863851.png


系统的USB主控制器如下图所示

1670049911117597.png


1670049911697989.png

1670049911174951.png

1670049911199172.png



在USB30_StandardReq中将主机下发的8字节请求打印出来看下(这在代码中已经有printf),将主机下发的请求和函数后面swtch-case处理对比下,看是否存在没有处理的请求。


CH565烧录CH569 CDC 串口例程,打印日志。

正常识别的机器上的日志如下


1670313101161461.png


1670313100444033.png

偶然发现,在Windows设备管理器将设备识别为串口后,将设备从主机拔除的一瞬间(随后系统掉电),会触发多次LINK_RDY_FLAG, 而对应的中断处理函数仍然认为USB3.0通讯成功,感到处理逻辑似乎有问题啊。

下图是CH565评估板外接5V电源,?在Windows设备管理器将设备识别为串口后, 将设备从主机拔下时抓下的日志。

CDC_PowerOn_PlugOn.png


以上操作均在识别正常的机器上执行


在识别有问题的机器上,设备识别成功后又莫名地断开,反反复复,但是第三方USB3.0 U盘却没有这样的问题。


Failed-Recognize.png

icon_rar.gifcode.zip

icon_rar.giflog.zip




Code.png

Q:USBSS->LINK_ERR_STATUS 不等于0时的中断处理是否需要特殊处理?


可以的话测试下官方示例程序:/downloads/CH569EVT_ZIP.html
或者邮件联系:wsh@wch.cn



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