使用免驱CDC串口的注意事项-<学习收录>

以前使用USB串口时,往往会有CDC驱动、HID驱动、VCP驱动几种,现找到一篇对此介绍的文章,特此记录进行学习,也在后期方便参考其具体使用性。

转载于CDC串口-从认识到认知 - USB技术论坛 - 21ic电子技术开发论坛icon-default.png?t=LA92https://bbs.21ic.com/icview-3179084-1-1.html

正文:

玩转嵌入式多年,很多应用场合需要使用USB转串口,根据设备类型主要分为USB VCP串口、USB转CDC串口、HID转串口。USB HID从Win2000版本起内置驱动,是真正意义上的免驱,CDC串口驱动从Win10系统版本才开始内置,因CDC协议的用途定位,串口功能较其他方式并不完整。VCP串口驱动只需安装一次也可以联网自动安装,且有部分操作系统会内置厂商VCP驱动。

根据实际使用情况,做了下对比汇总:

对比项

对比功能

对比驱动类

CDC-ACM

HID

VCP

串口功能

串口收发功能

DTR/DSR/DCD/RI

RTS/CTS

X

硬件流控功能

X

软件流控功能

X

USB PnP和电源管理

串口未关闭时插拔USB可正常工作

X[1]

系统睡眠唤醒后正常工作

X[1]

系统休眠唤醒后正常工作

X[1]

驱动扩展功能

支持串口功能以外的功能扩展

X

驱动安装方式

Windows

Win10及以上内置

内置

首次需安装/联网自动安装

Linux

部分系统内置

内置

部分系统内置

macOS

内置

内置

部分系统内置

Android

部分系统内置

内置

部分系统内置

串口应用软件

串口软件兼容程度

有部分功能不兼容

不兼容

兼容

协议规范

公开或私有协议

CDC-ACM规范

私有

私有

[1] 微软官方称:在win10中,重写了CDC驱动,应该会有所改善。

从实测情况来看,不难看出为何主流USB转串口厂商提供的均是VCP串口应用方式。

这里提到的VCP串口主要是指使用厂商专用USB转串口驱动和通信协议实现的串口,该方式也最接近16C450/16C550等原生串口。HID转串口USB传输速度没有CDC和VCP快,不适合较高波特率通讯,且不兼容串口应用软件。CDC转串口因协议限制和不同系统驱动的差异(且无法立刻更新),使用时相比原生串口会存在一些区别。

一、CDC串口介绍

记得之前看到有些手机连接电脑时,电脑安装驱动后设备管理器里会多出来一个串口,出于好奇,使用usbview工具看了下,原来是手机USB模拟的CDC-ACM串口设备,主要用于设备调试和共享上网,不少GPS、4G通讯模块预留的USB接口实际上也是CDC串口。

CDC-ACM,是USB ORG组织在1999年基于通信类设备推出的一个USB通用设备类别,事实上,绝大多数使用CDC串口的USB应用,并不处理串口操作,仅借助于CDC串口驱动实现USB设备和USB主机之间的数据透传。

CDC串口的主要特点:
(1)无需为产品开发专用的USB驱动程序,但无法达到HID类设备的在所有系统上面的免驱效果。目前已有不少系统已集成CDC-ACM驱动,且驱动也在不断完善,如在WIN8.1前需要驱动安装包还需要做驱动包的数字签名,因为系统只集成了SYS;如WIN10系统集成了微软重新编写的CDC-ACM驱动。
(2)固件开发容易,CDC-ACM类规范内容简单,数据上下传内容为透传方式。
(3)可以实现部分串口功能。CDC-ACM类规范为兼容早期的Modem外设,还增加了部分原生串口(16C450/550)的类请求,如串口参数设置和DTR/DSR的控制,但串口软件中较常用的CTS/RTS不支持,且不同操作系统下实现的CDC类驱动,还存在CTS状态不变且不可更改的差异。如需实现完整的串口功能,还是需要使用专用的串口驱动。

 

因各操作系统内置的CDC驱动也在不断更新维护,在产品应用中,也难免遇到各种影响串口正常使用的情况。

CDC类分为以下模型:USB电话业务(PSTN、POTS)模型,USB ISDN模型和USB网络模型。PSTN协议规范涉及3种控制模型:

l  Direct Line Control Model

l  Abstract Control Model(ACM)

l  Telephone Control Model

1.png

通常提到的CDC串口属于PSTN(Public Switched Telephone Network)下的Abstract Control Model,简称CDC ACM。

基于CDC ACM协议实现的USB转硬件串口,数据接口使用CDC DATA完成串口数据的收发,控制接口用于完成串口的参数配置等操作。规范支持的命令请求如下:

2.png

和串口操作相关的命令如上所示。通过其协议可看出协议不包含串口硬件流控命令和CTS状态上报等功能。

 

二、CDC串口应用总结

基于CDC-ACM协议开发纯USB传输应用还是十分方便的,工程师只需要关注USB设备本身的开发工作,驱动软件甚至是应用软件均不用开发。

基于其实现硬件串口功能时,会受限于协议规范和系统驱动。结合之前的项目应用经验以及实际测试情况总结了以下几点注意事项:

 

Windows系统

l  串口未关闭时,插拔一次USB,后续串口应用软件无法再打开串口。使用时建议先关闭串口再进行插拔。

l  串口RTS(Request To Send)信号不能单独控制

l  串口CTS(Clear To Send)信号不支持

l  串口不支持软件和硬件流控

l  系统睡眠休眠行为有概率导致串口接收停止

Linux系统

l  串口Modem输入信号CTS/DSR/RI/DCD均不支持

l  串口帧错误/校验错误/溢出错误等无法上报

l  串口不支持软件和硬件流控

mac OS系统

l  串口Modem输入信号CTS/DSR/RI/DCD均不支持

l  串口帧错误/校验错误/溢出错误等无法上报

l  串口不支持软件和硬件流控

 

工程师在实际应用时可以结合如上注意事项,针对不同的应用场景有所筛选。此外,因为使用的驱动为操作系统自带,由操作系统厂商维护,如Windows系统和驱动由微软维护,macOS系统和驱动由Apple维护,此驱动只会随系统更新,很慢。如下一些应用,只能使用VCP串口。

l  需要使用RTS输出功能进行IO控制,如MCU下载电路

l  需要使用CTS输入功能用作IO输入检测,如串口读卡器使用该信号进行设备在线检测

l  需要使用RTS/CTS硬件流控,如串口通讯双方收发速度不匹配时

l  需要进行大数据量连续通讯,如高波特率串口下载,Linux控制台文件或日志传输

<think>嗯,用户想把Flink升级到1.19.2,然后在StreamPark里配置pom依赖。首先,我需要看看他提供的那些依赖项是否兼容新版本。比如,原来的flink-sql-connector-kafka和flink-connector-jdbc都是1.16.2版本的,现在Flink升级到1.19.2,这些依赖的版本应该也要跟着升级到对应的1.19.x版本。可能用户没注意到这点,直接用了旧版本的connector,这会导致兼容性问题。 接下来是kafka-clients的版本,用户用的是2.4.0。Flink 1.19通常会和较新的Kafka客户端兼容,可能需要升级到更高版本,比如2.8.x或者3.x,但需要查官方文档确认。另外,mysql-connector-java的8.0.30应该没问题,但最好确认是否有更新的版本,比如8.0.33,可能存在安全或性能改进。 然后是flink-sql-connector-mysql-cdc,用户用的是com.ververica的2.4.0。这个对应的Flink版本可能需要升级到支持1.19.2的版本,可能需要查看Ververica的文档,看看哪个版本的MySQL CDC connector兼容Flink 1.19.2,可能需要升级到2.5.x或更高。 还有Doris的connector,用户用的是flink-doris-connector-1.16的1.4.0。这里明显artifactId里指定了1.16,可能对应Flink 1.16,所以升级到Flink 1.19后,需要找对应的flink-doris-connector-1.19,或者最新版本是否支持。可能需要到Apache Doris的官网查看对应的兼容版本,或者是否有通用版本。 用户还提到使用公司内部仓库,所以需要指导他如何检查这些依赖是否存在。通常公司内部仓库可能有类似Nexus或Artifactory的界面,可以通过groupId和artifactId搜索,或者用Maven命令尝试下载,比如mvn dependency:get -Dartifact=...,或者直接在IDE中查看依赖是否解析成功。 另外,需要注意依赖的groupId是否有变化。比如,flink-sql-connector-kafka可能在Flink 1.19.2中的groupId还是org.apache.flink,但有些connector可能调整过。比如Doris的connector可能在新的Flink版本中是否换了groupId或者artifactId的结构。 总结下来,用户需要逐一检查每个依赖的版本是否与Flink 1.19.2兼容,并根据官方文档或仓库中的可用版本进行升级。同时,对于公司内部仓库,如果没有某些依赖,可能需要手动上传或配置代理仓库。</think>根据 Flink 1.19.2 版本要求,建议按以下步骤调整依赖: ### 一、依赖版本适配建议 1. **Flink 核心依赖** ```xml <!-- 所有 Flink 相关依赖需统一版本 --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-sql-connector-kafka</artifactId> <version>1.19.2</version> <!-- 原1.16.2 --> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-jdbc</artifactId> <version>1.19.2</version> <!-- 原1.16.2 --> </dependency> ``` 2. **Kafka 适配** ```xml <!-- 建议与 Flink 官方推荐的 Kafka 客户端版本对齐 --> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>3.5.1</version> <!-- 原2.4.0 --> </dependency> ``` 3. **MySQL CDC 升级** ```xml <!-- Ververica 已移交社区,需注意命名变化 --> <dependency> <groupId>com.ververica</groupId> <artifactId>flink-sql-connector-mysql-cdc</artifactId> <version>2.4.2</version> <!-- 确认是否支持1.19.2 --> </dependency> ``` 4. **Doris 连接器** ```xml <!-- 需匹配 Flink 1.19 的专用版本 --> <dependency> <groupId>org.apache.doris</groupId> <artifactId>flink-doris-connector-1.19</artifactId> <version>1.4.0</version> <!-- 原1.16后缀 --> </dependency> ``` ### 二、公司仓库检查方法 1. **Maven 命令行探测** 执行命令检查是否存在: ```shell mvn dependency:get -Dartifact=org.apache.flink:flink-sql-connector-kafka:1.19.2 -DremoteRepositories=公司仓库地址 ``` 2. **IDE 集成检查** - 在 IntelliJ 的 Maven 视图中输入 GroupID 后自动提示可用版本 - 查看依赖是否出现红色波浪线(表示未找到) 3. **Nexus 仓库搜索** 访问公司 Nexus 仓库的 Web 界面(通常是 `http://nexus.yourcompany.com`): - 在搜索栏输入 `org.apache.flink` 或 `com.ververica` - 筛选对应 artifactId 和版本号 ### 三、特殊注意事项 1. **依赖兼容矩阵** | 组件 | 原版本 | 推荐版本 | 验证方式 | |---|---|---|---| | Flink | 1.16.2 | 1.19.2 | [官方文档](https://nightlies.apache.org/flink/flink-docs-release-1.19/) | | Kafka | 2.4.0 | 3.5.1 | [Flink Connector 兼容表](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/connectors/table/kafka/) | | Doris | 1.16适配版 | 1.19适配版 | [Doris 官网](https://doris.apache.org/zh-CN/docs/dev/ecosystem/flink-doris-connector) | 2. **版本冲突处理** - 使用 `mvn dependency:tree` 分析依赖树 - 若出现版本冲突,可通过 `<exclusions>` 标签排除旧版本 建议先搭建测试环境进行验证,确认所有功能正常后再部署到生产环境。如果公司仓库缺少某些依赖,可联系基础架构团队上传对应组件。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值