硬件上
SCL和SDA是连接到hi3516dv300上的,故需要复用及上(或下)拉使能等配置;
根据硬件SD0接地,芯片i2c地址应该是0x68;
首先遇到的问题:i2c没通;
(1) 查看设备树,检查是否使能;
(2) 复用功能选择,上下拉选择(himm工具);
(3) 通过i2c_read工具读写测试;
所有都配置好后,i2c依然没通,后面经过不断地尝试,发现是需要himm配置成内部下拉才能通;(上拉和下拉最好都试试,这是内部的上下拉,和硬件没关系);
总结:测试i2c是否通的快捷操作是:等app起来后,在终端控制里面,依次输入下面的三行;
himm 0x111F001C 0x201 (这是SCL的配置)
himm 0x111F00180x201 (这是SDA的配置)
i2c_read 0x2 0x68 0x00 通过i2c_read读i2c2,地址为0x68(读不到乘2试试),寄存器为0x00(一般测试时都是读芯片ID的寄存器);
若能读到则通,读不到则需要检查配置,主要还是himm的配置;这种方式可快速调试i2c配置及i2c是否通;
关于bmi160驱动
bmi160的驱动内核里面是有的,若内核版本过低没有课从其他高版本内核中拷过来;
make menuconfig选配,将驱动编译进内核(Y)或以模块形式(M)存在;
驱动位置在内核drivers/iio/imu/下,配置设备树可参考;
后续本来继续bmi160的,但是硬件突然改动,换成LSM6DS3了…,不过原理图一样,仅仅是芯片不一样而已;
只要i2c通