版本SDK6.0.0 kernel版本3.2
我现在的USB应用为Full Speed速度,PIO模式,设置 ep0作为控制端口,ep1out和ep1in作为iso数据端口
ep1out和ep1in收发数据的大小为32byte,interval为1ms,
当ep1out或ep1in正常工作时,只要通过ep0发送控制信息时,内核就会打印出ep1out overrun信息
drivers/usb/musb/musb_gadget.c
void musb_g_rx(struct musb *musb, u8 epnum)
916 csr = musb_readw(epio, MUSB_RXCSR);
917 dma = is_dma_capable() ? musb_ep->dma : NULL;
929 if (csr & MUSB_RXCSR_P_OVERRUN) {
930 /* csr |= MUSB_RXCSR_P_WZC_BITS; */
931 csr &= ~MUSB_RXCSR_P_OVERRUN;
932 musb_writew(epio, MUSB_RXCSR, csr);
933
934 dev_dbg(musb->controller, "%s iso overrun on %p\n", musb_ep->name, request);
917 dma = is_dma_capable() ? musb_ep->dma : NULL;
929 if (csr & MUSB_RXCSR_P_OVERRUN) {
930 /* csr |= MUSB_RXCSR_P_WZC_BITS; */
931 csr &= ~MUSB_RXCSR_P_OVERRUN;
932 musb_writew(epio, MUSB_RXCSR, csr);
933
934 dev_dbg(musb->controller, "%s iso overrun on %p\n", musb_ep->name, request);
修改为DMA模式后,同样对ep0发送控制信息,频率大概每秒1次,3、4次之后也出现了overrun的现象
从抓包截图上可以看到,71200包为ep0控制包,从时间上看应该是在71148后出现,此时ep1in发往host的包也出现了中断现象
说明ep0的数据收发确实影响了iso传输,但事实上数据量并不大,请看看是否有需要修改配置的地方
Yaoming Qin:
6.0版的USB是性能最好的版本了,如果这个性能不够,似乎没有更好的办法了
username:
回复 Yaoming Qin:
我认为这个不应该是USB性能导致的问题,按照数据量来计算,上下行ISO传输的数据大小各32字节再加上Control传输的少量数据
是远远小于USB 1.1规范中的最大字节要求。
Jian Zhou:
回复 username:
能否在手上的EVM板上复现一下
Yaoming Qin:
回复 username:
可以查查应用层是否及时读出了数据,如果数据没有读出,也会导致over run
TI中文支持网