版本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传输,但事实上数据量并不大,请看看是否有需要修改配置的地方