硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2049|回复: 16
收起左侧

[USB] USB3300传输大量数据不完整

  [复制链接]

15

主题

53

回帖

98

积分

初级会员

积分
98
发表于 2024-8-27 08:36:41 | 显示全部楼层 |阅读模式

使用STM32 H7,F4驱动USB3300,虚拟串口来发送数据,用Cubemx配置的,然后将采集的数据用USB发送,串口助手下发指令,当接收到传输指令后,把采集到1s内的数据实时上传。问题是:当要传输的数据量超过300k字节时,每次32重新上电或者复位,开始传输,前几次传输会出现少很多数据,第一次能少一半,只有多传输几次后才会正常稳定。有没有懂的佬指导一下
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117555
QQ
发表于 2024-8-27 08:56:20 | 显示全部楼层
增加每次传输的时间间隔,看看正常不。
回复

使用道具 举报

20

主题

57

回帖

117

积分

初级会员

积分
117
发表于 2024-8-27 09:12:47 | 显示全部楼层
上电复位后delay几秒,等usb跟电脑连接稳定下来,再开始传
回复

使用道具 举报

15

主题

53

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2024-8-27 10:52:01 | 显示全部楼层
bigfanofiot 发表于 2024-8-27 09:12
上电复位后delay几秒,等usb跟电脑连接稳定下来,再开始传

试了,没用
回复

使用道具 举报

15

主题

53

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2024-8-27 10:54:21 | 显示全部楼层
eric2013 发表于 2024-8-27 08:56
增加每次传输的时间间隔,看看正常不。

单次,一次一次传输是正常的,但是我需要在1s内,连续的传输几十次,如果在每次传输加时间间隔会对1s的时间内数据的完整性有影响,比如原本1s内应该传输20次,在每次传输后加时间间隔,那1s内可能就只能传输15次之类的,影响了实时性跟数据完整性
回复

使用道具 举报

5

主题

22

回帖

37

积分

新手上路

积分
37
发表于 2024-8-27 17:17:03 | 显示全部楼层
ST的屎山?
回复

使用道具 举报

5

主题

22

回帖

37

积分

新手上路

积分
37
发表于 2024-8-27 17:18:35 | 显示全部楼层
可能·是ST的USB代码的问题,换USB协议栈吧.推荐CherryUSB
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117555
QQ
发表于 2024-8-28 09:05:22 | 显示全部楼层
海米阿门 发表于 2024-8-27 10:54
单次,一次一次传输是正常的,但是我需要在1s内,连续的传输几十次,如果在每次传输加时间间隔会对1s的时 ...

没记错的话,ST的协议栈是不是有个动态内存申请的地方,加大下试试,这个比较影响速度。
回复

使用道具 举报

15

主题

53

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2024-8-28 15:39:15 | 显示全部楼层
eric2013 发表于 2024-8-28 09:05
没记错的话,ST的协议栈是不是有个动态内存申请的地方,加大下试试,这个比较影响速度。

加很大了,没有用
回复

使用道具 举报

5

主题

23

回帖

38

积分

新手上路

积分
38
发表于 2024-9-22 15:14:47 | 显示全部楼层
楼主是啥问题  后来找到问题原因了吗
回复

使用道具 举报

15

主题

53

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2024-10-11 09:12:52 | 显示全部楼层
sofia 发表于 2024-9-22 15:14
楼主是啥问题  后来找到问题原因了吗

我感觉就是外部PHY芯片的原因,一般外挂PHY都是FPGA使用,32驱动外部高速PHY,稳定性较差,还有刚上电,PHY的晶振不是32给的,两个芯片时钟不同步也有可能,上电后多发几次才会趋于稳定
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117555
QQ
发表于 2024-10-12 08:34:01 | 显示全部楼层
海米阿门 发表于 2024-10-11 09:12
我感觉就是外部PHY芯片的原因,一般外挂PHY都是FPGA使用,32驱动外部高速PHY,稳定性较差,还有刚上电,P ...

”32驱动外部高速PHY,稳定性较差“

这个理解有偏差,STM32本身就是固化了各种IP核的FPGA。很多FPGA上的USB IP核还没有STM32的IP核完善。好点的,完善USB IP都是收费的。

实际是STM32外挂挺好用的。
回复

使用道具 举报

15

主题

53

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2024-10-12 09:05:43 | 显示全部楼层
eric2013 发表于 2024-10-12 08:34
”32驱动外部高速PHY,稳定性较差“

这个理解有偏差,STM32本身就是固化了各种IP核的FPGA。很多FPGA上 ...

这句话也是在群里有人这么说的,但是我的理解就是出现上电后首次传输大数据量的数据不正常可能就是时钟不同步
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117555
QQ
发表于 2024-10-13 00:17:01 | 显示全部楼层
海米阿门 发表于 2024-10-12 09:05
这句话也是在群里有人这么说的,但是我的理解就是出现上电后首次传输大数据量的数据不正常可能就是时钟不 ...

可以也试试别的协议栈。

我们H7-TOOL就是外置的PHY,没有这种问题。
回复

使用道具 举报

5

主题

23

回帖

38

积分

新手上路

积分
38
发表于 2024-10-13 12:59:32 | 显示全部楼层
海米阿门 发表于 2024-10-11 09:12
我感觉就是外部PHY芯片的原因,一般外挂PHY都是FPGA使用,32驱动外部高速PHY,稳定性较差,还有刚上电,P ...

我估计是硬件这块不稳定其他?  我插电脑能识别,但插开发板都识别不到,后面不知道怎么搞了一下突然间又可以识别
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-10-23 12:10:44 | 显示全部楼层
遇到了同样的问题,硬件使用H723+USB3300,软件用HAL库,USB配置为HS Device,CDC协议;
HAL的库函数,uint8_t CDC_Transmit_HS(uint8_t* Buf, uint16_t Len),最大长度不超过65536;
我使用40960的包长度, 收到命令后刚开始传输的几包数据总是有丢失,发过两三次后,上位机的数据包接收才正常。
后面从某宝买了个开源的USB分析仪,发现分析仪是能够完全接收到数据的,但是到了上位机虚拟串口那里就不行了,
更换了好几个串口助手,都有这个问题,怀疑是ST的VCP驱动哪里有问题,当然也不排除串口助手的性能问题导致;
无奈之下,智能减少每次发送的包长度,降为4096,分10包发送,这样就不会有数据丢失问题;
但是这样做的问题是,最大传输速度大大下降了。
目前这个问题还没解决好,等有时间再仔细分析一下问题,或者更换其他驱动试试。

回复

使用道具 举报

15

主题

53

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2025-1-10 10:50:01 | 显示全部楼层
netbeans2006 发表于 2024-10-23 12:10
遇到了同样的问题,硬件使用H723+USB3300,软件用HAL库,USB配置为HS Device,CDC协议;
HAL的库函数,ui ...

哥们,咋样,解决了没,我没找到啥好的方法,uint8_t CDC_Transmit_HS(uint8_t* Buf, uint16_t Len),最大长度不超过65536;这个函数我改成uint8_t CDC_Transmit_HS(uint8_t* Buf, uint32_t Len)也依然存在数据包过大,收到指令后开始传输前几次会丢包,多发几次才正常
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 10:33 , Processed in 0.050032 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表