openSUSE:I2C
i2c-tools
i2c-tools 包含一组从命令行访问 I2C 的工具。
安装
要安装 i2c-tools,只需从主 OSS 仓库安装即可。
也提供一键安装:https://software.opensuse.net.cn/package/i2c-tools
加载 i2c-dev 内核模块
要能够从用户空间访问 I2C,您需要在每次启动时加载 i2c-dev 内核模块。
modprobe i2c-dev
要使其在每次启动时自动加载,请创建 /etc/modules-load.d/10-i2c.conf 文件,内容如下
# Load i2c-dev.ko i2c-dev
对于 Raspberry Pi(所有版本),您需要通过将以下行添加到 /boot/efi/extraconfig.txt 来启用 I2C-1 访问
# Enable I2C access from Linux dtparam=i2c_arm=on # Uncomment following line to set i2c-1 baudrate to 400 000 Hz (default i2c-1 baudrate is 100 000 Hz) # dtparam=i2c_arm_baudrate=400000
检查可用的 I2C 总线:i2cdetect -l
i2cdetect -l 将列出所有 I2C 总线。
i2cdetect -l 将为 RPi3 返回
i2c-1 i2c bcm2835 I2C adapter I2C adapter i2c-2 i2c bcm2835 I2C adapter I2C adapter
检查 I2C 总线上的可用设备
i2cdetect -y 1 将列出总线 1 上的所有设备。
i2cdetect -y 2 将列出总线 2 上的所有设备,并将为 RPi3 返回
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- 3a -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
这意味着我们有响应地址 0x3A(十进制为 58)和 0x50(十进制为 80)的设备。
转储 I2C 总线上设备的寄存器
i2cdump -y 2 0x50 将转储 I2C 总线号 2 上地址为 0x50 的 I2C 设备的寄存器,并将为连接到 HP LE2201w 显示器的 RPi3 返回
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 00 ff ff ff ff ff ff 00 22 f0 43 28 01 01 01 01 ........"?C(????
10: 2f 13 01 03 a0 2f 1e 78 ee b1 30 a5 56 4a 9a 25 /????/?x??0?VJ?%
20: 11 50 54 a5 6b f0 81 40 81 80 95 00 a9 00 b3 00 ?PT?k??@???.?.?.
30: 01 01 01 01 01 01 21 39 90 30 62 1a 27 40 68 b0 ??????!9?0b?'@h?
40: 36 00 d9 28 11 00 00 1c 00 00 00 fd 00 32 4c 18 6.?(?..?...?.2L?
50: 50 11 00 0a 20 20 20 20 20 20 00 00 00 fc 00 48 P?.? ...?.H
60: 50 20 4c 45 32 32 30 31 77 0a 20 20 00 00 00 ff P LE2201w? ....
70: 00 43 4e 4b 39 34 37 30 34 33 44 0a 20 20 01 f2 .CNK947043D? ??
80: 02 03 23 f1 4b 10 1f 84 13 00 00 02 03 00 00 00 ??#?K????..??...
90: 23 09 07 07 83 01 00 00 e2 00 0f 67 03 0c 00 20 #?????..?.?g??.
a0: 00 80 2d 01 1d 00 72 51 d0 1e 20 6e 28 55 00 10 .?-??.rQ?? n(U.?
b0: 09 00 00 00 1e 00 00 00 00 00 00 00 00 00 00 00 ?...?...........
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ce ...............?
读取 I2C 总线上设备的寄存器(如果寄存器可读)
i2cget -y 2 0x50 0x60 将从 I2C 总线号 2 上地址为 0x50 的 I2C 设备的寄存器 0x60 读取,并将为连接到 HP LE2201w 显示器的 RPi3 返回
0x50
您还可以使用 i2ctransfer -y 2 w1@0x50 0x60 r8 从 I2C 总线号 2 上地址为 0x50 的 I2C 设备的偏移量(寄存器)0x60 读取 8 个字节,并将为连接到 HP LE2201w 显示器的 RPi3 返回
0x50 0x20 0x4c 0x45 0x32 0x32 0x30 0x31
写入 I2C 总线上设备的寄存器(如果寄存器可写)
i2cset -y 2 0x50 0x60 0x0 将将值 0x0 写入 I2C 总线号 2 上地址为 0x50 的 I2C 设备的寄存器 0x60,并将为连接到 HP LE2201w 显示器的 RPi3 返回
0x50
python3-smbus
python3-smbus 包包含从 i2c-tools 到 python3 的绑定,用于从 python3 访问 I2C。
安装
要安装 python3-smbus,您需要为您的 openSUSE 发行版添加 Base:System 仓库。例如,对于 Factory ARM:https://download.opensuse.org/repositories/Base:/System/openSUSE_Factory_ARM/Base:System.repo
也提供一键安装:https://software.opensuse.net.cn/package/python3-smbus
示例
从总线 i2c-1、设备 0x5C、寄存器 0x20 获取数据的脚本示例
#!/usr/bin/python3
import smbus
# Define I2C bus to use
bus = smbus.SMBus(1)
# Define I2C device address
device = 0x5C
# Define register adress
reg = 0x20
data = bus.read_i2c_block_data(device, reg)
#data = bus.read_word_data(device, reg)
print("Data: " + str(data))
您可以在 smbus2 文档 中获取更多详细信息,除了您需要使用 import smbus 代替 import smbus2