STM32 USB CDC 一些数据在 Win 10 中丢失

问题描述

我使用 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 (将#修改为@)