前言
最近在学习使用MAX30102传感器,但网络上的文章大都只是给出示例代码而没有较为详细的介绍,目前仅看到NaN294的文章“MAX30102脉搏血氧仪和心率传感器(含寄存器介绍]”给出了详细的寄存器介绍。本文章是在NaN294文章的基础上,根据器件手册增加了一些图表和文字解释,其间初始化代码,和读取FIFO并合成有效数据的代码。
一、寄存器简介
0x00-0x01 中断状态(1)、(2)
MAX30102传感器具有一个中断引脚,当传感器发生某些事件后,该引脚会从高电平跳变为低电平,触发主机的中断事件。该中断引脚只有一根,所以主机需要读取中断状态寄存器来判断引起中断的事件。
其中某一比特为1则表示该事件发生。
A_FULL:传感器片上的FIFO缓存将要满,“将满”的标准可以在其它寄存器内设置。
PPG_RDY:一个采样完成,主机可以读取一个FIFO中的样本。
ALC_OVF:当SpO2/HR光电二极管的环境光消除功能达到最大限度。
PWR_RDY:芯片上电完成。
DIE_TEMP_RDY:MAX30102带有一个温度传感器,DIE_TEMP_RDY表示温度转换完成,主机可以访问寄存器获取温度数值。
当读取中断状态寄存器时,或者当触发中断的寄存器被读取时,中断被清除。例如,如果SpO2传感器因为完成一个转换触发中断时,读取FIFO数据寄存器或者中断寄存器都会清除中断 (中断pin返回到正常的高电平状态),这时也会将中断状态寄存器中的所有位清除为零。
0x02-0x03 中断使能(1)、(2)
即可读也可写,对应0x00和0x01的中断比特,置1表示可以由该事件引起中断。
程序配置:将0x02配置为0xC0(1100 0000),0x03配置为0x00,即使能A_FULL和PPG_RDY。
0x04-0x07 FIFO
FIFO_WR_PTR:MAX30102的FIFO可以容纳32个样本,FIFO_WR_PTR指向下一个样本要写入的位置。
OVF_COUNTER:主机可以设置让传感器丢弃旧数据以容纳新数据,OVF_COUNTER记录了有多少个旧数据被覆盖(丢弃)。
FIFO_RD_PTR:指向下一个要读取的位置。
可以编写和读取FIFO寄存器(0x04-0x07),但实际上只有FIFO_RD_PTR寄存器可以写入操作。其他的则自动增加或填充MAX30102的数据。当启动新的SpO2或心率转换时,建议首先清除FIFO_WR_PTR、OVF_COUNTER和FIFO_RD_PTR寄存器