Linux驱动--CH9344编译安装
USB转串口芯片
CH9344是一款USB转4串口控制芯片,提供4组全双工的异步串口UART0/1/2/3,用于为计算机扩展异步串口,或者将普通的串口设备升级到USB总线。和它类似的还有CH348,可以实现 USB 转八个异步串口 UART0/1/2/3/4/5/6/7 功能,用于为计算机扩展异步串口。
驱动安装
他们共用一个驱动CH9344SER_LINUX.ZIP,
解压后目录文件如下:
当前目录,打开终端
1 | cd driver |
安装驱动后,查看/dev下是否生成相关节点
例如:ttyCH9344USB1
以 ttyCH9344USB开头,这些是串口节点
还有 ch9344_iodev0
这些是用来控制的节点,配置GPIO。详细使用看下文。
demo编译
在 demo 目录下有ch9344_demo_gpio.c文件,这个是官方参考文件。同时在lib目录下有着不同架构平台的库文件与头文件。如下:
我用的是gcc编译,如果单独运行会找不到头文件。
可以把驱动源码中头文件“ch9344_lib.h”,拷贝到系统下/usr/include目录,或者直接把ch9344_demo_gpio.c文件移动到 lib目录进行编译。还需要把libch9344.a一起编译。
1 | # 命令 |
你会发现目录下已经有一个 demo的可执行文件。
demo测试与开发
1 | sudo ./demo /dev/ch9344_iodev0 |
查看提供的简易demo代码发现,程序仅仅支持批量设置。
| 按键 | 功能说明 |
|---|---|
| e | 使能所有 GPIO 组CH9344L/Q:每组只使能 bit0其他芯片:每组使能全部 8 位 |
| d | 禁用所有 GPIO 组 |
| o | 把所有 GPIO 设置为输出模式 |
| i | 把所有 GPIO 设置为输入模式 |
| h | 把所有 GPIO 输出电平设置为 高电平(1) |
| l | 把所有 GPIO 输出电平设置为 低电平(0) |
| g | 读取所有 GPIO 电平,并打印:gpio0: high/lowgpio1: high/low… |
| q | 退出程序 |
自己根据需要可以修改。
主要库函数如下:
- 打开 GPIO 设备
1 | fd = libch9344_open(argv[1]); |
功能:打开 ch9344_iodev 设备
参数:设备路径 /dev/ch9344_iodev0
返回:成功:返回文件句柄 fd(正数);失败:返回负数
- 关闭设备
1 | ret = libch9344_close(fd); |
功能:关闭打开的 GPIO 设备
参数:fd = 设备句柄
返回:0 = 成功,非 0 = 失败
- 获取芯片类型
1 | libch9344_get_chiptype(fd, &chiptype); |
功能:获取当前芯片型号(CH9344 / CH348 / CH9344L / CH9344Q)
参数:fd:句柄,chiptype:输出芯片类型
返回:0 = 成功,非 0 = 失败
- 获取芯片支持的 GPIO 数量
1 | gpiocount = libch9344_get_gpio_count(chiptype); |
功能:获取这片芯片一共有几个 GPIO 脚
参数:chiptype 芯片类型
返回:GPIO 总数(如 8/10/12 等)
- 获取芯片的 GPIO 分组数
1 | gpiogroup = libch9344_get_gpio_group(chiptype); |
功能:获取 GPIO 分为几组(CH9344 一般是 1~3 组)
参数:chiptype
返回:group 数量
- 使能 / 禁用 GPIO 组
1 | libch9344_gpioenable(fd, i, 0x01); |
功能:使能或关闭某一组 GPIO
参数:
fd:句柄
i:组号
0x00:禁用
0x01 / 0xff:使能
返回:0 = 成功
- 设置 GPIO 方向(输入 / 输出)
1 | libch9344_gpiodirset(fd, i, 0x01); // 输出 |
功能:设置第 i 号 GPIO 是输入还是输出
参数:
i:GPIO 编号(0、1、2…)
0x01:输出模式
0x00:输入模式
返回:0 = 成功
- 设置 GPIO 输出电平(高 / 低)
1 | libch9344_gpioset(fd, i, 0x01); // 高电平 |
功能:输出模式下设置电平
参数:
i:GPIO 号
1:高
0:低
返回:0 = 成功
- 读取 GPIO 电平
1 | libch9344_gpioget(fd, i, &gpioval); |
功能:读取当前 GPIO 电平
参数:i:GPIO 号;&gpioval:输出 0 或 1
返回:0 = 成功
上位机开发需要根据场景需求进行更改。












