问题描述
我使用 USB 设备 - STMicroelectronics 开发板。使用支持 USB 硬件的固件。它的工作原理是 USB 串口。
在主机 PC (win10 21H1) 上,我使用串行终端(“tera Term”)从我的设备获取数据。我使用标准的 windows usbserial 驱动程序。
我的设备正在发送数据。如果数据流很小(1-2-5 kByte/s) - 一切正常。但如果我加快速度(流量大约为 100 kByte/s 或更多) - 我会看到数据丢失。
我与 STMicroelectronics 支持人员进行了沟通。我们检查了问题。我们看到了 USB 与 USB 分析仪的通信。我们认为,不是窗户方面的问题。
此外,我使用自定义端口读取实用程序。数据完整性问题仍然存在。
在接收到的数据中,我看到丢失了 64 或 128... 64 字节的倍数。 64bytes - 在我的例子中的端点大小。查看链接数据了解更多信息。
我在 CubeMx 中创建了 USB_test 项目。并添加向PC发送数据的简单代码。如果先前的 CDC 传输完成,则循环发送数据。增加延迟是不可接受的:首先,它不是100%消除损失;其次,对信道带宽有不良影响。
//in main() function
uint8_t is_transmit = 0;
HAL_Delay(5000);
uint8_t Buf[2048];
uint8_t k = 48;
// fill the array with printable characters
for(uint16_t i=0; i<sizeof(Buf)-2; i++){
if(k > 100) {
k = 48;
}
Buf[i] = k++;
}
// array - is a one string line
Buf[sizeof(Buf)-2] = '\r';
Buf[sizeof(Buf)-1] = '\n';
while (1)
{
if(is_transmit == 0){
is_transmit = 1;
//HAL_Delay(1); // add delay on 1 ms reduces the likelihood of losses by an order of magnitude
CDC_Transmit_FS(Buf,sizeof(Buf));
}
}
在 CDC_TransmitCplt_FS() 中,我闪烁 is_transmit。
static int8_t CDC_TransmitCplt_FS(uint8_t *Buf,uint32_t *Len,uint8_t epnum)
{
---
extern uint8_t is_transmit;
is_transmit = 0;
---
return result;
}
来自 ST 支持通信和 USB 分析仪日志文件的信息。 https://drive.google.com/drive/folders/1CvTPfaFGmcFxD4V5zTvsVE6U26DNwG2v?usp=sharing
我如何解决这个问题?我需要从设备到主机的数据流速度为 500 kB/s 或更高。
最好的问候,安德烈。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)