多个USB转串口设备区分方法

当计算机或者其他USB主机上使用多个USB转串口设备时,会遇到多个串口无法与具体的串口设备对应起来的问题,包括更换不同USB端口串口序号发生改变,多个设备USB插拔顺序不同导致串口序号改变等问题。

本文提出几种常见解决方式,用于解决开发及使用过程中遇到的问题。部分方法同样适用于单个USB串口设备连接的场景。

一、USB设备硬件信息不同

当使用不同厂家的USB转串口芯片或同一厂家不同系列的USB转串口芯片,可使用以下几种常用方法用于区分多个设备。

  • *通过USB设备描述符中设备信息

USB厂商ID、USB产品PID、USB厂商字符串、USB产品字符串、串行序列号等

  • *通过虚拟串口驱动生成的设备名称

当使用不同的VCP厂商驱动或类驱动时,串口设备名称会有区别。如:

Windows操作系统使用USB转串口芯片CH340和CH343时,设备管理器信息:

Linux操作系统下分别生成ttyUSB设备和ttyACM设备(当CH343使用系统自带CDC串口驱动时)。

Android系统下进行免驱USB应用开发,可直接调用UsbDevice类提供的接口函数。

  • *通过VCP厂商驱动提供的应用层接口

如使用CH340芯片及驱动时,可通过沁恒提供的动态库及API接口函数来判断当前操作的串口是否为CH340或CH341。

Windows系统下动态库CH341PT.DLL,接口函数:CH341PtNameIsCH341、CH341PtHandleIsCH341。除此之外,该动态库还提供USB热插拔检测等功能。当使用新一代USB转串口芯片CH342/CH343/CH344/CH9101/CH9102/CH9103时可使用CH343PT.DLL进行设备识别以及获取芯片相关信息等。

二、USB设备硬件信息相同时

当使用USB硬件信息完全相同的USB转串口芯片,可使用以下几种常用方法用于区分多个设备。

  • *通过串口MODEM信号线

通常USB转串口芯片,除提供TXD和RXD异步串口信号,还支持MODEM联络信号RTS、DTR、DCD、RI、DSR、CTS等。其中RTS与DTR信号可用作通用输出信号,CTS、DSR、RI、DCD信号可用作通用输入信号。可利用输入信号或输入与输出信号的组合来区分不同串口设备。

除了可以作为通用输出输入功能的MODEM信号引脚外,一些USB转串口芯片还额外提供了GPIO引脚,也可以用于如上组合检测,比如:CH9102、CH9101、CH9103、CH9344等。

  • *使用输入信号

在设备上电工作前根据需要将相应输入信号置高或拉低。操作串口时,主动获取MODEM输入信号的电平状态,根据状态区分串口设备。如:当使用4路输入信号的组合,最多可以区分2的4次方 = 16种串口外设。

  • *使用输出与输入信号的组合

在设备上电工作前根据需要将输出信号与输入信号短接(可1对1,也可以1对多)。操作串口时,置高或拉低MODEM输出信号,然后读取与其短接的输入信号的电平状态,根据状态是否同步区分硬件。如:短接DTR和DSR信号,先置低DTR,读取DSR是否为低。再置高DTR,读取DSR是否同步为高。

  • *通过串口应用协议

串口通信双方可事先约定好通信协议,通过串口数据内容来确认串口设备的”身份”。比如同一台计算机下需要接入多台串口设备,约定身份确认通信格式为:

计算机:包头+获取身份命令码+包尾+校验

设备:包头+身份ID+包尾+校验

当需要与其中某个具体串口设备通讯前,可先按照通信命令发送数据包,等待设备回复后,提取”身份ID”用于计算机确认设备”身份”。

三、如何选型与设计

尽管USB转串口芯片内置信息相同或者不同时均有对应的处理方案,但如上各方法需要依赖于硬件设计和软件设计,在产品设计前均要提前合理规划。

总结与建议:

Original: https://www.cnblogs.com/WCH-SoftGroup/p/16520701.html
Author: WCH_SoftGroup
Title: 多个USB转串口设备区分方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581701/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SpringBoot-swagger

    SpringBoot整合swagger SpringBoot-swagger 13.1 导入相关依赖 io.springfox springfox-swagger-ui 2.9.2…

    Linux 2023年6月14日
    092
  • QT程序自启动

    故事背景:最近涉及到客户端更新自启动的一个问题,客户端检测到自己要更新,弹出一个更新界面,然后退出旧版本,启动新版本 技术调研:QProcess 直接上代码吧 这个代码的效果就是退…

    Linux 2023年6月13日
    098
  • kubeadm 加入新master 报错

    error execution phase check-etcd: error syncing endpoints with etcd: context deadline exce…

    Linux 2023年6月14日
    0124
  • JuiceFS v1.0 正式发布,首个面向生产环境的 LTS 版本

    今天,JuiceFS v1.0 发布了 🎉 经过了 18 个月的持续迭代和大量生产环境的广泛验证,此版本将成为第一个被长期维护的稳定版(LTS)。同时,该版本提供完整的向前兼容,所…

    Linux 2023年6月14日
    096
  • 测试代理的墙是否是通的

    curl -v -x 代理ip:端口 目的ip:端口通过代理访问对方wget “http://目的IP:端口” -e use_proxy=yes -e ht…

    Linux 2023年6月14日
    0104
  • 4.1 打包和压缩的概念和区别

    在讲解具体的归档命令和压缩命令之前,先来了解一下归档和压缩所各自代表的含义。 归档,也称为打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,因此…

    Linux 2023年6月7日
    094
  • Shell脚本编程中的几个问题

    条件语句 正确的写法: if [ $1 = "-f" ] #注意这里,前后方括号和中间的内容之间必须有空格! then commands fi 错误的写法: i…

    Linux 2023年6月14日
    081
  • Golang环境安装

    一、下载地址 Golang: Downloads – The Go Programming Language GoLand编辑器: Download GoLand: A…

    Linux 2023年6月13日
    0105
  • 站长工具

    背景 日常测试全国各种某网站的响应情况使用 站长工具 站长工具 http://tools.wujingquan.com/ 站长工具 ping检测 ping检测 https://pi…

    Linux 2023年6月6日
    0113
  • vi和vim文本编辑器

    vi和vim文本编辑器 vi和vim模式的相互切换 快捷键使用案例 拷贝当前行yy; 拷贝当前行向下的5行 5yy; 并粘贴(p) 删除当前行dd; 删除当前行向下的5行 5dd …

    Linux 2023年6月11日
    0100
  • ASP.NET Core 3.0 : 二十四. 配置的Options模式

    上一章有个配置的绑定的例子,可以将配置绑定到一个Theme实例中。也就是在使用对应配置的时候,需要进行一次绑定操作。而Options模式提供了更直接的方式,并且可以通过依赖注入的方…

    Linux 2023年6月7日
    090
  • 多进程知识简单总结

    多进程间的全局变量不共享 一、代码展示 import multiprocessing as mul_p import time egg1 = 1 def write(egg2, q…

    Linux 2023年6月14日
    086
  • 每天一个 HTTP 状态码 200

    200 OK 表示请求成功,一切安好… 200 OK 话不多说,这个状态码应该是最最最常用的了,无人不知,无人不晓;就是表示请求成功的意思, 你若安好,便是晴天。 摘自…

    Linux 2023年6月7日
    0102
  • PySimpleGUI 踩坑记

    最近在写一些处理芯片数据的代码,想给小伙伴们用,就想到写个GUI的页面,正好有人推荐使用PySimpleGUI, 首次使用就遇到了坑: 之前没有加try,运行的时候直接报错 inv…

    Linux 2023年6月14日
    089
  • Go函数下篇:defer和闭包

    package main import "fmt" func work() int { num := 10 defer func(i int) { i += 2…

    Linux 2023年6月7日
    093
  • LeetCode-459. 重复的子字符串

    题目来源 题目详情 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 示例 1: 输入: s = “abab”输出: true解释:…

    Linux 2023年6月7日
    0125
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球