CH347应用 USB转I2C功能之:开源项目i2c-tools工具的使用
CH347 高速USB转接芯片在Linux环境下的I2C调试。
目录
硬件介绍
CH347是一款高速USB总线转接芯片,通过USB总线提供异步串口、I2C同步串行接口、SPI同步串行接口和JTAG接口等。
芯片资源如下:
- 2个高速串口,最高波特率达9Mbps
- 1个2线I2C接口,作为Host/Master主机模式,最高速率1MHz
- 1个4线SPI接口,作为Host/Master主机模式,最高速率60MHz
- 1个JTAG接口,作为Host/Master主机模式,最高速率60MHz
- 1个SWD接口,作为Host/Master主机模式, 最高速率5MHz
具体信息可参考:
i2c-tools工具
i2c-tools 是一款在 Linux 系统下用于调试和操作 I2C(Inter-Integrated Circuit)总线及设备的开源命令行工具集。它允许开发者直接与应用层交互,无需编写额外代码,即可扫描设备、读写寄存器,是嵌入式系统开发和硬件调试的利器。
i2c-tools工具包包含多个实用工具名称:
| 工具名称 | 功能描述 | 基本使用示例 | 常用参数说明 |
|---|---|---|---|
| i2cdetect | 扫描 I2C 总线,列出连接的设备地址 | i2cdetect -y 1 |
-y: 非交互模式;-r: 使用 SMBus 读取模式扫描 |
| i2cset | 向指定 I2C 设备寄存器写入数据 | i2cset -y 1 0x48 0x01 0x55 |
-y: 非交互模式;-f: 强制访问;-r: 写入后读回验证 |
| i2cdump | 转储 I2C 设备所有寄存器的内容 | i2cdump -y 1 0x48 |
-y: 非交互模式;-f: 强制访问;-r FIRST-LAST: 指定寄存器范围 |
i2c-tools工具安装
Ubuntu等常规Linux系统直接使用相应apt install
sudo apt install i2c-tools
或git clone源码
git clone https://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git
CH347总线驱动安装
CH347在Linux下的驱动有:总线驱动、字符设备驱动两种,总线驱动支持I2C、SPI、GPIO操作,而字符设备驱动则在以上基础上增加支持JTAG、SWD操作。两种驱动互斥,不可同时使用!
i2c-tools工具使用的是总线驱动。
CH347 Linux总线驱动:
CH347 Linux字符设备驱动:
软件使用
安装完驱动后,接入CH347评估板,可观察到:
root@User:~# ls /dev/i2c*
/dev/i2c-0
设备已被识别,当前CH347总线编号0。
扫描总线设备
root@User:~# i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 52 53 54 55 56 57 -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
查看当前的I2C总线上所有已经挂载的设备地址。
CH347评估板默认挂载了一颗24C02 FLASH,每个地址255字节,总共2K字节容量。
拉取I2C设备数据
root@User:~# i2cdump -y -r 0x00-0xFF 0 0x50 b
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: ab cd 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f ????????????????
10: 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f ????????????????
20: 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f !"#$%&'()*+,-./
30: 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 0123456789:;<=>?
40: 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f @ABCDEFGHIJKLMNO
50: 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f PQRSTUVWXYZ[\]^_
60: 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f `abcdefghijklmno
70: 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f pqrstuvwxyz{|}~?
80: 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f ????????????????
90: 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f ????????????????
a0: a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af ????????????????
b0: b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf ????????????????
c0: c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf ????????????????
d0: d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df ????????????????
e0: e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef ????????????????
f0: f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff ???????????????.
该指令的含义:
从 I2C 总线 0 上地址为 0x50 的设备中,以字节方式读取 0x00 到 0xFF 所有寄存器值的调试命令。
-y : 开启自动应答;
-r 0x00-0xFF :指定读取设备中的寄存器地址为0x00-0xFF
0 0x50 b : 使用当前总线编号0(CH347)设备读取当前地址为0x50的设备,按b(byte)模式读取。
写入I2C设备数据
写入前先读取下数据:
root@User:~# i2cdump -y -r 0x00-0x00 0 0x50 b
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: ab ?
对0X50设备的0x00寄存器写入0xFF:
root@User:~# i2cset -y 0 0x50 0x00 0xff
再次回读:
root@User:~# i2cdump -y -r 0x00-0x00 0 0x50 b
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: ff ?
写入成功。
Windows下i2c-tools工具的使用
更多推荐



所有评论(0)