bmi088-linux驱动(I2C)

电气特性:

在正常工作时,gyro 工作电流为5mA,acc 工作电流为150uA。

SPI 时钟和数据电平范围 0 -3.6

结构框图如下:

硬件连接图如下:
note:

  1. 通过PS引脚选择通讯协议,上拉引脚则选择的是I2C接口,(CSB1是给SPI片选使用的)。如下图:

  2. 上电后陀螺仪在正常模式,加速度传感器 处于抑制模式。改变加速度传感器模式:

  • 上电sensor
  • 等1ms
  • 写4 到寄存器to ACC_PWR_CTR
  • 等450 ms
  1. 数据宽度:陀螺仪和加速度计都是16bit ,temp sensor是11bit,都是有符号数据。

  2. 传感器信号都会经过一个低通滤波器,所以需要设置一个采样频率和截止频率。截止频率就是能够通过的最大频率,采样频率一般为最大频率的2.56 (截止频率(fc)=采样频率(fs) / 2.56)。

  3. 我试过软复位ACC和GORY。但是好像导致I2C总线故障了。是不是需要在 power save mode 下进行,待验证。(已验证,确实需要)

  4. FIFO部分:

  • 可以配置INT 引脚作为中断信号输入,这个信号由外部提供。当这个信号有效时,数据记录至FIFO。
  • 可以配置INT引脚作为输出引脚,当FIFO满或者超过设置水纹,产生输出信号。

I2C读数据,定义buf[6],buf[0] ->0x12 ... buf[5]->0x17
I2C写数据:

I2C调试注意事项:

  1. 时钟信号只有在发送数据时才会产生。无数据发送时,SDA和SCL高电平。
  2. I2C时钟信号频率默认为400Kbps。设置过小可能频率达不到要求。
    3. 当i2c时钟频率设置为400k,应用层设置为10ms读取数据时。
    读取数据信号图:
    连续读取GYRO和ACC时钟如下:

    数据线如下:

    可以看出两次数据读取时间间隔如下:4*60us = 2.4ms

设备树设置如下:

bash 复制代码
&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

调试时注意:

  1. 如果读取芯片ID失败,可能端口配置问题。没配置或者配置冲突。可以使用示波器看时钟线有没有信号,频率是多少。
  2. 调试过程中出现了
    i2c_designware 8280000.i2c4: i2c_dw_handle_tx_abort: lost arbitration
    从信号上看,少了一个主设备的停止信号。看上去与从设备的工作模式有关系。
相关推荐
小宋同学在不断学习36 分钟前
stm32-掌握SPI原理(一)
stm32·单片机·spi
is081540 分钟前
STM32的 syscalls.c 和 sysmem.c
c语言·stm32·嵌入式硬件
学不动CV了1 小时前
数据结构---链表结构体、指针深入理解(三)
c语言·arm开发·数据结构·stm32·单片机·链表
szxinmai主板定制专家2 小时前
【精密测量】基于ARM+FPGA的多路光栅信号采集方案
服务器·arm开发·人工智能·嵌入式硬件·fpga开发
工业互联网专业6 小时前
汇编与接口技术:8259中断实验
汇编·单片机·嵌入式硬件·8259中断实验
brave and determined6 小时前
国产MCU学习Day6——CW32F030C8T6: I2C功能详解与应用案例
单片机·eeprom·i2c·cw32f030c8t6·cw32·cw32f030·中断读取eeprom
梁山1号6 小时前
【ESP32】3.串口的发送与接受
单片机·物联网
KaiGer6666 小时前
AUTOSAR进阶图解==>AUTOSAR_SWS_V2XFacilities
单片机·汽车·嵌入式·autosar
desssq8 小时前
SPI通信协议
单片机·嵌入式硬件
星辰pid10 小时前
STM32实现四自由度机械臂(SG90舵机)多功能控制(软件篇freertos)
stm32·单片机·嵌入式硬件·机械臂