介绍 i2c-tools是一个专门调试i2c接口的开源工具,可以获取挂载的设备及设备地址,具有在对应的设备上读取和设置寄存器值等功能。 在ELF 1的资料包当中,已经放置了下载好的源码,路径为:ELF 1开发板资料包 6-常用工具 6-5 测试工具 i2c-tools-4.3.tar.gz 源码下载 根据提示我们在这里链接,进入i2c-tools源码仓库。 我们选择最新版i2c-tools-4.3.tar.gz,点击开始下载 交叉编译i2c-tools (一)在虚拟机/home/elf/work下新建一个i2ctools文件夹: (二)将i2c-tools-4.3.tar.gz拷贝到虚拟机当前目录,并解压: (三)配置环境变量: (四)查看环境变量是否设置成功: (五)修改Makefile 查看CC、AR、STRIP三个变量 修改为如下形式: (六)执行make开始编译 (七)编译完成后会在tools下生成可执行文件: (八)将i2cdetect,i2cdump,i2cget,i2cset,i2ctransfer拷贝到开发板/usr/bin目录下 (九)将 lib下的库文件拷贝到开发板/usr/lib目录下 i2c-tools用法 (一)首先检测系统上有几组i2c总线: 可以看到,系统中存在两组i2c总线:i2c-0、i2c-1 (二)用i2cdectect检测挂载在i2c总线上的器件: 在i2c-1总线上挂载了三个设备,设备地址为0x1a、0x29、0x39。其中0x1a和0x29的位置为UU,表示既有设备也有驱动;0x39的位置只显示数字,表示检测到了设备但是没有对应驱动; (三)用i2cdump查看器件所有寄存器的值: 注意:用i2cdump读设备下所有寄存器的值时,第一次读到0x81寄存器的值为0xdb,再次使用i2cdump读取,寄存器的值就变成了0xda,bh1726的手册当中有相关介绍,0xe4是一条特殊命令,写入0xe4后,bh1726会进行软复位,将所有寄存器值恢复到默认状态。使用i2c-tools工具读取寄存器值时,其实是先将寄存器地址写入到i2c设备,再发送读的信号。所以当读取0xe4这个地址时,会触发bh1726的软复位。 注意i2cdump是读取设备的所有寄存器,如何读单个寄存器的值呢,我们可以使用i2cget。但是如何确定要读的单个寄存器的地址呢?下面我们看一下芯片手册。 打开ELF 1开发板资料包 5-硬件资料 5-2 芯片数据手册bh1726nuc-e.pdf,选择Register MAP章节查看寄存器地址。 从上图可知,要读取寄存器,需要添加一个偏移地址:100_Register Address[4:0] 如tiMING寄存器地址为0x01,那么就是100_00001,即0x81。 (四)i2cget读单个寄存器值: 在驱动中已经对寄存器进行了设置,所以在读取寄存器之前,先通过读取0xe4的方式,写入0xe4这一条特殊命令,给bh1726进行软复位,然后再进行寄存器的读取。 用i2cget读到i2c-1总线上0x29设备的0x81寄存器值为0xda。 (五)i2cset设置单个寄存器值: 用i2cset设置i2c-1上0x29设备的0x81寄存器值为0xff; 用i2cget读i2c-1上0x29设备的0x81寄存器值为0xff。 (六)用i2ctransfer写/读寄存器: 格式: 1:代表i2c总线号i2c-1; w:代表写; w2:代表写2Byte; 0x29:代表设备地址为0x29; 0x81:代表偏移0x81; 0xff:代表要写入的数据; i2ctransfer是严格按照i2c协议读写时序操作的,我们想读取0x29的0x81的寄存器值,需要先把0x81发送给从设备,所以用到了w1写1个字节,之后才是r1读1字节数据。
|