这是 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)
- 支持中断功能(上升沿、下降沿、双边沿)
# 将 openwrt 目录复制到 OpenWrt 源码的 package/kernel/ 目录下
cp -r openwrt <OPENWRT_SOURCE>/package/kernel/ch34x-mphsi-mastercd <OPENWRT_SOURCE>
make menuconfig在 menuconfig 中导航到:
Kernel modules --->
USB Support --->
<*> kmod-ch34x-mphsi-master... CH341/CH347 USB to SPI/I2C/GPIO driver
# 编译单个包
make package/kernel/ch34x-mphsi-master/compile
# 或编译整个固件
make编译完成后,会在 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/内核 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# 挂载 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
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# 解除 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/bindspi_bus_num: 指定 SPI 总线号 (默认自动分配)gpio_base_num: 指定 GPIO 起始号 (默认自动分配)
示例:
insmod ch34x_mphsi_master spi_bus_num=3 gpio_base_num=60- 检查 USB 连接:
lsusb | grep 1a86 - 检查内核日志:
dmesg | tail -50 - 确认设备工作模式正确 (CH341 模式1, CH347T 模式1)
- 检查内核版本是否 >= 5.15
- 手动执行 spidev 绑定命令
- 检查 hotplug 脚本是否正确执行
- 确认 GPIO 号正确
- 检查引脚未被 SPI/I2C 占用
- 查看
/sys/kernel/debug/gpio(需要 debugfs)
# 卸载模块
rmmod ch34x_mphsi_master
# 卸载包
opkg remove kmod-ch34x-mphsi-master如有技术问题,请联系:
- 技术邮箱: [email protected]
GPL-2.0
- 驱动版本: V1.4 (2024.02)
- 包版本: 1.4-1