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.hqwc.cn/news/62454.html

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

相关文章

ESP-IDF插件去除红色波浪线

如图,新装的ESP-IDF打开别人的工程有好多红色波浪线。 把这里的第一个文件夹删除,就是那个.vscode,接下来按ctrlshiftP,输入vscode, 选第一个,添加配置文件夹。 问题解决。 之后记得重新配置板子信息和串…

STM32 低功耗-停止模式

STM32 停止模式 文章目录 STM32 停止模式第1章 低功耗模式简介第2章 停止模式简介2.1 进入停止模式2.1 退出停止模式 第3章 停止模式程序部分总结 第1章 低功耗模式简介 在 STM32 的正常工作中,具有四种工作模式:运行、睡眠、停止以及待机模式。 在系统…

linux自启动程序

嵌入式linux下有软件需要自启动,只需要在/etc/init.d/rcS末尾添加所要启动的程序即可,开机就会自动运行 vi /etc/init.d/rcS在文件末尾添加 例:

PLL 的 verilog 实现

锁相环(PLL)是一种常用的频率、相位追踪算法,在信号解调、交流并网等领域有着广泛的应用。本文对全数字锁相环的原理进行介绍,随后给出 verilog 实现及仿真。 PLL 锁相原理 锁相环结构如下图所示,主要由鉴相器、环路滤…

交换机的堆叠技术

目录 一、堆叠的优势 1、提高可靠性 2、简化组网 3、简化管理 4、强大的网络拓展 二、堆叠的方式 1、堆叠卡堆叠 2、业务口堆叠 3、堆叠卡和业务卡堆叠的优缺点 三、堆叠的原理 1、角色 2、单机堆叠 3、堆叠ID 4、堆叠的优先级 5、堆叠的建立过程 1&#xff09…

【算法】双指针——leetcode盛最多水的容器、剑指Offer57和为s的两个数字

盛水最多的容器 (1)暴力解法 算法思路:我们枚举出所有的容器大小,取最大值即可。 容器容积的计算方式: 设两指针 i , j ,分别指向水槽板的最左端以及最右端,此时容器的宽度为 j - i 。由于容器…

React Native连接Zebra斑马打印机通过发送CPCL指令打印(Android 和 iOS通用)

自 2015 年发布以来,React Native 已成为用于构建数千个移动应用程序的流行跨平台移动开发框架之一。通常,我们有开发人员询问如何将 Link-OS SDK 与 React Native 应用程序集成,以便在 Zebra 打印机上打印标签。在本教程中,我们将…

[Kubernetes]Kubeflow Pipelines - 基本介绍与安装方法

1. 背景 近些年来,人工智能技术在自然语言处理、视觉图像和自动驾驶方面都取得不小的成就,无论是工业界还是学术界大家都在惊叹一个又一个的模型设计。但是对于真正做过算法工程落地的同学,在惊叹这些模型的同时,更多的是在忧虑如…

最大交换(力扣)枚举 JAVA

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。 示例 2 : 输入: 9973 输出: 9973 解释: 不需要交换。 注意: 给定数字的范围是 [0, 10^8] 解题思路: 1、数最…

C++实现俄罗斯方块(源码+详解)

👂 Take me Hand Acoustic - Ccile Corbel - 单曲 - 网易云音乐 源码Debug工具 (1)cppreference.com (主) (2)必应 (bing.com) (3)GPT(主) &#…

静态时序分析与时序约束

一、时序分析的基本概念 1. 时钟 理性的时钟模型是一个占空比为50%且周期固定的方波: 实际电路中输入给FPGA的晶振时钟信号是正弦波: 2. 时钟抖动 Clock Jitter,时钟抖动,相对于理想时钟沿,实际时钟存在不随时钟存在…

PlanetScale vs. Neon - MySQL 和 Postgres 间的第二仗

本文为「数据库全方位对比系列」第三篇,该系列的前两部作品为: 全方位对比 Postgres 和 MySQL全方位对比 Postgres 和 MongoDB 根据 2023 年 Stack Overflow 调研,Postgres 已经取代 MySQL 成为最受欢迎和渴望的数据库了。 看起来 MySQL 和 …