電氣特性:
在正常工作時,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
從信號上看,少了一個主設備的停止信號。看上去與從設備的工作模式有關系。