USB转串口那些事儿—如何固定设备串口号

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

Windows系统固定串口号

在Windows系统上对于此需求推荐使用内置USB Serial Number(USB串行序列号)的USB转串口芯片,可实现同一物理设备在系统上分配的串口号固定不改变。原理如下:

Windows USB虚拟串口驱动的COM口分配一般均遵循以下原则:

  1. 针对USB描述符中内置USB Serial Number(USB串行序列号)的USB串口设备如CH343,默认系统会根据设备内置的SN编号,为其分配固定的COM口号,此时可以实现设备连接不同USB口时COM口均固定不变的效果,连接多个不同设备时因各芯片的USB Serial Number编号均不同,会分别对应生成不同的固定COM口。
  2. 针对USB描述符不包含USB Serial Number的USB串口设备如CH340和CH341,系统会根据设备的USB Location(USB位置)来分配COM口号,当连接不同的USB口时,因为USB端口的位置不同所以生成的COM口号也不同。

USB转串口那些事儿—如何固定设备串口号_第1张图片

此外配合沁恒提供的专用串口号管理工具“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

ComPortManager软件介绍

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

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

USB转串口那些事儿—如何固定设备串口号_第2张图片

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

Linux系统固定串口号

Linux USB虚拟串口驱动的COM口分配一般均遵循以下原则:

Linux系统下的串口名称分配和硬件的上电顺序有关,如果是开机启动或者接在同一HUB下面,则由系统枚举各USB设备的顺序相关。先枚举成功的设备先进行串口名分配。如使用2个USB转8串口产品CH348,先插入系统的分配的为:ttyCH9344USB0~7,后插入的分配为:ttyCH9344USB8~15。

通过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举例:

USB转串口那些事儿—如何固定设备串口号_第3张图片

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

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接口)当使用多个USB转串口产品时可以通过设备的其他属性来区分设备:如插入主机的USB Location或者芯片的设备描述符等。通过命令:udevadm control --reload-rules && udevadm trigger让规则立即生效或重启后自动生效。

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

关于计算机端应用软件如何区分多个USB转串口设备,以及如何区分同一个USB转串口硬件的多个串口,可以移步至其他博客。

你可能感兴趣的:(USB转串口,物联网,USB转串口,嵌入式,串口应用与调试)