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

设备树设置如下:

&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
    从信号上看,少了一个主设备的停止信号。看上去与从设备的工作模式有关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/12032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统定期执行命令的方法

系统定期执行命令的方法 一、进入超级用户下 执行命令&#xff1a;sudo su 二、添加要执行的命令 例子&#xff1a;每天0点执行一次myapp.sh命令 先后输入&#xff1a;crontab -e、 1、 回车 设置每天0点执行一次myapp.sh操作&#xff0c;需要写绝对路径 含义&#xff1…

离线修复.dll,Microsoft Visual C++

在安装mysql时遇到下面的问题&#xff0c;如果是有网络的情况下微软管网下载安装就行了&#xff0c;用的服务器不允许连接互联网。 后面经过寻找&#xff0c;找到了一个修复工具&#xff0c;可一次修复所有的问题&#xff0c;特别好用分享给宝子们。 下载链接&#xff1a;http…

树莓派 4B putty远程连接登录显示拒绝访问,密码修改

putty显示拒绝访问 可能是树莓派的ip没有找到正确的 在下载系统镜像的时候&#xff0c;会提示设置wifi 这里设置的WiFi和密码需记住&#xff0c;主机名也需记住 可以在手机打开热点&#xff08;将热点的账号和密码改为跟你设置的wifi一样的&#xff09; 可以在手机后台查看…

页面埋点H5 大数据uniapp 按需要更改代码就行

逻辑思路 跳转页面前&#xff0c;记录当前页面的信息停留的时长以及各种信息&#xff0c;然后等走的时候再将记录的信息发送出去 1.记录当前页面信息的函数 // 埋点通用接口 // triggerType: 必传 类型 entryStr(进入) || leaveStr(离开) || String:自定义事件描述 // pageU…

微信小程序支付教程

微信小程序支付教程 Person&#xff1a; 微信小程序支付有几种版本&#xff0c;分别是什么&#xff0c;写一个详细教程介绍下 ChatGPT&#xff1a; 微信小程序支付主要有两种版本&#xff0c;分别为&#xff1a;JSSDK版本&#xff08;v1.0&#xff09;和WeixinJSBridge版本&…

超宽输送带耐热性能怎么样

超宽输送带耐热性能解析 随着工业领域的不断发展和技术革新&#xff0c;超宽输送带的应用越来越广泛。这种输送带在冶金、建筑、化工等多个行业中发挥着至关重要的作用&#xff0c;特别是在高温环境下&#xff0c;其耐热性能更是备受关注。那么&#xff0c;超宽输送带的耐热性…

解释下泛型擦除

在Java中&#xff0c;泛型擦除&#xff08;Type Erasure&#xff09;是Java泛型实现的一个重要概念。由于Java的泛型是在编译时实现的&#xff08;称为编译时类型检查&#xff09;&#xff0c;而在运行时&#xff0c;Java虚拟机&#xff08;JVM&#xff09;并不支持泛型&#x…

HDFS小文件优化方法

1、HDFS小文件弊端 HDFS上每个文件都要在namenode上建立一个索引&#xff0c;这个索引的大小约为150byte&#xff0c;这样当小文件比较多的时 候 &#xff0c;就会产生很多的索引文件&#xff0c;一方面会大量占用namenode的内存空间 &#xff0c;另一方面就是索引文件过大是的…

Linux —— 线程控制

Linux —— 线程控制 创建多个线程线程的优缺点优点缺点 pthread_self进程和线程的关系pthread_exit 线程等待pthread_ join线程的返回值线程分离pthread_detach 线程取消pthread_cancel pthread_t 的理解 我们今天接着来学习线程&#xff1a; 创建多个线程 我们可以结合以前…

【离散数学】偏序关系中盖住关系的求取及格论中有补格的判定(c语言实现)

实验要求 求n的因子函数 我们将n的因子存入数组中&#xff0c;n的因子就是可以整除n的数&#xff0c;所以我们通过一个for循环来求。返回因子个数。 //求n的因子,返回因子个数 int factors(int arr[], int n) {int j 0;for (int i 1; i < n; i){if (n % i 0){arr[j] i…

C++反向迭代器

C反向迭代器 反向迭代器是用正向迭代器适配实现的&#xff0c;本质是写一个反向迭代器的类模板&#xff0c;给编译器传不同的容器的正向迭代器实例化&#xff0c;编译器去实例化出各种类模板对应的反向迭代器。 #pragma once namespace my_reverse_iterator {template<cla…

代码随想录算法训练营第五十三天| 1143.最长公共子序列,1035.不相交的线,53. 最大子序和

目录 题目链接&#xff1a;1143.最长公共子序列 思路 代码 题目链接&#xff1a; 1035.不相交的线 思路 代码 题目链接&#xff1a; 53. 最大子序和 思路 代码 总结 题目链接&#xff1a;1143.最长公共子序列 思路 ①dp数组&#xff0c;dp[i][j]表示[0,i-1]的text1和…

软件测试面试78问

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、问&#xff1a;你在测试中发现了一个bug&#xff0c;但是开发经理认为这不是一个bug&#xf…

关于使用git拉取gitlab仓库的步骤(解决公钥问题和pytho版本和repo版本不对应的问题)

先获取权限&#xff0c;提交ssh-key 虚拟机连接 GitLab并提交代码_gitlab提交mr-CSDN博客 配置完成上诉步骤之后&#xff0c;执行下列指令进行拉去仓库的内容 sudo apt install repo export PATHpwd/.repo/repo:$PATH python3 "实际路径"/repo init -u ssh://gitxx…

智能优化算法 | Matlab实现成长优化算法(Growth Optimizer,GO)(内含完整源码)

智能优化算法 | Matlab实现成长优化算法(Growth Optimizer,GO)(内含完整源码) 文章目录 智能优化算法 | Matlab实现成长优化算法(Growth Optimizer,GO)(内含完整源码)文章概述源码设计文章概述 智能优化算法 | Matlab实现成长优化算法(Growth Optimizer,GO)(内含…

Java的类和对象(一)—— 初始类和对象,this关键字,构造方法

前言 从这篇文章开始&#xff0c;我们就进入到了JavaSE的核心部分。这篇文章是Java类和对象的第一篇&#xff0c;主要介绍类和对象的概念&#xff0c;this关键字以及构造方法~~ 什么是类&#xff1f;什么是对象&#xff1f; 学过C语言的老铁们&#xff0c;可以类比struct自定义…

【哈希】Leetcode 383. 赎金信【简单】

赎金信 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 解题思路 可以使用哈希…

matlab进行滤波处理

在MATLAB中进行滤波处理&#xff0c;你可以使用内置的函数或自定义滤波器。以下是一些常见的方法&#xff1a; 1. 使用内置滤波器函数 MATLAB提供了多种内置滤波器函数&#xff0c;如filter&#xff0c;filtfilt&#xff0c;butter&#xff08;用于设计巴特沃斯滤波器&#x…

spark结课之tip2

spark常用方法总结&#xff1a; 一、从内部创建RDD (1).通过并行化集合&#xff08;Parallelized Collections&#xff09;&#xff1a; 可以使用SparkContext的parallelize方法将一个已有的集合转换为RDD。 基本语法&#xff1a; parallelize(collection, numSlicesNone)…

AI系列:大语言模型的RAG(检索增强生成)技术(下)-- 使用LlamaIndex

目录 前言什么是LlamaIndex?LlamaIndex代码设置embedding模型设置LLM模型索引查询机 验证使用感受参考资料 前言 继上一篇文章AI系列&#xff1a;大语言模型的RAG&#xff08;检索增强生成&#xff09;技术&#xff08;上&#xff09;&#xff0c;这篇文章主要以LlamaIndex为…