嵌入式开发者社区

标题: 6748的USB,每包数据量为FIFO满包和半包速率相差极大的问题 [打印本页]

作者: silent    时间: 2015-8-22 10:23
标题: 6748的USB,每包数据量为FIFO满包和半包速率相差极大的问题
DSP的USB PHY中,将FIFO大小设置为 512Byte,每次发送数据时,向FIFO写入512Byte字节数据,然后使能TXRDY,使用创龙开发板,能够稳定传输数据,数据速率为7~8MB/s,使用我的板子一般只能发送几包数据,然后就出现上面的错误,不能继续发送。
PERI_TXCSR 寄存器值为 0x0003,指示DSP程序写入数据到USB PHY的FIFO,并且启动了发送,但是没有发送完成。
使用 bushound 抓数据包,DSP能够发送几包数据,然后就抓到一个 USTS 错误状态,错误码为 0xC0000011,这个错误码的意思是 The device returned a transaction error。


将FIFO大小设置为512Byte,每次发送数据时,向FIFO写入256Byte字节数据,然后使能TXRDY,使用创龙开发板,能够稳定传输数据,数据速率却降低到1.7MB/s左右,使用我的板子也能稳定传输数据,速率也只有1.7MB/s左右。


各位大侠分析一下我的板子每次传512Byte为啥不行?


每次传输256Byte为啥速率降低的如此多,这种情况下有没有提速的办法?


作者: 希望缄默    时间: 2015-8-24 10:09
USB 内部有 CPPI DMA
DMA 一般情况下在大块数据搬移时候效率才会比较高

至于你的板子建议可以检查下外部时钟输出是否精确
作者: silent    时间: 2015-8-25 16:28
希望缄默 发表于 2015-8-24 10:09
USB 内部有 CPPI DMA
DMA 一般情况下在大块数据搬移时候效率才会比较高

首先谢谢你的回答。
你怀疑是我的时钟精度不够?
情况1、如果我设置FIFO为512Byte,每次向FIFO写入512Byte,然后启动发送,这种情况下只能发送几包数据。
情况2、如果我设置FIFO为512Byte,每次向FIFO写入256Byte,然后启动发送,这种情况下能够稳定的传输数据。
情况3、如果我设置FIFO为64Byte,每次向FIFO写入64Byte,然后启动发送,这种情况下也只能发送几包数据。

如果是每包数据量过大,由于时钟精度不够,在传输过程中产生积累错误,这个能够解释情况1和2,但是情况3也不能解释呢。
我还试过将FIFO设置更小,写满FIFO后再启动发送,也只能发送几包数据。
所以我有点迷茫了,找不到问题的方向了
作者: 希望缄默    时间: 2015-8-26 09:04
silent 发表于 2015-8-25 16:28
首先谢谢你的回答。
你怀疑是我的时钟精度不够?
情况1、如果我设置FIFO为512Byte,每次向FIFO写入512By ...

呃 这个~ 我觉得应该先从硬件方向排查 确认硬件完全没有问题再找软件的原因
不然两边都是变量 不便于找原因
作者: silent    时间: 2015-8-26 09:47
希望缄默 发表于 2015-8-26 09:04
呃 这个~ 我觉得应该先从硬件方向排查 确认硬件完全没有问题再找软件的原因
不然两边都是变量 不便于找原 ...

好的,谢谢,我再查查硬件,主要是硬件连接太简单了,不知道从何下手




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4