android usb dwc3 gaget rndis 网卡异常断开问题。

我司soc平台采用的synopsys dwc3 的 usb控制器ip。 发现usb rndis在连续压力灌包测试场景下,rndis会异常断开,其余endpoint都正常,包括adb/usb串口。

具体的测试场景是两台android设备分别通过usb连接两台电脑 ,设备与设备之间通过无线mesh空口连接(也就是同时modem子系统也在跑),通过两台电脑的iperf互相灌包。

经过加log分析,是rndis的endpoint没有收到xfercomplete的event。并且连续收到了2或3条xfernotready的event。

经过长时间的debug,过程不做分析。只说结果:
usb控制器内部dma向eventbuffer搬数据时,存在延迟,也就是说未等数据传输结束,就向ap发了中断,ap收到中断后,也读到了eventcount,在读eventbuffer内的data时,读到的是脏的data,也就是ringbuffer上一轮的数据。

root cause可能是控制器本身做法的问题,也有可能是ddr总线仲裁冲突,因为该测试场景下,多个master都会同时访问ddr,尤其是modem子系统,这也证明了如果不加modem子系统,只是ap与电脑之间灌包,是没有任何问题的。

解决方法,我的做法是每读4个字节的event,都会清0这个地址,所以说只要你读到的是0,就说明控制器还没有把数据传输完成,需要加个while循环,delay几个微秒,循环再读,即可解决。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值