硬汉嵌入式论坛

 找回密码
 立即注册
12
返回列表 发新帖
收起左侧

[USB] 分享基于安富莱ThreadX全家桶2.0版本实现的USBX CDC ACM+PPP连接服务器

  [复制链接]

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2025-1-17 15:43:21 | 显示全部楼层
咦,回复怎么不见了。。。
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120427
QQ
发表于 2025-1-18 08:33:06 | 显示全部楼层
zzfei 发表于 2025-1-17 15:43
咦,回复怎么不见了。。。

可见的,是现在论坛发帖需要审核,审核后就可以了。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2025-4-30 14:02:04 | 显示全部楼层
感谢分享
回复

使用道具 举报

2

主题

78

回帖

89

积分

初级会员

积分
89
 楼主| 发表于 2025-6-4 17:09:44 | 显示全部楼层
zzfei 发表于 2025-1-17 15:41
18年那会儿开始搞GD32+usb+4G模块上传图片,用AT指令发送的方式,速率一直就在50-80KB左右,无论用什么方法 ...

我问过移远技术,EC800M这种CAT1模块,内部RAM缓存是10K左右,确实不大。所以速率一般,还行吧。
回复

使用道具 举报

2

主题

78

回帖

89

积分

初级会员

积分
89
 楼主| 发表于 2025-6-4 17:11:52 | 显示全部楼层
USBX文档

USBX.pdf

6.13 MB, 下载次数: 2

回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2025-8-27 13:10:14 | 显示全部楼层
你好,有关 [USB] 分享基于安富莱ThreadX全家桶2.0版本实现的USBX CDC ACM+PPP连接服务器 这个教程的STM端代码能重新发下吗,网盘失效了
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2025-8-27 13:10:53 | 显示全部楼层
你好,有关 [USB] 分享基于安富莱ThreadX全家桶2.0版本实现的USBX CDC ACM+PPP连接服务器 这个教程的STM端代码能重新发下吗,网盘失效了
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2025-8-27 13:14:16 | 显示全部楼层
网盘链接可以重新贴一下吗
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120427
QQ
发表于 2025-8-28 13:34:38 | 显示全部楼层
YGMZ 发表于 2025-8-27 13:14
网盘链接可以重新贴一下吗

楼主位末尾的附件就是网盘的原始内容
回复

使用道具 举报

2

主题

78

回帖

89

积分

初级会员

积分
89
 楼主| 发表于 3 天前 | 显示全部楼层
2026年1月6日更新:
时隔一年多,这几天偶然看到论坛有人发帖说ECM驱动EC800Z模块成功,所以重新研究了一下,测试结果如下。(感谢坛友zhongdinggen的分享)
之前模板存在不完善的地方,ACM接口怎么选择的问题已经解决。
1.USB主机会枚举USB设备:拿4G模组举例,4G模组是复合设备,像ACM接口有三个,那么如果用户注册了CDC ACM类,那么USB枚举回调函数会调用三次,用户可以得到三个ACM接口。4G模组的USB描述符文档中给出了每个描述符的接口编号是多少,用户根据接口编号bInterfaceNumber和接口类型代码bInterfaceClass就可以找到三个ACM接口中需要的那个接口,然后赋值给全局变量USB CDC实例即可(UX_HOST_CLASS_CDC_ACM)。像使用复合设备都可以使用这种方法,比如说注册ACM类+ECM类。ACM虚拟串口可以配置4G模组,ECM接口专门用来联网。
2.STM32F4支持的USB端点数量是8个。H7是16个。U5是12个。USBX和cherryusb两个库实现机制完全不同,USBX是先全部枚举出所有的设备类型,如果复合设备种类超过MCU的端点数量就会报错,无法进行下一步。cherryusb是注册了什么类型的实例就枚举什么类型的示例。因此cherryusb特别适合用于MCU这种USB端点数量少的主控。但是也不能说USBX是垃圾,只是策略不同,USBX这样做的原因应该是为了安全考虑,毕竟USBX的安全等级确实是最高的,反而cherryusb通过了什么严苛的安全测试我不清楚。而且USBX这种全家桶方案也挺不错的。U5和H7现在也不是特别贵。
3.上传服务器网速测试(上行带宽)。网速和信号强度、网络拥堵程度有关。
一、USB 2.0 FS + CDC ACM + PPP拨号 + MDK Os级别优化
EC800N模块,CDC ACM + PPP拨号,Os优化。
10K 100K 500K 1M字节上传服务器网速测试(上行带宽)。
数据发送时间: 386 ms。26K每秒。
数据发送时间: 1431 ms。70K每秒。
数据发送时间: 4916 ms。102K每秒。
数据发送时间: 11409 ms。88K每秒。

EC800K模块,CDC ACM + PPP拨号,Os优化。
10K 100K 500K 1M字节上传服务器网速测试(上行带宽)。
数据发送时间: 181 ms。55K每秒。
数据发送时间: 958 ms。104K每秒。
数据发送时间: 3650 ms。137K每秒。
数据发送时间: 8221 ms。121K每秒。

EC800Z模块,CDC ACM + PPP拨号,Os优化。
10K 100K 500K 1M字节上传服务器网速测试(上行带宽)。
数据发送时间: 314 ms。32K每秒。
数据发送时间: 1317 ms。76K每秒。
数据发送时间: 3976 ms。126K每秒。
数据发送时间: 9824 ms。102K每秒。

EC20模块、CDC ACM + PPP拨号、Os优化。
10K 100K 500K 1M字节上传服务器网速测试(上行带宽)
数据发送时间: 201ms。50K每秒。
数据发送时间: 1268 ms。79K每秒。
数据发送时间: 5562 ms。90K每秒。
数据发送时间: 10078 ms。99K每秒。

二、USB 2.0 FS + CDC ECM + MDK Os级别优化
EC801E模块、CDC ECM、Os优化。
10K 100K 500K 1M字节上传服务器网速测试(上行带宽)。
数据发送时间: 246 ms。40K每秒。
数据发送时间: 863 ms。116K每秒。
数据发送时间: 4369 ms。114K每秒。
数据发送时间: 8471 ms。118K每秒。

EC800Z模块、CDC ECM、Os优化。
10K 100K 500K 1M字节上传服务器网速测试(上行带宽)。
数据发送时间: 1 ms。
数据发送时间: 1177 ms。85K每秒。
数据发送时间: 4454 ms。112K每秒。
数据发送时间: 8560 ms。117K每秒。

EC20模块、CDC ECM、Os优化。
10K 100K 500K 1M字节上传服务器网速测试(上行带宽)。
数据发送时间: 107-250 ms。40K-93K每秒。
数据发送时间: 903-1262 ms。79K-110K每秒。
数据发送时间: 2034-4015 ms。124K-245K每秒。
数据发送时间: 4966-10194 ms。98K-201K每秒。

4.测试结论:
4.1 开启了Os级别优化后,网速略有提升。
4.2 在USB全速12M/s速率下,ACM和ECM网速差距不是很大,同时CAT1模块和CAT4模块的网速差距也不是很大。EC20是CAT4速率,按理说网速会非常快,但是受制于USB接口速率,最大网速也就250K不到,网速波动很大,低的时候和CAT1一样。对于CAT4模块建议使用USB 2.0 HS接口。
4.3 STM32目前内置HS PHY的型号不多,可以看看STM32U595、STM32H7R7、STM32U6等型号。对于大部分MCU场合USB FS接口配合CAT1模块就够用了,发送500K-1M的数据速率基本都能达到100K/秒,完全够用了。对于ACM和ECM的选择,从网速看也没有什么大的区别。CAT1设备,网速最快反而是EC800K模组的ACM+PPP拨号,达到了137K每秒。ECM并没有什么优势。同时虚拟串口还可以配置4G模组,ECM还需要单独用一个串口配置。
4.4 对于ECM驱动4G模组还会面临一个很大的问题。市面上在FS速率下支持ECM驱动的CAT1模组目前只有一个平台(移芯718)。移芯716、ASR1602、翱捷1606、展锐8850等等都是不支持的。像EC801E使用的是移芯716平台,在网速测试中会频繁断开连接、不断的枚举USB设备,这是模组的问题。而EC800Z使用的是移芯718平台升级到最新固件后很稳定。也就是说目前能买到的、价格便宜的只有EC800Z。同时EC800Z还支持PPP拨号,而EC801E并不支持PPP拨号。
4.5 综合以上,笔者认为ECM驱动(USBX和cherryusb)目前不适合使用,在HS PHY没有大规模内置前,CAT1模组没有大量支持FS ECM时,当前的ECM驱动并不成熟。反倒是cherryusb的RNDIS驱动、或者是USBX的虚拟串口驱动确实很友好。从兼容性角度看串口+PPP拨号最优,但是硬件串口的速率着实比较低,我实测只有30K每秒,硬汉老师说可以达到50K每秒。虚拟串口的网速起码是200%提升。但是使用USB需要测试稳定性和可靠性。对于普通的设备,硬件串口+PPP拨号就是最优解。再高就得是虚拟串口或者RNDIS了。
4.6 最新版本的ACM和ECM模板我放到下面。
回复

使用道具 举报

2

主题

78

回帖

89

积分

初级会员

积分
89
 楼主| 发表于 3 天前 | 显示全部楼层
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120427
QQ
发表于 前天 00:15 | 显示全部楼层
水水水木木木 发表于 2026-1-6 17:50
2026年1月6日更新:
时隔一年多,这几天偶然看到论坛有人发帖说ECM驱动EC800Z模块成功,所以重新研究了一 ...

谢谢分享,明天我把新版程序更新到楼主位。
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120427
QQ
发表于 前天 00:44 | 显示全部楼层
水水水木木木 发表于 2026-1-6 18:04
链接: https://pan.baidu.com/s/1Uxr8nLKzI5AUpmSS_8sWVw 提取码: 1234

感谢分享


ThreadX-CDC-ACM-26.01.06.zip (66.97MB)
ThreadX-CDC-ECM-26.01.06.zip (66.97MB)
回复

使用道具 举报

2

主题

78

回帖

89

积分

初级会员

积分
89
 楼主| 发表于 前天 09:55 | 显示全部楼层
补充一下使用windows电脑,USB2.0 HS速率下使用RNDIS驱动4G模块的网速。
EC800K
下载6.9Mbps 900K每秒
上传1Mbps 100K每秒

EC801E
下载6.8Mbps 900K每秒
上传1Mbps 100K每秒

EC800Z
下载6.8Mbps 900K每秒
上传1Mbps 100K每秒

EC20插上电脑一直重启,有点问题所以测不了,不过网络肯定比上面的这些快得多。

所以可得出结论:
对于4G CAT1设备来说,ACM+PPP、ECM、RNDIS三种驱动,网速基本没有区别!上传网速都是100K字节/秒。
我电脑都是USB3.0接口,向下兼容USB2.0 HS速率。因此FS和HS速率都满足CAT1模组的需求,网速应该是被CAT1模组限制了,模组本身的水平就这样!
对于下载速率,一般来说MCU端都是上传数据到服务器,很少用到下载速率,固件更新、图片下载等特殊场合才用得到,没啥意义。
回复

使用道具 举报

4

主题

1481

回帖

1493

积分

至尊会员

积分
1493
发表于 前天 11:29 | 显示全部楼层
STM32H7S7的内置USB HS, 应该还好一点,有谁试过的吗?    水水水木木木网友的分享非常给力,
回复

使用道具 举报

2

主题

78

回帖

89

积分

初级会员

积分
89
 楼主| 发表于 前天 17:47 | 显示全部楼层
morning_enr6U 发表于 2026-1-7 11:29
STM32H7S7的内置USB HS, 应该还好一点,有谁试过的吗?    水水水木木木网友的分享非常给力,

没意义了。看最新的测试结果,HS和FS接口对于CAT1模组来说,网速基本没区别。CAT4模组的话应该有差距!
回复

使用道具 举报

14

主题

50

回帖

92

积分

初级会员

积分
92
发表于 前天 21:18 | 显示全部楼层
我有项目是直接通过串口和EC800N通信的,波特率921600。你们这个USB + CDC ACM + PPP拨号 这个怎么连接,(USB   CDC ACM)和硬件串口 与 EC800N通信有什么区别?
回复

使用道具 举报

2

主题

78

回帖

89

积分

初级会员

积分
89
 楼主| 发表于 昨天 11:40 | 显示全部楼层
walk 发表于 2026-1-7 21:18
我有项目是直接通过串口和EC800N通信的,波特率921600。你们这个USB + CDC ACM + PPP拨号 这个怎么连接,( ...

你这种就是硬件串口+PPP,我也测试过网速,30K字节每秒,据说可以干到50K,我没实现。此帖的方式是用USB虚拟一个串口出来,用这个虚拟的串口来实现PPP拨号,和使用硬件串口一样的道理。在USB协议栈中CDC ACM类就是虚拟串口。虚拟串口和硬件串口使用时没有本质区别,但是USB速率高,所以带来的优势就是网速快!实测可以达到100K以上。其他没啥区别。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-9 16:43 , Processed in 0.070897 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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