电气特性:
在正常工作时,gyro 工作电流为5mA,acc 工作电流为150uA。
SPI 时钟和数据电平范围 0 -3.6
结构框图如下:
硬件连接图如下:
note:
1. 通过PS引脚选择通讯协议,上拉引脚则选择的是I2C接口,(CSB1是给SPI片选使用的)。如下图:
2. 上电后陀螺仪在正常模式,加速度传感器 处于抑制模式。改变加速度传感器模式:
- 上电sensor
- 等1ms
- 写4 到寄存器to ACC_PWR_CTR
- 等450 ms
-
数据宽度:陀螺仪和加速度计都是16bit ,temp sensor是11bit,都是有符号数据。
-
传感器信号都会经过一个低通滤波器,所以需要设置一个采样频率和截止频率。截止频率就是能够通过的最大频率,采样频率一般为最大频率的2.56 (截止频率(fc)=采样频率(fs) / 2.56)。
-
我试过软复位ACC和GORY。但是好像导致I2C总线故障了。是不是需要在 power save mode 下进行,待验证。(已验证,确实需要)
-
FIFO部分:
- 可以配置INT 引脚作为中断信号输入,这个信号由外部提供。当这个信号有效时,数据记录至FIFO。
- 可以配置INT引脚作为输出引脚,当FIFO满或者超过设置水纹,产生输出信号。
I2C读数据,定义buf[6],buf[0] ->0x12 … buf[5]->0x17
I2C写数据:
I2C调试注意事项:
- 时钟信号只有在发送数据时才会产生。无数据发送时,SDA和SCL高电平。
- I2C时钟信号频率默认为400Kbps。设置过小可能频率达不到要求。
3. 当i2c时钟频率设置为400k,应用层设置为10ms读取数据时。
读取数据信号图:
连续读取GYRO和ACC时钟如下:
数据线如下:
可以看出两次数据读取时间间隔如下:4*60us = 2.4ms
设备树设置如下:
&i2c4 {status = "okay";clock-frequency = <400000>;BMI088: bmi088@18 {status = "okay";compatible = "iking,bmi088";reg = <0x18>;accelerometer {status = "okay";compatible = "iking,bmi088-accelerometer";chip-address = <0x18>;};gyroscope {status = "okay";compatible = "iking,bmi088-gyroscope";chip-address = <0x68>;};};
};
驱动和应用代码上传至:
https://download.csdn.net/download/qq_28219531/89306464
调试时注意:
- 如果读取芯片ID失败,可能端口配置问题。没配置或者配置冲突。可以使用示波器看时钟线有没有信号,频率是多少。
- 调试过程中出现了
i2c_designware 8280000.i2c4: i2c_dw_handle_tx_abort: lost arbitration
从信号上看,少了一个主设备的停止信号。看上去与从设备的工作模式有关系。