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

这篇具有很好参考价值的文章主要介绍了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转串口,物联网,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

ComPortManager软件介绍

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

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

硬件串口端口号,USB转串口,物联网,USB转串口,嵌入式,串口应用与调试

  • 串口设备类型选择: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转串口,物联网,USB转串口,嵌入式,串口应用与调试

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

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

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

SUBSYSTEMS:设备类型

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

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

硬件串口端口号,USB转串口,物联网,USB转串口,嵌入式,串口应用与调试注: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转串口硬件的多个串口,可以移步至其他博客。文章来源地址https://www.toymoban.com/news/detail-594623.html

到了这里,关于USB转串口那些事儿—如何固定设备串口号的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32 USB HID+CDC 鼠标键盘串口 组合设备配置解析

    查阅网上的博客与代码,很多都是关于USB的鼠标配置、USB的键盘配置、USB的虚拟串口配置,稍微深入一点的会将鼠标键盘合在一起,但移植起来就会报很多错误,要么是检测不到,要么是警告,这很正常,因为不理解这些数字代表着什么。但只要理解每个数字代表什么意思,

    2024年02月13日
    浏览(40)
  • wsl2 arch linux访问ch340串口和usb设备

    在powershell执行下面命令安装

    2024年04月12日
    浏览(40)
  • 开发那些事儿:H.264转码H.265出现崩溃并报错“missing picture”该如何解决?

    由于浏览器对H.265视频编码格式的支持并不友好,所以我们在EasyCVR平台中开发了H.265转码H.264的功能,该功能可以在不改变摄像机设置的情况下实现视频流转码播放。我们在此前的文章中和大家详细介绍过这个功能,感兴趣的用户可以戳这篇文章:《EasyCVR平台视频转码介绍:

    2023年04月13日
    浏览(34)
  • 记录 无法识别USB串口设备以及由于 Windows 无法加载这个设备所需的驱动程序,导致这个设备工作异常。 (代码 31)

    今天使用串口的时候突然电脑设备器显示无法识别USB设备,在这之前都是一切没有问题,我百思不得其解,于是我百度并且试了很多方法比如说换根线连接,重启电脑,卸载设备(没有卸载芯片)等之类的但是都不起作用。 后来我想起来有虚拟串口这个东西。我这边用的是

    2024年02月12日
    浏览(66)
  • 第10课【STM32 USB通讯协议实战】HID键盘+CDC虚拟串口组合设备

    文章中的部分概念可参考第9课【USB协议】USB总线 接口 端点 管道 数据包 枚举 STM32_USB-FS-Device_Lib V4.1.0 USB协议中为了提供对多样设备的支持,定义了许多外部设备子类,常见的包括: 人机交互类设备HID(Human Interface Device) 通信类设备CDC(Communicate Device Class) 大容量存储设备

    2024年02月04日
    浏览(58)
  • stm32 USB复合设备 cubeMX库一键生成 多路CDC串口 HID鼠标键盘 Composite Device

    最近有个需求,需要同时用usb键盘鼠标和虚拟串口等,因为平时没怎么研究过usb协议,所以自己写复合设备一直没有成功,然后正巧在github上看到了一个stm32的一个usb复合设备库,可以快速配置usb组合设备,并且支持超级多路串口 Gihub地址 https://github.com/alambe94/I-CUBE-USBD-Compo

    2024年02月09日
    浏览(62)
  • wpf C# 用USB虚拟串口最高速下载大文件 每包400万字节 平均0.7s/M,支持批量多设备同时下载。自动识别串口。源码示例可自由定制。

    C# 用USB虚拟串口下载大文件 每包400万字节 平均0.7s/M。支持批量多设备同时下载。自动识别串口。可自由定制。 int 32位有符号整数 -2147483648~2147483647 但500万字节时 write时报端口IO异常。可能是驱动限制的。 之前用这个助手发文件,连续发送,会被分包1024byte/包。速度会慢下来

    2024年02月09日
    浏览(39)
  • c# 如何操作usb设备

    在 C# 中,可以使用 System.IO.Ports 命名空间中的 SerialPort 类来操作串口设备,也可以使用 Windows.Devices.Usb 命名空间中的 UsbDevice 类来操作 USB 设备。 下面以操作 USB 设备为例,介绍如何在 C# 中使用 UsbDevice 类来实现 USB 设备的读写操作。 引用 Windows.Devices.Usb 命名空间 在代码文件

    2024年02月05日
    浏览(34)
  • Redis那些事儿(一)

            说到redis大家都不陌生,其中包括:共有16个数据库,默认为第0个数据库;数据以key-value键值的形式存储;数据类型包括String、List、Hash、Set等,其中最常用的是字符串;是单线程的、基于内存的,主要受内存和网络带宽的影响… 这些都是基于Redis的基础理论知识

    2024年02月05日
    浏览(53)
  • [apue] 进程环境那些事儿

    众所周知,main 函数为 unix like 系统上可执行文件的\\\"入口\\\",然而这个入口并不是指链接器设置的程序起始地址,后者通常是一个启动例程,它从内核取得命令行参数和环境变量值后,为调用 main 函数做好安排。main 函数原型为: 这是 ISO C 和 POSIX.1 指义的,当然还存在下面几种

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包