有没有办法判断主机是否已读取下位机发送给它的数据
32F4 USB CDC Cube IDE的代码流程是CDC_Transmit_FSUSBD_CDC_TransmitPacketUSBD_LL_TransmitHAL_PCD_EP_TransmitUSB_WritePacket最后一个函数会向USB FIFO执行16次32位字传输。HAL_StatusTypeDef USB_WritePacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *src, uint8_t ch_ep_num, uint16_t len, uint8_t dma){uint32_t USBx_BASE = (uint32_t)USBx;uint32_t *pSrc = (uint32_t *)src;uint32_t count32b, i;if (dma == 0U){ count32b = ((uint32_t)len + 3U) / 4U; for (i = 0U; i < count32b; i++) { USBx_DFIFO((uint32_t)ch_ep_num) = *((__packed uint32_t *)pSrc); pSrc++; }}return HAL_OK;}我的问题是,有没有办法判断这些数据何时被读取。我进行了一些测试,发现调用CDC_Transmit_FS的速率限制约为10kHzCDC_Transmit_FS的最大数据包大小为800字节
我确人这两个限制都与系统相关,因此我将速率限制在1kHz,大小限制在256字节。各个函数有不同的返回代码,但似乎没有一个与是否可以继续发送更多数据相关。USB是这样“开环”的吗?
查询端点状态 还可以用用中断通知 推荐用传输完成中断来判断主机是否读取数据,避免FIFO溢出。
页:
[1]