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

参见