当前位置: 首页 > news >正文

USB转多串口设备固定串口号

1、概述

使用USB转串口设备或多个USB转串口设备级联扩展多串口时,会经常遇到USB设备插拔顺序或插入的USB主机口位置不固定,系统重新开机等操作导致设备对应串口号无法固定,影响产品使用。

针对如上应用问题我司提供内置USB Serial Number(USB串行序列号)的USB转串口芯片,可固定设备对应串口号,配合沁恒提供的专用串口号批量管理工具“ComPortManager”可轻松实现多设备的串口管理,可对指定设备或所有设备进行串口号一键管理,结合芯片内置USB Serial Number的特性,一次修改,永久生效。除此之外,还支持驱动安装时分配固定的串口号。

常用USB转多串口芯片参数表:

型号

CH347T

CH344Q

CH9344L

CH348L

CH348Q

USB

480M高速

480M高速

480M高速

480M高速

480M高速

串口数量

2

4

3

8

8

最高波特率

7.5Mbps

6Mbps

12Mbps

6Mbps

6Mbps

IO电压

3.3V

3.3V

3.3V/2.5V/1.8V

3.3V/2.5V/1.8V

3.3V

RS485控制

封装

TSSOP20

LQFP48

LQFP48

LQFP100

LQFP48

型号

CH342F/K

CH9103M

CH344L

CH9104L

USB

全速

全速

全速

全速

串口数量

2

2

4

4

最高波特率

3Mbps

3Mbps

230400bps

6Mbps

IO电压

5V/3.3V/

2.5V/1.8V

5V/3.3V/

2.5V/1.8V

3.3V

3.3V

RS485控制

CH342F支持

封装

QFN24/ESSOP10

QFN40

LQFP48

LQFP48

2、方案特点

  • 支持Windows/Linux/Android/macOS等操作系统。
  • 芯片内置Unique ID,可实现操作系统上串口号固定。
  • 提供ComPortManager专用串口号批量管理工具,轻松一键管理。
  • 支持驱动程序安装分配指定的串口号。
  • 支持USB设备VID/PID/字符串等内容配置。

3、应用框图

4、应用场景

5、ComPortManager使用说明

ComPortManager是一款Windows系统上用于批量管理计算机串口设备COM口号的工具软件,该工具支持单独和批量修改系统下串口设备的端口号,支持USB转串口、PCI(e)转串口、BLE/以太网转串口等设备类型,支持主动扫描设备与沁恒串口设备的热插拔检测。串口更改支持2种方式:串口号依次递增或根据设备在系统下的物理位置进行分配。

串口号依次递增方式下对于每个多串口设备,更改成功后其第一个物理串口对应“起始串口号”,然后依次增加。如以下界面展示,目标设备为USB转4串口芯片CH344,指定起始串口号为COM10,则修改成功后与物理串口的匹配关系:UART0—>COM10、UART1—>COM11、UART2—>COM12、UART3—>COM13。

  • 串口设备类型选择:USB转串口/PCI(e)转串口/BLE与以太网转串口/所有类型
  • 枚举串口:主动搜索当前系统所有串口设备
  • 串口卡排列顺序:按位置排列/按串口数量排列
  • 串口设备信息栏
  • 串口设备对应的COM口详细信息栏
  • 需要更改的目标设备
  • 指定串口号更改方式:依次递增/根据HUB位置的串口号设定更改
  • 更改串口号:更改过程可能会与其他原有COM口冲突,需注意提示信息
  • 软件信息输出窗口
  • 设备详细信息栏

6、Windows系统驱动安装分配指定串口号

部分芯片型号支持驱动安装前预先指定目标COM口编号,此方式支持芯片型号:CH342/CH343/CH344/CH347/CH9101/CH9102/CH9103/CH9104等。

对于USB转串口设备使用VID和PID以及设备路径(Location ID)可锁定该设备。此方式在驱动安装前需要修改与驱动配合使用的安装注册表文件“CH344&CH343&CH342PortCfg.reg”,不同计算机上配置可能不同。

设备路径(Location ID)可以使用工具软件“ComPortManager”或者“USBVIEW”确定。如下截图所示:

6.1 串口号分配计算公式

公式:ComNo = (U - 1) * K * S + (D - 1) * S + BaseCom

参数

说明

ComNo

设备管理器目标COM口编号

U

上游HUB端口号

K

每个HUB的端口数量

S

USB转串口芯片对应的串口数量

D

下游HUB端口号

BaseCom

串口计算初始COM口编号

6.2 注册表设置

打开注册表文件“CH344&CH343&CH342PortCfg.reg”,如下所示:

以CH344为例,图中序号参数含义具体如下:

字段

说明

PNCFG

USB转串口芯片的VID和PID

标识1

配置使能:1字节,bit7为1时使能

标识2

上游HUB端口位置掩码:2字节。

bit15:bit0-14的全局使能,为1时使能。

bit0-14:每个比特位分别对应HUB Port1-15,为1时使能,如bit0为1时使能Port1,bit1为1时使能Port2。

仅当bit15和相应bit位均有效时,(U - 1) * K * S参与计算,否则该表项等于0

标识3

参数K:每个HUB的端口数量

标识4

下游HUB端口位置掩码:2字节。

bit15:bit0-14的全局使能,为1时使能。

bit0-14:每个比特位分别对应HUB Port1-15,为1时使能,如bit0为1时使能Port1,bit1为1时使能Port2,仅当bit15和相应bit位均有效时,(D - 1) * S参与计算,否则该表项等于0

标识5

参数S:USB转串口芯片对应的串口数量

标识6

参数BaseCom:串口计算初始COM口编号

6.3 导入注册表,安装串口驱动

安装驱动前,需按照如上公式计算修改注册表文件,并导入注册表至系统。使用ComPortManager工具可查看公式中参数U/参数K/参数S/参数D,以及验证公式计算分配的串口号和实际分配的串口是否一致。

应用举例1:

计算机上连接HUB,HUB下任一USB口插入CH344,如下图:

如软件所示,上游HUB端口号U=2,下游HUB端口号D=1,代入计算分配串口号公式可得ComNo=17,与设备管理器生成端口号一致。

计算公式:ComNo = (2-1)*4*4 + (1-1)*4 + 1 = 17

若修改注册表里的参数串口起始号BaseCom为4,把CH344插入下游HUB第二个口D=2,代入计算分配串口号公式可得ComNo=24。

计算公式:ComNo = (2-1)*4*4 + (2-1)*4 + 4 = 24

应用举例2:

不经过HUB直接将CH344插入计算机上的第3个USB口,代入计算分配串口号公式去可得ComNo=12。

计算公式:ComNo = 0 + (3-1)*4 + 4 = 12

7、Linux系统驱动安装分配指定串口号

Linux系统下的串口名称分配和硬件的上电顺序有关,如果是开机启动或者接在同一HUB下面,则由系统枚举各USB设备的顺序相关。以下介绍通过udev工具实现为USB转串口设备固定串口名称的实现原理与方法,该方法也适用于其他USB设备驱动。

udev运行在用户态,脱离驱动层的关联,基于这种设计实现,用户可以通过编写规则来动态删除和修改/dev下的设备文件,任意命名设备。除了设备重命名外,还拥有修改设备访问权限的功能,可以实现在普通用户模式下操作/dev下系统设备,无需root模式下进行。

每当udevd收到uevent事件时就会去匹配规则,匹配成功后执行规则对应的操作。用户自定义规则放到/etc/udev/rules.d/目录下,以rules为扩展名。

通过udevadm命令(udevadm info -a -n /dev/ttyCH343USB0)或者sysfs(ls -la /sys/class/tty)可以查看USB串口芯片详细信息,如下以双串口芯片CH342举例:

规则匹配主要基于几个字段:

KERNELS:kernel对设备的命名,此处为设备路径(Location ID)

ATTR/ATTRS:设备的属性,如idProduct/idVendor

SUBSYSTEMS:设备类型

ACTION:设备触发的操作,如add/change/remove

根据设备信息可在/etc/udev/rules.d/创建自定义规则usb-ch342.rules,内容如下:

注:DRIVERS信息为设备加载的驱动名,CH342支持VCP厂商驱动和CDC驱动类型,默认建议使用VCP驱动,DRIVERS为“ch343”,CDC驱动下DRIVERS为“cdc_acm”。

如上规则使用了设备的VID,PID与USB接口号。(每个物理串口分别对应一个USB接口)然后通过命令:udevadm control --reload-rules && udevadm trigger让规则立即生效或重启后自动生效。

当CH342设备接入后即可在/dev下查看到SYMLINK中命名的ttyGPS与ttyBLE串口设备。若需要区分多个CH342设备,可结合KERNELS字段,即设备路径(Location ID)进行区分。

相关文章:

  • 七牛云 OSS 文件上传demo
  • 我的VS2013版本
  • .NET DataGridView数据绑定说明
  • 商业化广告--体系学习--1
  • apk反编译和重新打包流程
  • Spring Security -- 前后端分离时的安全处理方案
  • 使用HttpServlet和@WebServlet注解
  • Arthas使用指北——命令、原理及案例
  • 简历撰写——Java与.NET(当年毕业生版本)
  • zookeeper知识点扫盲
  • UE5学习笔记 判断物体是否在相机视野内
  • 移动安全实战分享
  • Springboot操作mongodb的两种方法:MongoTemplate和MongoRepository
  • 流畅的Python读书笔记-第九章-符合Python风格的对象
  • S0011基于51单片机DS18B20温控风扇仿真设计
  • [PHP内核探索]PHP中的哈希表
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Angular 4.x 动态创建组件
  • JavaScript中的对象个人分享
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • MYSQL 的 IF 函数
  • SpringBoot几种定时任务的实现方式
  • vue学习系列(二)vue-cli
  • 浮现式设计
  • 给新手的新浪微博 SDK 集成教程【一】
  • 官方解决所有 npm 全局安装权限问题
  • 每天10道Java面试题,跟我走,offer有!
  • 突破自己的技术思维
  • 赢得Docker挑战最佳实践
  • 你对linux中grep命令知道多少?
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​什么是bug?bug的源头在哪里?
  • ###C语言程序设计-----C语言学习(6)#
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • $.ajax()
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (9)目标检测_SSD的原理
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (数据结构)顺序表的定义
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转)原始图像数据和PDF中的图像数据
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • @Repository 注解
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [acm算法学习] 后缀数组SA
  • [AIGC] Redis基础命令集详细介绍
  • [C/C++] C/C++中数字与字符串之间的转换
  • [C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数