Skip to content

superice119/CH347-driver-openwrt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CH34x MPHSI Master Driver - OpenWrt Package

这是 CH341/CH347 USB 转 SPI/I2C/GPIO 驱动的 OpenWrt 包。

https://github.com/WCHSoftGroup/ch34x_mphsi_master_linux.git

支持的设备

  • CH341A/B/C/F/H/T (模式1: SPI + I2C + GPIO)
  • CH347F (SPI + I2C + GPIO + JTAG + SWD)
  • CH347T (模式1: SPI + I2C + UART)

功能特性

  • SPI 主机接口

    • CH347: 最高 60MHz 时钟频率
    • CH341: 最高 1MHz 时钟频率
    • 支持 SPI Mode 0/1/2/3
    • 支持 MSB/LSB 传输
    • 2路片选信号
  • I2C 主机接口

    • 支持时钟频率: 20kHz, 100kHz, 400kHz, 750kHz
    • 默认初始化为 100kHz
  • GPIO 接口

    • CH347F: 8个GPIO (gpio0-gpio7)
    • CH347T: 3个GPIO (gpio4, gpio6, gpio7)
    • 支持中断功能(上升沿、下降沿、双边沿)

安装方法

1. 复制包到 OpenWrt 源码

# 将 openwrt 目录复制到 OpenWrt 源码的 package/kernel/ 目录下
cp -r openwrt <OPENWRT_SOURCE>/package/kernel/ch34x-mphsi-master

2. 配置内核模块

cd <OPENWRT_SOURCE>
make menuconfig

在 menuconfig 中导航到:

Kernel modules ---> 
  USB Support --->
    <*> kmod-ch34x-mphsi-master... CH341/CH347 USB to SPI/I2C/GPIO driver

3. 编译

# 编译单个包
make package/kernel/ch34x-mphsi-master/compile

# 或编译整个固件
make

4. 安装 IPK 包

编译完成后,会在 bin/targets/<target>/<subtarget>/packages/ 目录下生成 IPK 包。

将包复制到路由器并安装:

opkg install kmod-ch34x-mphsi-master_*.ipk

使用说明

驱动加载

驱动会在设备插入时自动加载。你也可以手动加载:

# 自动分配总线号和 GPIO 起始号
insmod ch34x_mphsi_master

# 或指定总线号和 GPIO 起始号
insmod ch34x_mphsi_master spi_bus_num=3 gpio_base_num=60

验证设备

# 检查 USB 设备 (VID: 0x1A86)
lsusb | grep 1a86

# 查看内核日志
dmesg | grep ch34x

# 查看 SPI 设备
ls /dev/spidev*

# 查看 I2C 设备
ls /sys/bus/i2c/devices/

# 查看 GPIO 设备
ls /sys/class/gpio/

SPI 接口使用

内核 5.15 及以上版本需要手动绑定 spidev:

# 单个设备绑定 (例如 spi0.1)
echo spidev > /sys/class/spi_master/spi0/spi0.1/driver_override
echo spi0.1 > /sys/bus/spi/drivers/spidev/bind

# 批量绑定所有 CH34x 设备 (hotplug 脚本会自动执行)
for i in /sys/bus/usb/drivers/mphsi-ch34x/*/spi_master/spi*/spi*.*; do 
    echo spidev > $i/driver_override
    echo $(basename $i) > /sys/bus/spi/drivers/spidev/bind
done

I2C 设备挂载示例

# 挂载 BMI160 传感器 (地址 0x68)
modprobe bmi160_i2c
echo "bmi160 0x68" > /sys/bus/i2c/devices/i2c-0/new_device

# 挂载 TCS3472 颜色传感器 (地址 0x29)
modprobe tcs3472
echo "tcs3472 0x29" > /sys/bus/i2c/devices/i2c-0/new_device

GPIO 使用

# 导出 GPIO
echo 509 > /sys/class/gpio/export

# 设置方向
echo out > /sys/class/gpio/gpio509/direction

# 设置电平
echo 1 > /sys/class/gpio/gpio509/value

# 读取电平
cat /sys/class/gpio/gpio509/value

# 配置中断
echo rising > /sys/class/gpio/gpio509/edge

SPI NOR Flash 挂载为 MTD 设备

# 解除 spidev 绑定
echo spi0.0 > /sys/bus/spi/drivers/spidev/unbind

# 绑定到 spi-nor 驱动
echo spi-nor > /sys/bus/spi/devices/spi0.0/driver_override
echo spi0.0 > /sys/bus/spi/drivers/spi-nor/bind

模块参数

  • spi_bus_num: 指定 SPI 总线号 (默认自动分配)
  • gpio_base_num: 指定 GPIO 起始号 (默认自动分配)

示例:

insmod ch34x_mphsi_master spi_bus_num=3 gpio_base_num=60

故障排查

设备未识别

  1. 检查 USB 连接: lsusb | grep 1a86
  2. 检查内核日志: dmesg | tail -50
  3. 确认设备工作模式正确 (CH341 模式1, CH347T 模式1)

SPI 设备不可用

  1. 检查内核版本是否 >= 5.15
  2. 手动执行 spidev 绑定命令
  3. 检查 hotplug 脚本是否正确执行

GPIO 不工作

  1. 确认 GPIO 号正确
  2. 检查引脚未被 SPI/I2C 占用
  3. 查看 /sys/kernel/debug/gpio (需要 debugfs)

卸载

# 卸载模块
rmmod ch34x_mphsi_master

# 卸载包
opkg remove kmod-ch34x-mphsi-master

技术支持

如有技术问题,请联系:

许可证

GPL-2.0

版本

  • 驱动版本: V1.4 (2024.02)
  • 包版本: 1.4-1