多个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)

大家都在看

  • 数据结构 一元多项式加减法计算器

    cpp;gutter:true;</p> <h1>include</h1> <p>using namespace std;</…

    Linux 2023年6月13日
    0100
  • 关于程序员成长的一些思考

    任何一名技术大神都是从小菜鸟开始的,这应该无一例外。当然,有的人成长的快,有的人成长得慢,有的人坚持下来,有的人半途而废。如果我们在成长的过程中能掌握一些方法,也许能少走一些弯路。…

    Linux 2023年6月6日
    0113
  • [转帖]shell中if语句的使用

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年5月28日
    0123
  • Windows 是最安全的操作系统

    建了一个用户交流群,我在群里说:”Windows 是最安全的操作系统。” 立刻引发了很多有意思的观点。我在群里一个人说不过大家,先篇文章把自己的论点罗列一下…

    Linux 2023年6月14日
    0102
  • ASP.NET MVC实现POST方式的Redirect

    我们知道,在ASP.NET MVC中,要从一个Action跳转到另一个Action,通常是用一系列以”Redirect”开头的方法 Redirect Red…

    Linux 2023年6月13日
    0108
  • find 查询命令 & 正则表达式

    今日内容 find 正则表达式 Linux 三剑客之 grep 内容详细 一、find 按名称或属性查询文件 按名称查询 find [查找目录] [参数] [] 通配符 : * 表…

    Linux 2023年5月27日
    0123
  • Linux之vim编辑器

    1.vim三种模式 模式 操作 可视模式 可查看内容 编辑模式 可查看可修改内容 命令行模式 给vim发送控制命令,可查看内容 注:打开文件,默认是可视模式 2.三种模式的切换 可…

    Linux 2023年6月6日
    0112
  • 截止2021年底,我国18个税种中已有12个税种完成立法

    截止2021年底,我国18个税种中已有12个税种完成立法: 1.中华人民共和国个人所得税法 (自1980年9月10日起施行)2.中华人民共和国企业所得税法 (自2008年1月1日起…

    Linux 2023年6月14日
    0428
  • jenkins

    1. jenkins简介 1.1 SVN介绍 1.2 Maven介绍 1.3 Ant介绍 1.4 Gitdle介绍 1.5 jenkins工作原理 1.6 jenkins特点 2….

    Linux 2023年6月13日
    0156
  • 简单记录CookieCollection的使用

    HttpHelper 点击查看代码 /// <summary> /// &#x7C7B;&#x8BF4;&#x660E;&#xFF1A;…

    Linux 2023年6月13日
    0106
  • LVS+KeepAlived高可用部署架构

    1 构建高可用集群 1.1 什么是高可用集群 高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的得服务器集群技…

    Linux 2023年6月13日
    098
  • 使用VScode创建第一个vue项目

    初识vue,小小白一枚 软件,插件安装,略… 插件:vetur(支持vue代码高亮)、ESLint(js语法纠错)、Auto Close Tag(自动闭合标签)、Aut…

    Linux 2023年6月7日
    0109
  • Monte Carlo 机器人定位——基于直方图过滤器的机器人定位方法

    本文为学习课程:https://classroom.udacity.com/courses/cs373 后的相关阶段总结,供个人学习也供大家参考。如有表述不当之处欢迎评论区指出。 …

    Linux 2023年6月14日
    0155
  • Centos7下载及安装

    Centos7下载及安装 1.下载虚拟机 虚拟机下载地址: https://www.vmware.com 或者 360一键安装(推荐) 2.在虚拟机上安装Centos7 2.1.通…

    Linux 2023年5月27日
    0104
  • jenkins自动触发构建

    bash;gutter:true; 1. 安装jenkins cat /etc/yum.repos.d/jenkins.repo [jenkins] name=Jenkins ba…

    Linux 2023年6月7日
    086
  • CPU 是如何与内存交互的

    这篇文章主要整理了一下计算机中的内存结构,以及 CPU 是如何读写内存中的数据的,如何维护 CPU 缓存中的数据一致性。什么是虚拟内存,以及它存在的必要性。如有不对请多多指教。 概…

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