【嵌入式linux开发】SPI设备文件操作BMI088传感器

【嵌入式linux开发】SPI设备文件操作BMI088传感器

前言

在本篇博客中,将从BMI088传感器的数据手册出发,简单了解之后,展示如何通过SPI设备文件与传感器进行通信。除了使用linux文件设备操作spi接口,此传感器还需要gpio来控制当前通信对象。主控是旭日x3 module,底板是公司画的。

数据手册直接浏览器搜索BMI088数据手册就可以找到。BMI088_Datasheet.pdf是此传感器最基本的数据手册,按照这个数据手册进行配置的话没法使用fifo和中断,如果想使用这两个功能的话还需要单独下载两个数据手册。本文只介绍最简单的数据读取


一、数据手册浅读

一开始是对传感器的总体介绍,BMI088是一种惯性测量单元(IMU),用于检测6个自由度(6DoF)的运动和旋转。它将两个惯性传感器的功能结合在一个设备中:一个先进的三轴16位陀螺仪和一个通用的、领先的三轴16位加速度计,也就是这个传感器里面集成了另外两个设备。
在这里插入图片描述


第一章描述该传感器的电气特性,对编写代码的工作不重要。
在这里插入图片描述


第二章是传感器的框图,比较重要可以仔细看。
在这里插入图片描述


第三章是快速开始:
①首先说明了传感器使用的接口(iic或spi)是在硬件设计时,通过控制上图PS的高低电平来确定的,如果PS接高电平则使用iic接口,反之使用spi接口(这里又可以细分:陀螺仪部分的接口初始化是根据PS来选择的,但是加速度计部分默认就是以iic接口进行初始化,所以如果想让加速度计的接口也使用spi,就需要给CSB1引脚一个上升沿);②这里还介绍了一种方法,在初始化阶段将加速度计更改spi模式:执行一个虚拟的SPI读取操作,也就是在初始化时直接使用spi方法,控制主机读取加速度计寄存器的值,这样就不需要通过控制CSB1来更改接口模式了;
③上电复位之后,陀螺仪直接处于正常模式,但是加速度计是处于暂停模式的,这里后续讲到寄存器时会介绍如何控制加速度计进入正常模式。
在这里插入图片描述


第四章是传感器的功能描述:
介绍了电源管理、传感器数据、自测、中断等,主要看看电源管理、传感器数据,这两个。自测和中断都用不到。
传感器数据这部分说明了一件事:提供了一种在I2C或SPI模式下读取角速率数据的有效方法。在突发访问期间,传感器在每个字节之后自动增加起始读地址。只要突发读访问处于活动状态,所有读出寄存器中的传感器数据(角速率或加速度数据)都被锁定。以突发读访问方式读取各陀螺仪和加速度计部件的传感器数据寄存器,确保所有读出寄存器中的传感器值属于同一样本。
在这里插入图片描述


第五章是寄存器映射,也是最重要的部分:
与设备的整个通信是通过对寄存器的读写来完成的。寄存器的宽度为8位;它们被映射到一个8位的地址空间。加速度计和陀螺仪有单独的寄存器图(这里也意味着操作的寄存器即使名字相同,它们的地址也不同)。通过选择相应的芯片选择引脚(SPI模式)或i2c地址(i2c模式),在数字接口级别上完成适当的寄存器映射的选择。
这部分分为加速度计和陀螺仪两个部分,从数据手册来看很多寄存器的地址是一样的,但实际上这是两个分离的设备,所以同一时刻只能读取加速度计或者陀螺仪的数据,因此寄存器地址也就不存在冲突了。

下面我把后续代码中会用到的寄存器截图出来,并给出一些配置的介绍,因为篇幅原因只介绍加速度计,陀螺仪是差不多的流程:
①首先设置加速度计量程,本文选自6G
在这里插入图片描述
在这里插入图片描述

②设置加速度计初始化寄存器中的ODR,表示输出频率,这里选择100hz。
在这里插入图片描述
在这里插入图片描述

③设置加速度计电源初始化与电源控制寄存器,要使得加速度计处于正常模式,需要像CONF寄存器写入0x04,
向CTRL寄存器写入0x00。
在这里插入图片描述
在这里插入图片描述
按照上面这样设置之后加速度计就可以读取数据了。
注意要配置好spi设备的片选信号引脚,在操作设备前选择好当前通信的是加速度计还是陀螺仪。这里使用文件io操作,具体可以看正点原子的嵌入式应用开发文档,有详细介绍。引脚初始化完成后最终通过下面这两个函数来控制片选引脚:
在这里插入图片描述
需要注意的是根据文档,片选信号为低电平时表示选中,所以上电之后要先将片选信号引脚置高电平,等到要操作加速度计或者陀螺仪时再拉低对应片选即可。

④加速度计数据,传感器输出以带符号的16位数字以2的补码格式存储在每2个寄存器中。当读取包含加速值的LSB值的寄存器时,相应的MSB寄存器在内部被锁定,直到它被读取。通过这种机制,可以确保LSB和MSB值属于相同的加速值,并且在各个寄存器的读出之间不会更新。
在这里插入图片描述


第六章是数字接口部分,详细介绍IIC和SPI通信协议的使用和注意事项。
在这里插入图片描述
这部分关注的重点就是spi协议读取数据的格式,也就是6.1.2小节。通过保持低CSB(片选信号)并继续数据传输(即继续切换SCK),可以实现多个读取操作(突发读取)。只需要写入第一个寄存器地址。只要CSB保持低活动状态,每次读访问后地址都会自动增加。
在这里插入图片描述
在加速度计部分读取操作的情况下,请求的数据不立即发送,而是首先发送一个虚拟字节,在这个虚拟字节之后发送实际请求的寄存器内容,意思就是你发送一个请求给传感器,假设是数据请求,此时它会响应,并发送7个字节的数据回来,第一个字节是没用的需要抛弃,后面六个字节就是加速度计数据。


第七章是一些连接示意图,看看就好了。


二、代码

之后加

猜你喜欢

转载自blog.csdn.net/m0_71523511/article/details/142375715