TI中文支持网
TI专业的中文技术问题搜集分享网站

TM4C129的USB(host)如何连续接收不确定长度的数据?

我在USB读取数据时用的是这个函数:

uint32_t USBHCDPipeRead(uint32_t ui32Pipe, uint8_t *pui8Data, uint32_t ui32Size);

发现如果缓冲区内没有数据还调用它的话 程序就进入死循环了,现在就是要读取大于64字节的不确定长度数据,读取的逻辑要怎么设计才能避免进入死循环?

程序大概是我这个主机发送指令,从机回复,但是数据长度不固定,大于64字节。

还有这个函数并不能正确读取uint32_t USBHCDPipeReadNonBlocking(uint32_t ui32Pipe, uint8_t *pui8Data,
uint32_t ui32Size);

xyz549040622:

我想了好久,这个问题我以前也想过,但貌似没有什么好的办法。由缓存区的大小决定的,接收的时候又不能判断你要发送多少。

如果缓冲区内没有数据还调用它的话 程序就进入死循环了,只能提前判断缓存区是否为空了。

user4619179:

回复 xyz549040622:

用USBHCDPipeRead读取的话,请求从机发送数据命令是从此函数内发送的,所以没法事先判断缓存区是否为空,应该还是要先确定接收长度的,不然就更改USBHCDPipeRead,让它检测一段时间(例如50ms),如果没有数据的话就退出。   另外如果要这样更改的话,那就最好别用DMA接收了,亲测过后,发现强制退出死循环后再有数据接收的话,读取出来的数据不准确。

附:MAP_USBHostRequestIN(USB0_BASE, ui32Endpoint);  就是这个函数触发从机发送数据的,在USBHCDPipeRead内。

赞(0)
未经允许不得转载:TI中文支持网 » TM4C129的USB(host)如何连续接收不确定长度的数据?
分享到: 更多 (0)