问题现象:xhci的板子通过USB接iphone设备,进行数据OUT和IN,有一些芯片对于OUT,IN都能正常,有一些芯片对于OUT正常,对于IN总是出现babble error. 有时还不能进入事件中断。整体来说就是数据OUT没问题,数据IN对于一些芯片正常,一些芯片不正常,还有一个特殊的芯片是快速开关电源就会正常。
查看xhci对于babble error的描述如下:

意思就是有三种情况下会产生babble error。1:当device 发送的数据 > TD transfer size时,2.当一个包夸帧时,3. 当一个>MaxPacketSize时。
开始我们把log打印出来排除了1,和3,就把原因定位在了2,通过调时钟,调xhci中EOF的time point值,调内核电压等等各种方式都是试了,都没有效果。
下图是打印的各个端点的output_context种的ep_context的内容,是没有问题的,因为iphone发送的数据包是20个byte,不会超过512的maxPacketSize.

因为IN端点用的是EP10,所以就感觉是这个端点的问题,就用芯片自己模仿了iphone设备,通过改端点号来查找问题,发现模拟的iphone用EP5时,对应xhci是ep10,用usb逻辑分析仪抓包有一块板子用ep10是没有IN请求下发的出来的,当改成其他端点作为in时,抓包就显示有in请求下来。
但是另一块板子就现象不一致,无论用什么端点,抓包都显示有in请求下来。这有点模糊视线了就。
没有IN请求下发的抓包:
<
在使用USB XHCI控制器与iPhone设备进行数据交换时遇到Babble Error问题,表现为部分芯片数据IN异常。排查过程中,确定问题可能与数据包跨帧、超MaxPacketSize及TD transfer size有关。经过分析代码和硬件调试,发现输入和输出上下文初始化预留的端点数量不足,修正后解决了所有异常芯片的问题。总结中指出,不同芯片上电时SRAM的初始值可能因电压等因素导致错误,进而引发Babble Error。
最低0.47元/天 解锁文章
1383

被折叠的 条评论
为什么被折叠?



