当前位置: 首页 > ops >正文

杰理蓝牙耳机开发--三轴加速度传感器与IIC通信

杰理蓝牙耳机开发--三轴加速度传感器与IIC通信

  • 三轴加速度传感器
  • 杰理SDK IIC使用
  • 杰理Gsensor代码浅析

最近在使用杰理AC710N芯片进行蓝牙耳机开发,由于设计上没有触摸的区域,耳机选择了使用外置三轴加速度传感器检测敲击来控制蓝牙耳机上的操作。本篇文章以杰理AC710N-SDK为例,简单介绍了SDK中如何使用IIC来驱动三轴加速度传感器实现敲击的功能。

三轴加速度传感器

三轴加速度传感器,又称三轴加速度计,主要用于测量物体在空间中的加速度,也就是物体速度变化的快慢。其工作原理是将空间加速度分解到 X、Y、Z 三个轴上,从技术层面而言,三个单轴传感器经过组合可形成一个三轴传感器。在蓝牙耳机中,搭载三轴加速度传感器能够实现常见的敲击检测、计步等功能。

以下场景中所使用的三轴加速度计采用是ST公司的LIS2DOC传感器,该传感器支持IIC/SPI通信,这里我们硬件接线选择使用的是IIC的接线方式,如下图CS脚接入IOVDD时采用IIC的通信方式。
三轴传感器硬件接线

杰理SDK IIC使用

IIC(Inter-Integrated Circuit)是一种总线结构,最早是由Philips公司开发,是一种串行通信总线,IIC总线有着独特的两线制设计和灵活的通信能力,实现比较简单,大大降低了系统的复杂性和成本,因此广泛运用在现代电子和嵌入式系统中。IIC总线上有主设备(一般是主控)和从设备(一般是各种传感器)两种角色,数据传输由主机控制。杰理SDK支持主从两种角色,SDK中本身带有硬件IIC以及软件IIC的驱动。当耳机作为主机时推荐使用软件IIC来与从机进行通信操作。
参考源代码文件iic_soft.c和iic_soft.h。
杰理可视化SDK 软件IIC接口

杰理Gsensor代码浅析

以下以杰理AC710N-SDK为例,对gsensor敲击代码流程进行简要分析。

  1. Makefile文件修改
    在SDK中的Makefile文件加入外置gsensor代码存放路径,以便将外置传感器驱动代码编译进项目工程,同时添加自定义的外置gsensor宏定义使能。具体配置如下:
    makefile修改
  2. board cfg头文件配置
    头文件中加入三轴传感器硬件接口的定义,分别将gsensor中断引脚、IIC时钟、IIC数据引脚映射到杰理芯片GPIO上。
    头文件配置
  3. 链接脚本文件配置
    修改app.ld链接脚本文件,指定编译器将ext_gsensor驱动代码放入.text段中。
    ext_gsensor_dev_begin和ext_gsensor_dev_end代表驱动代码段的起始地址位置与结束地址。KEEP关键字确保这些段不会被链接器优化掉。
    链接脚本文件配置
  4. ext_gsensor_manage实现
    软件中实现ext_gsensor_manage,可以模仿SDK中自带的姿态传感器imusensor_manage或eartouch_manage来实现满足我们需求的ext_gsensor_manage,如下图,一般manage负责启用传感器芯片的初始化,使能传感器中断、调用中断回调等操作。
    gsensor_manage
  5. 开机初始化调用
    在开机board_init()函数中调用启动ext_gsensor_manage,并将gsensor的硬件platform配置传入manage。
    开机初始化调用
  6. 传感器驱动部分
    接着完成lis2doc三轴传感器驱动部分,直接将传感器原厂编写好的功能函数文件放入工程。主要在lis2doc_reg.c以及list2doc_reg.h文件,这样可以使用原厂写好的函数方式对三轴传感器进行配置,这样可以避免直接操作传感器寄存器这种配置的方式。
    传感器驱动1
    使用ST原厂自带的驱动方式只需要将IIC读写函数传给原厂驱动即可。
    传感器驱动2
  7. 传感器初始化
    使用ext_gsensor_manage模块提供的注册方法对lis2doc三轴传感器进行注册,主要配置传感器的初始化函数以及传感器的中断回调函数。
    注册传感器
    这里可以看到gsensor的初始化分为通信IIC的初始化和gsensor模块的初始化两部分。
    传感器初始化1
    通信IIC初始化调用iic_soft.c中的软件IIC的初始化接口即可。
    传感器初始化2
    三轴传感器lis2doc模块初始化部分,主要设置传感器的采样率、量程、电源模式、敲击检测使能等操作。
    传感器初始化3
    在开机时启动 ext_gsensor_manage 会调用 lis2doc 的初始化,若开机时打印出正确的 chip_id,则表示三轴传感器驱动正常。例如,打印信息中出现 “lis2doc_init: whoami:0x44” 即说明驱动正常。
    传感器初始化4
    当传感器检测到有外部敲击事件产生时,中断脚会产生一次中断,进入到我们自定义的中断处理函数中,此时便可以根据中断的次数统计敲击的次数了,以方便后续产生敲击次数事件。
    传感器初始化5
http://www.xdnf.cn/news/16282.html

相关文章:

  • 关于树(按序遍历,搜索,LCA)
  • Git版本控制
  • Linux 系统调用详解:操作文件的常用系统调用
  • 大语言模型 LLM 通过 Excel 知识库 增强日志分析,根因分析能力的技术方案(3):使用云平台最小外部依赖方案
  • Spring AI 项目实战(二十):基于Spring Boot + AI + DeepSeek的智能环境监测与分析平台(附完整源码)
  • GRE及MGRE应用综合实验
  • Day32| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • 复杂产品系统集成协同研发平台的研究与实现
  • 【MySQL】MySQL 缓存方案
  • haproxy原理及实战部署
  • Vue3组件通信方法清单
  • CPU 为什么需要缓存?揭开速度与效率的底层逻辑
  • ICMPv6报文类型详解表
  • 如何检查服务器数据盘是否挂载成功?
  • 【Spring AI】大模型服务平台-阿里云百炼
  • 创建 Vue 项目的 4 种主流方式
  • Spark-TTS 使用
  • Caffeine 缓存库的常用功能使用介绍
  • 秋招Day19 - 分布式 - 分布式设计
  • Qt 网络编程进阶:RESTful API 调用
  • setsockopt函数概念和使用案例
  • 以实时语音转文字项目为例,介绍一下如何手动部署python应用到Linux服务器(附脚本)
  • C++:STL中vector的使用和模拟实现
  • 【机器学习-1】特征工程与KNN分类算法
  • CPU(中央处理器)和GPU(图形处理器)的区别
  • 如何理解泊松分布
  • adb 下载并安装
  • 第七章 愿景11 琦琦复盘测试
  • 线段树学习笔记 - 练习题(3)
  • Effective C++ 条款02:尽量以 const, enum, inline 替换 #define