CSR8670项目实战:BlueHeart心率监测耳机
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板【淘宝链接:思度科技CSR开发板】。
技术交流QQ群号:743434463
开发板会员QQ群号:725398389(凭订单号入群,赠PPT、项目源码、视频教程)
——————————正文分割线———————————–
1. 引言
拥有健康的身体是每个人最朴素最根本的需求,心率监测耳机是一款服务大众医疗健康的智能可穿戴产品,拥有较广阔的应用前景。
2. 主要功能
- 蓝牙音乐播放
- 蓝牙语音通话
- 手机心率监测
- 自定义BLE server
系统框图如下:
整个系统由CSR8670和AFE4410组成。AFE4410是一款用于可穿戴连续的光学心率监测等光学生物传感应用的模拟前端。芯片系统框图如下:
AFE4410芯片的工作机制很简单,概括来说一句话:读取LED传感器的值缓存在FIFO中,触发PIO中断请求CSR8670通过I2C读取并处理。
3. 项目难点
3.1. I2C通信
参考博客 https://blog.csdn.net/wzz4420381/article/details/79250137
AFE4410 I2C读参考代码如下:
int32_t AFE4410_Reg_Read(uint8_t RegAddress)
{uint8_t tx_buf;uint8_t rx_buf[3];int32_t retVal;uint8_t i2c_result = FALSE;tx_buf = RegAddress;i2c_result = I2cTransfer(AFE4410_DEVICE_ADDR, &tx_buf, 1, rx_buf, 3);#ifdef PRINT_I2C_LOGAFE4410_DEBUG (( "AFE4410 : read addr:%x, reg:%x, i2c_result:%d\n", AFE4410_DEVICE_ADDR, tx_buf, i2c_result));if (i2c_result){AFE4410_DEBUG (( "AFE4410 : I2C RX[0]:%x, RX[1]:%x, RX[2]:%x\n", rx_buf[0], rx_buf[1], rx_buf[2]));}
#endifretVal = rx_buf[0];retVal = (retVal << 8) | rx_buf[1];retVal = (retVal << 8) | rx_buf[2];return retVal;
}
AFE4410 I2C写参考代码:
uint8_t AFE4410_Reg_Write(uint8_t RegAddress, uint32_t WriteData)
{uint8_t tx_buf[4];uint8_t i2c_result = FALSE;tx_buf[0] = RegAddress;tx_buf[1] = (uint8_t) (WriteData >> 16);tx_buf[2] = (uint8_t) ((WriteData & 0x00FFFF) >> 8);tx_buf[3] = (uint8_t) (WriteData & 0x0000FF);i2c_result = I2cTransfer(AFE4410_DEVICE_ADDR, tx_buf, 4, NULL, 0);#ifdef PRINT_I2C_LOGAFE4410_DEBUG (( "AFE4410 : write addr:%x, reg:%x, i2c_result:%d\n", AFE4410_DEVICE_ADDR, tx_buf[0], i2c_result));if (i2c_result){AFE4410_DEBUG (( "AFE4410 : I2C TX[0]:%x, TX[1]:%x, TX[2]:%x\n", tx_buf[1], tx_buf[2], tx_buf[3]));}
#endifreturn i2c_result;
}
3.2. 关联AFE4410 FIFO读中断请求
将AFE4410的AFE_ADC_RDY连接到CSR8670的PIO口(建议PIO0-PIO15),在ADK Configuration tool中将此PIO口关联到一个event,并将触发方式设定为下降沿触发:
将这个事件内容替换成读取AFE4410的FIFO缓冲区:
case EventUsr3DEnhancementEnableDisableToggle:AFE4410_ADC_RDY_MsgProcess();break;
在event中读取AFE4410的FIFO缓冲区:
#define AFE_FIFO_DEPTH 20void AFE4410_ADC_RDY_MsgProcess(void)
{uint8_t index;int32_t * pDataBuf = NULL;pDataBuf = malloc(sizeof(int32_t) * AFE_FIFO_DEPTH);if(!pDataBuf){AFE4410_DEBUG (( "AFE4410_ADC_RDY_MsgProcess : pDataBuf not valid"));return;}AFE4410_DEBUG (( "AFE4410_ADC_RDY_MsgProcess :\n"));for (index = 0; index < AFE_FIFO_DEPTH; index++){pDataBuf[index] = AFE4410_Reg_Read(0xFF);AFE4410_DEBUG(("%lx, ", pDataBuf[index]));}AFE4410_DEBUG (( "\n"));AFE4410_SetHrsValue((int8)(pDataBuf[0] & 0xFF));free(pDataBuf);
}
对传感器采集到的数据需要进行FFT等处理,可在读取到FIFO的值后直接在VM层完成计算,也可以通过发送KalimbaSendLongMessage的方式发送给dsp处理,处理结果由DSP通过消息机制返回给VM层。
3.3. 使能GATT_HEART_RATE_SERVER
- 在sink工程的属性页中设置enable_heart_rate_server=1,编译后的固件即可支持gatt hrs server;
- 注意在ADK configuration tool的BLE profiles->BLE Advertising Report Filter中勾选HRS;
- 在EventUsrPowerOn事件中添加“MessageSendLater(&theSink.task, EventUsrBleStartBonding, 0, 2000);”打开BLE bonding,使得手机可以通过BLE连接到8670并使能此服务。
3.4. 定制BLE服务
参考文章:https://blog.csdn.net/wzz4420381/article/details/78359481
4. 总结
- 在设置AFE4410的FIFO填充速度时,需要考虑CSR8670的最小可接受的外部中断间隔,这里不建议小于200ms。
- 读取到FIFO的值后,可以在VM层计算,也可以在DSP里计算;前者的好处是计算结果可以方便地通过BLE发送给手机,坏处是由于需要缓冲的数据较多,可能需要增加SRAM;后者的好处是可使用DSP的SRAM缓冲数据,坏处是需要维护DSP工程,开发难度大。
- 在使能BLE bonding事件后,手机只有在与耳机配对后才能获取到HRS的值,否则会提示BLE连接断开。
CSR8670项目实战:BlueHeart心率监测耳机相关推荐
- CSR8670项目实战:BluePager蓝牙寻呼机
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[淘宝链接:思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入 ...
- CSR8670项目实战:4人组网蓝牙对讲耳机
为了方便大家学习,现与我爱蓝牙网联合推出[QCC300x/CSR867x/QCC30xx/QCC51xx开发板]. 博主联系方式:Call-15715161220,QQ-705829339 技术交流Q ...
- CSR8670项目实战:BlueHeartSound2电子心音计
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入群,赠PP ...
- CSR8670项目实战:BlueAgBatC蓝牙发射器BLE遥控器
为了方便大家学习,现与我爱蓝牙网联合推出[QCC300x/CSR867x/QCC30xx/QCC51xx开发板]. ⭐⭐⭐⭐⭐[本项目为客户项目,欢迎商务合作]⭐⭐⭐⭐⭐ 技术交流QQ群号:10330 ...
- CSR8670项目实战:BlueHeartSound电子心音计
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[淘宝链接:思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入 ...
- CSR8670项目实战:BlueCar蓝牙音频网关
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[淘宝链接:思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入 ...
- CSR8670项目实战:BlueDongle 蓝牙音频测试dongle
为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板[思度科技CSR开发板]. 技术交流QQ群号:743434463 开发板会员QQ群号:725398389(凭订单号入群,赠PP ...
- 【.NET Core项目实战-统一认证平台】第四章 网关篇-数据库存储配置(2)
[.NET Core项目实战-统一认证平台]第四章 网关篇-数据库存储配置(2) 原文:[.NET Core项目实战-统一认证平台]第四章 网关篇-数据库存储配置(2) [.NET Core项目实战- ...
- 【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)
[.NET Core项目实战-统一认证平台]第三章 网关篇-数据库存储配置(1) 原文:[.NET Core项目实战-统一认证平台]第三章 网关篇-数据库存储配置(1) [.NET Core项目实战- ...
最新文章
- tar 和gzip 的区别
- idea上java接口自动化_Java接口自动化之IDEA创建及运行maven项目
- MyBatis查询两个字段,返回Map,一个字段作为key,一个字段作为value的实现
- Shell-流程控制
- 删除mysql的root用户恢复方法
- pytorch 安装方法
- NuttX 启动流程
- Cypress 基础 - 元素的定位
- 程序员的成功是否有规律可循?
- 关于c语言编写 单项链表 的创建、插入、修改、删除、显示、退出 的程序案例
- HashMap源码分析(转载)
- C#中 标识符“XXX”不符合 CLS
- Swift - 高级运算符介绍
- acrobat缺少字体 adobe_PDF 字体
- 通用权限管理系统项目简单介绍
- 如何实现一个安全的Web登陆
- python实现whois查询_python实现whois查询功能的方法
- Unity 制作数字图片字体
- 我男友是个学霸,你们输给DOTA,我输给代码……
- Python超越函数积分运算以及绘图实现
热门文章
- 安装opencv时报错:Could not build wheels for opencv-python which use PEP 517 and cannot be installed direc
- 内存优化(一)浅谈内存优化
- 关于Fusion on Apple Silicon的谨慎猜测
- 如何获取微信公众平台图文消息的永久链接
- 首个AI数字人唱作歌曲刷屏背后:百度APP数字人度晓晓用AI陪伴亿万用户
- wordpress框架图片上传
- Oracle 按日期分组
- 银行卡卡号格式规范 每隔4为一个空格
- ICC2: secondary pg pin的作用与连接
- 网站建设的几个细节小技巧@江苏一网推