编译会生成五个工具:i2cdetect、i2cset、i2cget、i2cdump、i2ctransfer,拷贝到开发板中就可以使用;也可以直接把 i2c-tools 源码包放到自己的源码中,直接编译进固件 i2cdetect:用于扫描 i2c 总线上的设备,并显示地址 i2cset:设置i2c设备某个寄存器的值 i2cget:读取i2c设备某个寄存器的值 i2cdump:读取某个i2c设备所有寄存器的值 :用于扫描 i2c 总线上的设备 Usage: i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST] i2cdetect -F I2CBUS /i2cdetect -r -y 0 -- 表示该地址被检测,但是没有芯片应答,UU 表示该地址被当前内核驱动使用。 /i2cdetect -F i2cbus 查询总线的功能 ./i2cdetect -V 打印软件版本号 .
编译完成后,会在tools目录下产生i2cdetect,i2cdump,i2cget,i2cset,i2ctransfer五个产物。将这些可执行文件拷贝到设备上。 i2c-tools使用方法 i2cdetect i2cdetect用來列举I2C bus和上面所有的设备,可接受的参数有 Usage: i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST] i2cdetect -F I2CBUS i2cdetect -l I2CBUS is an integer or an I2C bus name /i2cdetect -V i2cdetect version 4.3 -l:输出所有 i2c 总线,如下总线编号有twi1和twi2,或者1和2 debian@npi:/mnt/mnt$ . /i2cdetect -a 1 WARNING! This program can confuse your I2C bus, cause data loss and worse!
测试 在开发板上执行: [root@100ask:~]# i2cdetect -l // 加载i2c-gpio.ko前只看到2条I2C BUS i2c-1 i2c 21a4000 i2c-gpio.ko [ 45.067602] i2c-gpio i2c_gpio_100ask: using pins 116 (SDA) and 117 (SCL) [root@100ask:~]# i2cdetect i2c 21a0000.i2c I2C adapter [root@100ask:~]# [root@100ask:~]# i2cdetect
apt-get install i2c-tools linux版本代码下载路径: https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/ 一、i2cdetect 1、命令 root@linaro-alip:/# i2cdetect Error: No i2c-bus specified! Usage: i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST] i2cdetect -F I2CBUS i2cdetect -l bus name If provided, FIRST and LAST limit the probing range. 2、用法 ## 列出i2c总线 root@linaro-alip:/# i2cdetect DesignWare HDMI I2C adapter ## 列出某个i2c总线上的i2c设备 root@linaro-alip:/# i2cdetect
“import PCF8591 as ADC” # # ADC.Setup(Address) # 查询PCF8591的地址:“sudo i2cdetect -y 1” # i2cdetect is a userspace program to scan an I2C bus for devices. # It outputs a table with 代表 /dev/i2c-1 ,具体看使用的树莓派那个I2C来决定 bus = smbus.SMBus(1) #创建一个smbus实例 #在树莓派上查询PCF8591的地址:“sudo i2cdetect temp) #写入字节数据,将数字值转化成模拟值从AOUT输出 if __name__ == "__main__": setup(0x48) #在树莓派终端上使用命令“sudo i2cdetect
“import PCF8591 as ADC” # # ADC.Setup(Address) # 查询PCF8591的地址:“sudo i2cdetect -y 1” # i2cdetect is a userspace program to scan an I2C bus for devices. # It outputs a table with 代表 /dev/i2c-1 ,具体看使用的树莓派那个I2C来决定 bus = smbus.SMBus(1) #创建一个smbus实例 #在树莓派上查询PCF8591的地址:“sudo i2cdetect temp) #写入字节数据,将数字值转化成模拟值从AOUT输出 if __name__ == "__main__": setup(0x48) #在树莓派终端上使用命令“sudo i2cdetect
i2cconfig:用于配置i2c,包括速率、引脚等; i2cdetect:用于检测总线上是否存在设备; i2cget:用于读取寄存器; I2cset:用于设置寄存器; i2cdump:用于测试寄存器等 5、检测总线上的设备 输入i2cdetect即可: ? 可以看到存在地址为0x3c的设备,这也正是0.96 OLED的地址。其他i2c设备也是类似的操作,可以用于检测设备是否正常。
可以修改源码包中的Makefile编译成不通平台的可执行文件, 下载地址: 这里 这里为了快速构建直接使用buildroot 中自带的/buildroot/package/i2c-tools编译 工具使用 i2cdetect Device i2cdump : 罗列出 Device上所有的 Register值 i2cset : 修改Bus上的某个 Device上的 Register值 罗列出设备上共有的i2c总线 # i2cdetect adapter i2c-0 i2c Meson I2C adapter I2C adapter 查看i2c0上挂载的设备 # i2cdetect GPIOAO_3 0>; mic_pin = <&gpio_ao GPIOAO_6 0>; }; 继续看一下i2c1总线上挂载的设备: # i2cdetect
“import PCF8591 as ADC” # # ADC.Setup(Address) # 查询PCF8591的地址:“sudo i2cdetect -y 1” # i2cdetect is a userspace program to scan an I2C bus for devices. # It outputs a table with 代表 /dev/i2c-1 ,具体看使用的树莓派那个I2C来决定 bus = smbus.SMBus(1) #创建一个smbus实例 #在树莓派上查询PCF8591的地址:“sudo i2cdetect temp) #写入字节数据,将数字值转化成模拟值从AOUT输出 if __name__ == "__main__": setup(0x48) #在树莓派终端上使用命令“sudo i2cdetect
编译 tar -xzvf i2c-tools-4.1.tar.gz cd i2c-tools-4.1 make 安装 sudo make install 运行使用 查看所有的I2C总线 sudo i2cdetect sudo i2cdetect -y 1 查看I2C的信息, I2C0和I2C1上是有挂载设备的,为啥排针上的I2C却不能用呢?
“import PCF8591 as ADC” # # ADC.Setup(Address) # 查询PCF8591的地址:“sudo i2cdetect -y 1” # i2cdetect is a userspace program to scan an I2C bus for devices. # It outputs a table with 代表 /dev/i2c-1 ,具体看使用的树莓派那个I2C来决定 bus = smbus.SMBus(1) #创建一个smbus实例 #在树莓派上查询PCF8591的地址:“sudo i2cdetect temp) #写入字节数据,将数字值转化成模拟值从AOUT输出 if __name__ == "__main__": setup(0x48) #在树莓派终端上使用命令“sudo i2cdetect
“import PCF8591 as ADC” # # ADC.Setup(Address) # 查询PCF8591的地址:“sudo i2cdetect -y 1” # i2cdetect is a userspace program to scan an I2C bus for devices. # It outputs a table with 代表 /dev/i2c-1 ,具体看使用的树莓派那个I2C来决定 bus = smbus.SMBus(1) #创建一个smbus实例 #在树莓派上查询PCF8591的地址:“sudo i2cdetect temp) #写入字节数据,将数字值转化成模拟值从AOUT输出 if __name__ == "__main__": setup(0x48) #在树莓派终端上使用命令“sudo i2cdetect
4) 介绍I2C tools各功能之—i2cdetect i2cdetect的主要功能就是I2C设备查询,它用于扫描I2C总线上的设备。它输出一个表,其中包含指定总线上检测到的设备的列表。 该命令的常用格式为:i2cdetect [-y] [-a] [-q|-r] i2cbus [first last]。具体参数的含义如下: -y 取消交互模式。 该功能的常用方式: 第一,先通过i2cdetect -l查看当前系统中的I2C的总线情况: 第二,若总线上挂载I2C从设备,可通过i2cdetect扫描某个I2C总线上的所有设备。 这个数字应该对应于i2cdetect -l列出的总线之一。 first last 表示要扫描的从设备地址范围。 这个数字应该对应于i2cdetect -l列出的总线之一。
“import PCF8591 as ADC” # # ADC.Setup(Address) # 查询PCF8591的地址:“sudo i2cdetect -y 1” # i2cdetect is a userspace program to scan an I2C bus for devices. # It outputs a table with 代表 /dev/i2c-1 ,具体看使用的树莓派那个I2C来决定 bus = smbus.SMBus(1) #创建一个smbus实例 #在树莓派上查询PCF8591的地址:“sudo i2cdetect temp) #写入字节数据,将数字值转化成模拟值从AOUT输出 if __name__ == "__main__": setup(0x48) #在树莓派终端上使用命令“sudo i2cdetect
“import PCF8591 as ADC” # # ADC.Setup(Address) # 查询PCF8591的地址:“sudo i2cdetect -y 1” # i2cdetect is a userspace program to scan an I2C bus for devices. # It outputs a table with 代表 /dev/i2c-1 ,具体看使用的树莓派那个I2C来决定 bus = smbus.SMBus(1) #创建一个smbus实例 #在树莓派上查询PCF8591的地址:“sudo i2cdetect temp) #写入字节数据,将数字值转化成模拟值从AOUT输出 if __name__ == "__main__": setup(0x48) #在树莓派终端上使用命令“sudo i2cdetect
“import PCF8591 as ADC” # # ADC.Setup(Address) # 查询PCF8591的地址:“sudo i2cdetect -y 1” # i2cdetect is a userspace program to scan an I2C bus for devices. # It outputs a table with 代表 /dev/i2c-1 ,具体看使用的树莓派那个I2C来决定 bus = smbus.SMBus(1) #创建一个smbus实例 #在树莓派上查询PCF8591的地址:“sudo i2cdetect temp) #写入字节数据,将数字值转化成模拟值从AOUT输出 if __name__ == "__main__": setup(0x48) #在树莓派终端上使用命令“sudo i2cdetect
1、确定I2C地址 1.1、使用i2cdetect工具查看系统i2c节点的情况 很明显这里可以看到系统已经配置了i2c-0、i2c-1、i2c-3、i2c-4、i2c-5,我们可以看下原厂在设备树里面的支持情况 1.2、使用i2cdetect工具确定设备地址 由于我的触摸屏是连接在I2C5上,硬件原理图如下所示: 但是我还没有实现它的驱动,所以可以通过i2cdetect工具来确定设备的I2C地址是多少,ARM 端执行以下命令: i2cdetect -y 5 这个命令中,-y表示Disable interactive mode,简单地说就是别让我确认了,赶紧执行;5表示I2C总线5(从0开始),执行后可以看到
“import PCF8591 as ADC” # # ADC.Setup(Address) # 查询PCF8591的地址:“sudo i2cdetect -y 1” # i2cdetect is a userspace program to scan an I2C bus for devices. # It outputs a table with 代表 /dev/i2c-1 ,具体看使用的树莓派那个I2C来决定 bus = smbus.SMBus(1) #创建一个smbus实例 #在树莓派上查询PCF8591的地址:“sudo i2cdetect temp) #写入字节数据,将数字值转化成模拟值从AOUT输出 if __name__ == "__main__": setup(0x48) #在树莓派终端上使用命令“sudo i2cdetect
它是一个工具集,具体包括如下工具: i2cdetect: i2c总线探测工具,探测总线上的I2C设备 i2cdump:i2c总线dump工具 i2cget:i2c读取工具 i2cset: i2c写入工具 i2cdetect i2cdetect用于扫描设备的 I2C 总线。 它输出一个表,其中包含指定总线上检测到的设备列表。 由于没有标准的 I2C 检测命令,i2cdetect 使用任意 SMBus 命令(即 SMBus 快速写入和 SMBus 接收字节)来探测设备。 Usage: i2cdetect [-y] [-a] [-q|-r] I2CBUS [FIRST LAST] -y 禁用交互模式。 默认情况下,i2cdetect 会在处理 I2C 总线之前等待用户的确认。 使用此标志时,将直接执行操作。这主要是为了在脚本中使用。 -a 强制扫描非常规地址。 不建议。
I2C总线是否添加上拉电阻(OD输出特性);检查同组设备地址是否冲突;测量波形:空闲状态应为高电平,数据传输时波形需符合标准;调整上拉电阻阻值:上升沿缓慢可减小阻值,低电平过高可增大阻值;使用工具检测:i2cdetect -l # 检测I2C总线组i2cdetect -r -y 2 # 检测第2组总线设备3.