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