I2C的协议内容在这里就不大费周章的描述,主要记录一些自己在实际应用过程中觉得有助于调试一些方法。
一、介绍I2C 的几个比较有用的tool
(1)i2cdetect
i2cdetect的主要功能就是I2C设备查询,它用于扫描I2C总线上的设备。它输出一个表,其中包含指定总线上检测到的设备的列表。
该命令的常用格式为:i2cdetect [-y] [-a] [-q|-r] i2cbus [first last]。具体参数的含义如下:
-y |
取消交互模式。默认情况下,i2cdetect将等待用户的确认, 当使用此标志时,它将直接执行操作。 |
---|---|
-a |
强制扫描非规则地址。一般不推荐。 |
-q |
使用SMBus“快速写入”命令进行探测。一般不推荐。 |
-r |
使用SMBus“接收字节”命令进行探测。一般不推荐。 |
-F |
显示适配器实现的功能列表并退出。 |
-V |
显示I2C工具的版本并推出。 |
-l |
显示已经在系统中使用的I2C总线。 |
i2cbus |
表示要扫描的I2C总线的编号或名称。 |
first last |
表示要扫描的从设备地址范围。 |
该功能的常用方式:
第一,先通过i2cdetect -l查看当前系统中的I2C的总线情况:
第二,若总线上挂载I2C从设备,可通过i2cdetect扫描某个I2C总线上的所有设备。可通过控制台输入i2cdetect -y 1:(其中"–"表示地址被探测到了,但没有芯片应答; "UU"因为这个地址目前正在被一个驱动程序使用,探测被省略;而16进制的地址号60,1e和50则表示发现了一个外部片选从地址为0x60,0x1e(AP3216)和0x50(eeprom)的外设芯片。
第三,查询I2C总线1 (I2C -1)的功能,命令为i2cdetect -F 1:
(2)i2cget
i2cget的主要功能是获取I2C外设某一寄存器的内容。该命令的常用格式为:
i2cget [-f] [-y] [-a] i2cbus chip-address [data-address [mode]]。具体参数的含义如下:
-f |
强制访问设备,即使它已经很忙。 默认情况下,i2cget将拒绝访问 已经在内核驱动程序控制下的设备。 |
---|---|
-y |
取消交互模式。默认情况下,i2cdetect将等待用户的确认,当使用此 标志时,它将直接执行操作。 |
-a |
允许在0x00 - 0x07和0x78 - 0x7f之间使用地址。一般不推荐。 |
i2cbus |
表示要扫描的I2C总线的编号或名称。这个数字应该与i2cdetect -l列出 的总线之一相对应。 |
chip-address |
要操作的外设从地址。 |
data-address |
被查看外设的寄存器地址。 |
mode |
显示数 |