Linux系统USB转串口芯片 GPIO使用教程

一、简介

WCH的多款USB转单路/多路异步串口芯片,除串口接口以外,还提供独立的GPIO接口,各GPIO引脚支持独立的输出输入,GPIO功能的使用需要与计算机端厂商驱动程序和应用软件配合使用。各芯片的默认GPIO引脚状态有所区别,可查阅芯片技术手册或参考此方案链接附表。

型号

CH344Q

CH344L

CH347T

CH348L

CH348Q

CH9101U/H

USB

480M高速

全速

480M高速

480M高速

480M高速

全速

GPIO数量

16

12

8

48

12

6

封装

LQFP48

LQFP48

TSSOP20

LQFP100

LQFP48

SSOP28/

QFN32

IO电压

3.3V

3.3V

3.3V

3.3V/2.5V/1.8V

3.3V

5V/3.3V/

2.5V/1.8V

型号

CH9101R/Y

CH9102F

CH9102X

CH9103M

CH9104L

CH9326G

USB

全速

全速

全速

全速

全速

全速

GPIO数量

4

5

6

12

24

4

封装

QSOP16/QFN16

QFN24

QFN28

QFN40

LQFP48

SOP16

IO电压

5V/3.3V/

2.5V/1.8V

5V/3.3V/

2.5V/1.8V

3.3V

5V/3.3V/

2.5V/1.8V

3.3V

5V/3.3V

二、GPIO软件资源和支持型号

1、CH343SER Linux软件包

GitHub - WCHSoftGroup/ch343ser_linux: USB driver for USB to serial chip ch342, ch343, ch344, ch9101, ch9102, ch9103, etcUSB driver for USB to serial chip ch342, ch343, ch344, ch9101, ch9102, ch9103, etc - GitHub - WCHSoftGroup/ch343ser_linux: USB driver for USB to serial chip ch342, ch343, ch344, ch9101, ch9102, ch9103, etchttps://github.com/WCHSoftGroup/ch343ser_linux支持以下芯片型号的GPIO功能:

        CH344Q/L、CH9101U/H/R/Y、CH9102F/X、CH9103M、CH9104L。

2、CH9344SER Linux软件包

GitHub - WCHSoftGroup/ch9344ser_linuxContribute to WCHSoftGroup/ch9344ser_linux development by creating an account on GitHub.https://github.com/WCHSoftGroup/ch9344ser_linux支持以下芯片型号的GPIO功能:

        CH348L/Q、CH9344L

3、CH9326 Linux软件包

支持以下芯片型号的GPIO功能:

        CH9326G

三、CH343SER Linux软件包使用说明

ch343ser_linux软件包包含如下3个部分:

driver:驱动软件

lib:应用库

demo:演示程序

1、编译安装驱动软件,可参考以下博客:

CH342/CH343/CH344/CH347/CH9101/CH9102/CH9103/CH9104 Linux串口驱动使用教程_PC技术小能手的博客-CSDN博客CH343 Linux串口驱动 ch343ser_linux 支持USB转串口芯片 ch342/ch343/ch344/ch347/ch9101/ch9102/ch9103/ch9104等 ,同时该驱动配合ch343_lib库还提供了芯片GPIO接口的读写功能,内部EEPROM的信息配置和读取功能等。CH344Q:16CH344L:12CH9102F:5CH9102X:6可以使用git clone下载该驱动,也可以点击网页下载压缩包文件。https://blog.csdn.net/WCH_TechGroup/article/details/132173723      该驱动软件会自动为GPIO硬件资源创建专用的字符设备节点:/dev/ch343_iodev*,这样应用软件可独立访问该节点以使用GPIO资源,而不占用串口tty设备节点。

2、编译gpio应用软件,可直接编译lib源文件和demo测试文件直接生成目标可执行文件,也可以将lib文件编译成动态库然后demo程序使用时链接此动态库。

1、拷贝lib目录下文件至demo文件夹内cp lib/ch343_lib* demo/2、cd进入demo文件夹,然后编译应用程序cd demogcc ch343_demo_gpio.c ch343_lib.c -o iotest

3、GPIO程序运行演示

程序默认操作USB设备的字符设备节点:/dev/ch343_iodev0,需要操作其他节点或设备可直接修改。演示程序打开设备后自动获取芯片型号和GPIO数量。

  • 选项“g”:获取当前芯片的GPIO使能状态、方向设置、引脚电平状态
  • 选项“o”:GPIO输出功能演示,按编号依次操作GPIO输出200ms的低电平,模拟跑马灯
  • 选项“i”:获取当前芯片的GPIO引脚电平状态

4、编程接口说明

/*** libch343_open - open ch343 device* @devname: the device name to open** In this demo device is opened blocked, you could modify it at will.*/
extern int libch343_open(const char *devname);/*** libch343_close - close ch343 device* @fd: the device handle** The function return 0 if success, others if fail.*/
extern int libch343_close(int fd);/*** libch343_gpioinfo - get gpio status* @fd: file descriptor of ch343 device* @enablebits: pointer to gpio function enable bits, bits0-31 on gpio0-31, 1 on enable* @gpiodirbits: pointer to gpio direction bits, bits0-31 on gpio0-31, 1 on ouput, 0 on input* @gpioval: pointer to gpio input value, bits0-31 on gpio0-31, 1 on high, 0 on low** The function return 0 if success, others if fail.*/
extern int libch343_gpioinfo(int fd, uint32_t *enablebits, uint32_t *gpiodirbits, uint32_t *gpioval);/*** libch343_gpioenable - gpio enable* @fd: file descriptor of ch343 device* @enablebits: gpio function enable bits, 1 on enable* @gpiodirbits: gpio direction bits, 1 on ouput, 0 on input** The function return 0 if success, others if fail.*/
extern int libch343_gpioenable(int fd, uint32_t enablebits, uint32_t gpiodirbits);/*** libch343_gpioset - gpio output* @fd: file descriptor of ch343 device* @gpiobits: gpio valid bits, bits0-31 on gpio0-31, 1 on care, 0 on not* @gpiolevelbits: gpio output bits, bits0-31 on gpio0-31, 1 on high, 0 on low** The function return 0 if success, others if fail.*/
extern int libch343_gpioset(int fd, uint32_t gpiobits, uint32_t gpiolevelbits);/*** libch343_gpioget - get gpio input* @fd: file descriptor of ch343 device* @gpioval: pointer to gpio input value, bits0-31 on gpio0-31, 1 on high, 0 on low** The function return 0 if success, others if fail.*/
extern int libch343_gpioget(int fd, uint32_t *gpioval);/*** libch343_get_chiptype - get chip model* @fd: file descriptor of ch343 device* @type: pointer to chip model** The function return 0 if success, others if fail.*/
extern int libch343_get_chiptype(int fd, CHIPTYPE *type);/*** libch343_get_gpio_count - get gpio amounts of specific chip model* @chiptype: chip model** The function return value larger then 0 if success, -1 if fail.*/
extern int libch343_get_gpio_count(CHIPTYPE chiptype);

API接口函数说明

libch343_open:打开GPIO字符设备

libch343_close:关闭GPIO字符设备

libch343_gpioinfo:获取设备的GPIO状态信息

包括GPIO使能状态、GPIO方向位设定、GPIO电平状态

libch343_gpioenable:GPIO使能以及方向设置

libch343_gpioset:设置GPIO电平,输出高/低电平

参数gpiobits的BIT0~31对应GPIO0~GPIO31,1表示设置该GPIO,0表示不设置该GPIO;

参数gpiolevelbits的BIT0~31对应GPIO0~GPIO31,1表示控制该GPIO输出高电平,0表示控制该GPIO输出低电平;

libch343_gpioget:获取GPIO电平状态

参数gpioval的BIT0~31对应GPIO0~GPIO31,1表示该GPIO为高电平,0表示该GPIO为低电平;

API操作流程

四、默认GPIO引脚状态表

CH344Q

编号

0

1

2

3

4

5

6

7

方向

I

O

I

O

I

O

I

O

电平

H

H

H

H

H

H

H

H

编号

8

9

10

11

12

13

14

15

方向

O

O

O

O

I

I

I

I

电平

H/L

H/L

H/L

H/L

H

H

H

H

CH344L

编号

0

1

2

3

4

5

6

7

方向

I

O

I

O

I

O

I

O

电平

H

H

H

H

H

H

H

H

编号

8

9

10

11

方向

O

O

O

O

电平

H/L

H/L

H/L

H/L

CH347T

编号

0

1

2

3

4

5

6

7

方向

I

O

I

I

I

O

I

O

电平

H

H

H

H

H

H/L

H

H

CH348L

编号

0

1

2

3

4

5

6

7

方向

I

O

I

O

I

O

I

O

电平

H

H

H

H

H

H

H

H

编号

8

9

10

11

12

13

14

15

方向

O

O

O

O

I

O

I

O

电平

H

H/L

H

H/L

H

H

H

H

编号

16

17

18

19

20

21

22

23

方向

I

O

I

O

O

O

O

O

电平

H

H

H

H

H

H

H

H

编号

24

25

26

27

28

29

30

31

方向

I

I

I

I

I

I

I

I

电平

H

H

H

H

H

H

H

H

编号

32

33

34

35

36

37

38

39

方向

I

I

I

I

I

I

I

I

电平

H

H

H

H

H

H

H

H

编号

40

41

42

43

44

45

46

47

方向

I

I

I

I

I

I

I

I

电平

H

H

H

H

H

H

H

H

CH348Q

编号

0

1

2

3

4

5

6

7

方向

I

O

I

O

I

O

I

O

电平

H

H

H

H

H

H

H

H

编号

8

9

10

11

方向

O

O

O

O

电平

H/L

H/L

H/L

H/L

CH9101U/H

编号

0

1

2

3

4

6

方向

O

O

O

O

O

I

电平

H

H

L

H/L

H/L

H

CH9101R/Y

编号

0

1

2

3

方向

O

O

O

I

电平

H

H

L

H

CH9102F

编号

0

1

2

3

4

方向

O

O

O

I

I

电平

H

H

L

H

H

CH9102X

编号

0

1

2

3

5

6

方向

O

O

O

I

I

I

电平

H

H

L

H

H

H

CH9103M

编号

0

1

2

3

4

5

6

7

方向

I

I

I

I

I

O

I

O

电平

H

H

H

H

H

H

H

H

编号

8

9

10

11

方向

O

O

O

O

电平

H

H

L

L

CH9104L

编号

00

01

02

03

04

05

方向

I

I

I

O

I

O

电平

H

H

H

H

H

H/L

编号

10

11

12

13

14

15

方向

I

I

I

O

I

O

电平

H

H

H

H

H

H/L

编号

20

21

22

23

24

25

方向

I

I

I

O

I

O

电平

H

H

H

H

H

H/L

编号

30

31

32

33

34

35

方向

I

I

I

O

I

O

电平

H

H

H

H

H

H/L

CH9326G

编号

0

1

2

3

方向

I

I

I

I

电平

H

H

H

H

       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/85410.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】“单链表”的练习题(二)

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

Signal Desktop for Mac(专业加密通讯软件)中文版安装教程

想让您的聊天信息更安全和隐藏吗? Mac版本的Signal Desktop是MACOS上的专业加密通信工具,非常安全。使用信号协议,该协议结合了固定前密钥,双重RATCHES算法和3-DH握手信号,该信号可以确保第三方实体将不会传达您的消息…

JAVA SpringBoot 项目 多线程、线程池的使用。

1.1 线程: 线程就是进程中的单个顺序控制流,也可以理解成是一条执行路径 单线程:一个进程中包含一个顺序控制流(一条执行路径) 多线程:一个进程中包含多个顺序控制流(多条执行路径&#xff0…

【ROS】fsd_algorithm架构学习与源码分析(致敬)

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍fsd_algorithm架构学习与源码分析。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&am…

日常BUG——使用Long类型作id,后端返回给前段后精度丢失问题

😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 数据库long类型Id: 前端返回的Id实体类: Data ApiModel("xxx") public class …

# X11、Xlib、XFree86、Xorg、GTK、Qt、Gnome和KDE之间的关系

X11、Xlib、XFree86、Xorg、GTK、Qt、Gnome和KDE之间的关系 很多人对于他们是啥是傻傻分不清的,我做了个表格供大家参考。 摘抄: X11是X Window System Protocol, Version 11(RFC1013),是X server和X client之间的通…

CMU 15-445 -- Distributed OLTP Databases -20

CMU 15-445 -- Distributed OLTP Databases -20 引言AssumptionAgendaAtomic Commit ProtocolsTwo-Phase Commit (2PC)2PC Success2PC Abort2PC OptimizationsFault Tolerant PaxosMulti-Paxos 2PC vs. Paxos ReplicationReplication ConfigurationApproach #1: Master-Replica…

Java基础入门篇——Java变量类型的转换和运算符(七)

目录 一、变量类型 1.1自动类型转换(隐式转换) 1.2 强制类型转换(显式转换) 1.3类型转换的其他情况 二、运算符 2.1算术运算符 2.2比较运算符 2.3逻辑运算符 2.4位运算符 三、总结 在Java中,变量类型的转换…

Java ThreadLocal是什么

文章目录 引子:SimpleDateFormat类ThreadLocal是什么ThreadLocal 的另一个用途**总结**ThreadLocal的两大用途ThreadLocal 的源代码ThreadLocalMapThreadLocalMap 的问题ThreadLocal的key为什么设置成弱引用?value为什么不是弱引用?Thread、T…

如何让你的视频在 TikTok上变得火爆?

TikTok凭借巨大的用户量和商业价值,它从来不缺优质内容。如何在众多内容中脱颖而出获得关注,这并不简单。和泛流量账号不同,商业账号的目的更加明确,也就是说,商业账号并不一定要以高流量最为唯一的追求目标&#xff0…

跨域+四种解决方法

文章目录 一、跨域二、JSONP实现跨域请求三、前端代理实现跨域请求四、后端设置请求头实现跨域请求五、Nginx代理实现跨域请求5.1 安装Nginx软件5.2 使用Ubuntu安装nginx 本文是在学习课程满神yyds后记录的笔记,强烈推荐读者去看此课程。 一、跨域 出于浏览器的同…

JVM笔记 —— 出现内存溢出错误时时如何排查

一、出现内存溢出的几种情况 内存溢出错误分为StackOverflowError和OutOfMemoryError,前者是栈中出现溢出,后者一般是堆或方法区出现溢出,简称OOM 1. 栈溢出 StackOverflowError 栈溢出一般都是因为没有正确的结束递归导致的,无…

Qt5兼容使用之前Qt4接口 intersect接口

1. 问题 项目卡中遇到编译报错, 错误 C2039 “intersect”: 不是“QRect”的成员 。 2. 排查过程 排查到依赖的第三方代码,使用 intersect 接口, 跟踪排查到头文件中使用了***#if QT_DEPRECATED_SINCE(5, 0)*** #if QT_DEPRECATED_SINCE…

【CSS】CSS 选择器

CSS 选择器 1.基础选择器 1.1 元素选择器 语法:标签名{...} 元素选择器会选中对应标签名的HTML元素,例如:p{...},div{...},span{...}等 1.2 类选择器 语法:.类名{...} 类选择器会选中class属性为指定…

[Idea热部署]两秒钟学会热部署

两者同时适配好,保证没有问题 哈,谢谢各位同志的阅读,然后呢如果觉得本文对您有所帮助的话,还给个免费的赞捏 Thanks♪(・ω・)ノ

【ArcGIS Pro二次开发】(58):数据的本地化存储

在做村规工具的过程中,需要设置一些参数,比如说导图的DPI,需要导出的图名等等。 每次导图前都需要设置参数,虽然有默认值,但还是需要不时的修改。 在使用的过程中,可能会有一些常用的参数,希望…

每天一道leetcode:139. 单词拆分(动态规划中等)

今日份题目: 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例1 输入: s "leetcode", …

【解密算法:时间与空间的博弈】

本章重点 ​​什么是数据结构? 什么是算法? 算法效率 时间复杂度 空间复杂度 常见时间复杂度以及复杂度oj练习 1. 什么是数据结构? 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系…

Docker 数据管理

文章目录 前言1、Dcoker 文件体系2、volume挂载案例2.1、挂载运行一个容器实例方法1方法2 3、volumes-from 案例4、备份/恢复数据卷5、删除数据卷 前言 为什么要有数据管理? 因为: Docker 是不提供持久化的 ,容器是不稳定的;一个…

TCP 三次握手,四次挥手

1、三次握手 第一次握手 SYN 等于1,SeqX 第二次握手 SYN等于1 ACK等于1,SeqY,AckX1 第三次SYN等于0 ACK等于1,SeqX1,AckY1 ackRow都是对应请求seqraw,三次握手后,Seq就是服务器前一个包中的ac…