本文介绍,基于USB2.0高速USB转接芯片CH347,配合厂商提供的USB转MPHSI(Multi Protocol High-Speed Serial Interface)Master总线驱动(CH34X-MPHSI-Master)为系统扩展I2C总线的用法,除此之外,还可以扩展SPI总线和GPIO等资源。
驱动软件正常工作后,会在系统下创建新的I2C Master,拥有独立的bus num,原I2C器件的设备驱动可直接挂载到该总线上,无需任何修改。
项目地址:GitHub - WCHSoftGroup/ch34x_mphsi_master_linux
应用框图:
CH347F 的I2C接口
PIN脚 | I2C功能脚 | GPIO复用脚 |
---|---|---|
11 | SCL | - |
12 | SDA | - |
CH347T 的I2C接口
PIN脚 | I2C功能脚 | GPIO复用脚 |
---|---|---|
11 | SCL | gpio3 |
12 | SDA | - |
CH347F/T支持至少4种I2C时钟:20kHz,100kHz,400kHz和750kHz。驱动配置的默认I2C时钟为100KHz,当前不支持动态修改该时钟频率,若需要修改可以在ch34x_mphsi_i2c_init函数中修改。
在Linux上增加对器件的驱动支持十分方便,只需要将该器件的设备驱动绑定到此Master驱动生成的总线下即可。举例:
modprobe bmi160_i2c echo "bmi160 0x68" > /sys/bus/i2c/devices/i2c-$DEV/new_device
或
modprobe tcs3472 echo "tcs3472 0x29" > /sys/bus/i2c/devices/i2c-$DEV/new_device
驱动创建的I2C设备文件在/sys/bus/i2c/devices/i2c-$DEV/ 目录下
使用i2c-tools工具
1、加载驱动程序后,USB设备工作正常时,系统日志如下:
2、查看扩展的I2C Master的信息:
3、从步骤 1和2可以确认系统为USB设备分配的bus num(总线编号)
4、使用 i2cdetect 指令扫描 i2c device设备(使用eeprom演示)
5、使用 i2cset 和 i2cget 命令读写入1字节
6、使用 i2ctransfer 命令读写多字节
更多的 ch347的master驱动特性,以及 i2c-tools 的用法可以交流补充~