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
    从信号上看,少了一个主设备的停止信号。看上去与从设备的工作模式有关系。
相关推荐
送外卖的CV工程师19 小时前
STM32+Makefile编译+OpenOCD 烧录调试
stm32·单片机·嵌入式硬件·makefile·调试·烧录·openocd
豆包公子20 小时前
程序流监控:AUTOSAR CP 功能安全在裸机 MCU 上的实现(理论篇)
运维·单片机·嵌入式硬件·安全·车载系统·autosar
编程之升级打怪20 小时前
单片机SPI硬件接口的要点
嵌入式硬件
Aaron_dw1 天前
PHY Eye Monitor 全栈技术说明书
嵌入式硬件
NQBJT1 天前
嵌入式从零开始(第十二篇):调试与工具链 —— 从 IDE 到逻辑分析仪
ide·stm32·单片机·嵌入式硬件·c#
广州灵眸科技有限公司1 天前
瑞芯微(EASY EAI)RV1126B 网络摄像头方案
开发语言·网络·科技·嵌入式硬件·物联网
豆包公子1 天前
程序流监控 —— AUTOSAR CP 功能安全在裸机 MCU 上的实现:实践篇
单片机·嵌入式硬件·学习
cici158741 天前
C# 五子棋小游戏源码(人机对战)
开发语言·单片机·c#
iCxhust1 天前
51单片机定时器PWM发生
stm32·单片机·51单片机
LCG元1 天前
STM32实战:基于STM32F103的智能宠物喂食器(定时+定量)
stm32·嵌入式硬件·宠物