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

2023-10-09 01:40

本文主要是介绍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口号也不同。

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

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

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转串口那些事儿—如何固定设备串口号的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/169435

相关文章

407串口01发送

实验一: 工程。 链接:https://pan.baidu.com/s/1g8DV4yZWOix0BbcZ08LYDQ?pwd=2176 提取码:2176 串口1的使用。发送功能。 单片机发送信息到电脑。 通过串口进行通信。 首先单片机这边。 单片机这边,需要对单片机的串口模块进行使能初始化,设置串口的格式。 单片机和电脑的串口收发格式要配置一致。不然A和B肯定通信不成功,鸡和鸭讲,

xilinx FPGA 串口设计笔记

xilinx FPGA  串口设计笔记 在设计中,需要用 FPGA 读取 GPS 内部的信息,GPS 的通信方式为串口,所以在 FPGA 中移植了串口程序。 本次移植的程序源代码是特权的串口程序,本以为移植应该很快就能完成, 但其中还是 出了一写小问题,耽误了不少的时间,下面将问题进行一个总结! 以下是串口的时序: 在设计中,耽误时间最长的问题就是数据老是出错,为了找出问题

CloudStack那些事儿2 : 主存储与二级存储

CloudStack的管理的存储按用途分为主存储(Primary Storage)和二级存储(Secondary Storage),主存储用来存储虚拟机的卷,二级存储用来存放虚拟机的模板,ISO镜像和快照。值得一提的是,这里的主存储并不是指我们平时说的主存(RAM),它是Storage而不是Memory,可以理解为是硬盘,主存储和二级存储仅仅是存放的文件类型不同,使用的存储设备的类型是一样的。

TX2 关闭console serial使用该串口

由于项目变更,GPU型号从Tx1变成Tx2,原来的硬件接口没有变,但是把原来UART0的console serial功能关闭变成一个串口使用的方法没法使用了。这就导致了数据通过该串口发送的数据变的很有问题,无法使用了。 经过测试,终于找到了解决的方法。 首先在虚拟机上,安装编辑设备树的软件: $sudo apt-get update $sudo apt-get install device

JetSon Tx1 串口使用记录

最近在学习使用Jetson Tx1,下面是使用串口遇到的问题,做为我的第一篇博客。 Jetson Tx1串口是TTL电平。 Jetson Tx1的UART0在Linux上的设备号是“/dev/tty0”,但是在Tx1刷的系统中,UART0默认是做为console serail设备使用的,这个具体有什么作用,我也不大清楚了,百度一下也不是很懂。这就导致了在Linux上使用串口调试工具和PC机相连

USB - USB在消费领域的应用

Switching in USB Consumer Applications 通用串行总线(USB)已成为满足终端设备之间日益增长的快速数据传输需求的主流接口--例如,在个人电脑和便携式设备(如手机、数码相机和个人媒体播放器)之间下载和上传数据。 The universal serial bus (USB) has become a dominant

谁说串口通信波特率越高越好?

在电子世界里,串口通信就像是电子设备之间的“悄悄话”,它们通过串行数据传输来交换信息。但你知道吗?串口通信的波特率并不是越高越好,这事儿得好好聊聊。 1.什么是串口通信? 串口通信,就像它的名字一样,是一种串行的数据传输方式。它允许设备通过一根线(或几根线)来传递信息。想象一下,你通过一根绳子传递小纸条给朋友,这就是串口通信的基本概念。 2.串口通信波特率是什么?

离线linux通过USB连接并使用手机网络

离线linux通过USB连接并使用手机网络 引场景 引 离线环境要安装一些软件特别麻烦,要自己去官网下载对应的包,然后上传到服务器上,再解压,编译,执行,配置变量等等,错一步都可能安装失败。有网络的话使用yum或者是docker镜像来安装就非常方便。这里记录一下之前在centos上通过USB连接手机并使用手机网络来做这些基础工作时所遇到的网络问题。 场景 首先手机连上服务器主

阅读笔记:明朝那些事儿妖孽横行的宫廷

明朝那些事儿第四部看完了,合上书本给我印象比较深刻的文臣要数王守仁,不愧为明朝的军事家,思想家,文学家,教育家,他经过多年的思索、磨难、追求,终于有一天,在穷乡僻壤,困苦简陋的贵州龙场顿悟,史称龙场悟道。世间一切万物万事,都存在于人的内心。这就是王守仁著名的心学(阳明心学)的诞生,其核心“心外无物,心即理”、“知行合一”、“致良知”。 王守仁是一个了不起的人物,在当时做出了很多功绩,比如

AG32 MCU是否支持DFU下载实现USB升级

1、AG32 MCU是否支持DFU下载实现USB升级呢? 先说答案是NO. STM32 可以通过内置DFU实现USB升级,AG32 MCU目前不支持。但用户可以自己写一个DFU, 作为二次boot. 2、AG32 MCU可支持的下载方式有哪些呢? 我们AG32裸机下载只支持uart和jtag. 用户可以通过UART实现ISP升级。所以虽然不支持DFU,但是用户仍然可以通过UART实现升级。 3