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

news2024/7/6 17:59:42

一、简介

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 demo
    gcc 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.coloradmin.cn/o/866577.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis——常见数据结构与单线程模型

Redis中的数据结构 Redis中所有的数据都是基于key,value实现的,这里的数据结构指的是value有不同的类型。 当前版本Redis支持10种数据类型,下面介绍常用的五种数据类型 底层编码 Redis在实现上述数据结构时,会在源码有特定的…

RCNA——单臂路由

一,实验背景 之前的VLAN实现的很多都是相同部门互相访问,不同部门无法访问。不过这次整来了一个路由器,领导说大部分的部门虽说有保密信息需要互相隔离,但是这些部门和其它部门也应该互相连通以方便工作交流。因此要配置新的环境&…

2023-08-11 LeetCode每日一题(矩阵对角线元素的和)

2023-08-11每日一题 一、题目编号 1572. 矩阵对角线元素的和二、题目链接 点击跳转到题目位置 三、题目描述 给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1&#xff1…

linux安装ftp

一、安装 参考博客 https://blog.csdn.net/dafeigecsdn/article/details/126518069 rpm -qa |grep vsftpd # 查看是否安装ftp yum -y install vsftpd # 安装vsftpuseradd -d /home/lanren312 lanren312 # 指定在/home目录下创建用户 passwd lanren312 # 给用户设置密码 # 输…

2022年03月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536 输入 只有一行,一个双精度浮点数。 输出 一行,保留8位小数的浮点数。 样例输…

【Unity每日一记】让一个物体按余弦曲线移动—(三角函数的简单运用)

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

麻省理工学院利用水泥和炭黑制造出超级电容器

麻省理工学院的研究人员展示了一种使用低成本水泥和炭黑的制造的超级电容器,这一发明可能会彻底颠覆可再生能源的存储。 ​为了解决太阳能、风能和潮汐能等间歇性和非周期性电源的普及问题,实用并且廉价的电力储存技术一直是重要的环节。MIT的研究人员最…

从docker启动kali

前言: 偶然间在docker中发现有Linux的镜像,有了尝试的想法,于是有了本文 选了星星最多的那个,直接pull,或者命令行执行 docker run kalilinux/kali-rolling 介绍中说,没有任何工具,所以需要自己安装。 直接…

Jpa与Druid线程池及Spring Boot整合(二): spring-boot-starter-data-jpa 踏坑异常处理方案

Jpa与Druid线程池及Spring Boot整合(一) Jpa与Druid线程池及Spring Boot整合(二):几个坑 附录官网文档:core.domain-events域事件 从聚合根发布事件 存储库管理的实体是聚合根。在领域驱动设计应用程序中,这些聚合根通常会发布领域事件。Sp…

Golang函数以及函数和方法的区别

在接触到go之前,我认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c,python,java中没有明显的区别),但是在golang中者完全是两个不同的东西。官方的解释是,方法是包含了接收者的函数。…

直播预告|EasyV全新倾斜摄影组件上线!提升大规模、高精度实景建模效率

倾斜摄影,也被称为斜摄影或倾斜摄影测量,是一种高精度、高分辨率的遥感技术,用于获取地表地貌、建筑物、自然环境等目标的三维信息。在城市级数字孪生可视化建设过程中,通常会使用倾斜摄影技术以增强地理信息分析和虚拟建模的能力…

【瑞吉外卖】Linux学习

Linux常用命令 Linux命令初体验 Linux的命令都是由一个或几个单词的缩写构成的 命令对应英文作用lslist查看当前目录下的内容pwdprint work directory查看当前所在目录cd [目录名]change directory切换目录touch [文件名]touch如果文件不存在,新建文件mkdir [目录…

数据结构:堆的实现(C实现)

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》 文章目录 一、堆二、实现思路1. 结构的定义2. 堆的构建 (HeapInit)3. 堆的销毁 (HeapDestroy)4. 堆的插入 (HeapPush)5. 堆的删除 (HeapPop)6. 取堆顶的数据 (HeapTop)7. 堆的数据个数 (HeapSize…

C#小轮子:Visual Studio自动编译Sass文件

文章目录 前言插件安装插件使用compilerconfig.jsonsass输入和css输出(自动生成)默认配置(我不懂就不去动他了) 前言 我们知道css文件用起来太麻烦,如果样式一多,嵌套起来用css样式就眼花缭乱。Sass使用层…

量化交易可视化(10)-等高线图

等高线图的含义 等高线图(Contour plot)是一种二维图形展示方式,用于表示函数在二维平面上的等高线。等高线图的每条等高线代表函数在该高度上的取值相同的点的集合。 等高线图的绘制方法 在matplotlib中,可以使用contour()函数…

Unity使用C# Protobuf源码

目录 第一步:下载源码 第二步:运行C#构建文件 第三步:处理报错(如果你已安装对应的SDK则不会报错) 第四步:复制库文件到你的工程 第一步:下载源码 protobuf github源码https://github.com/p…

银河麒麟安装php7.1.33

银河麒麟V10兼容CentOS 8 安装过程与CentOS类似。 TencentOS3.1安装PHPNginxredis测试系统_乐大师的博客-CSDN博客 可以参考之前我写的文章。 不过有2个细节不同,下面说下。 问题1:编译错误提示“error:off_t undefined” 解决方法: 编…

Python实现调用百度翻译的API

import requests import hashlib import random import jsondef translate(text, from_lang, to_lang):app_id XXXXX # 替换为你的App IDsecret_key XXXXX # 替换为你的Secret Key# 生成随机数salt random.randint(32768, 65536)# 计算签名sign app_id text str(salt) …

Linux:Shell编辑之文本处理器(sed)

目录 绪论 1、sed的原理:读取 执行 显示 三个过程 2、sed 文本内容处理工具,文件过大怎么办? 3、sed的操作选项 3.1 常用选项 3.2 操作符 3.3 行号的范围打印 3.4 对包含指定字符串的内容进行打印 3.5 删 3.5.1 正则表达式删除 3.6…

【ES】笔记-函数参数默认值

函数参数默认值 ES6 允许给函数参数赋值初始值 1. 形参初始值 具有默认值的参数,一般放到最后 function add(a,b,c10){return abc}let resultadd(1,2);console.log(result);2. 与解构赋值结合 function connect({host"127.0.0.1",username,password,port…