MAX30102脉搏血氧传感器相关内容整理(理论版)
目录
二、详细描述
三、MAX30102系统框图
3.1 主机与软件层
3.2 MAX30102内部
3.3 光学交互与环境
3.4 信号走向与工作原理
四、相关参数
4.1 绝对最大额定值
4.1.1 电源相关参数
4.1.2 引脚电流
4.2 电气特性
4.2.1 电源电压与电源电流
1、电源电压
2、电源电流
4.2.2 生理信号采集核心参数
4.2.3 RED/IR LED 性能
1、IR LED 特性
2、Red LED 特性
4.2.4 光电二极管性能
4.2.5 温度传感器
4.2.6 数字输入/输出特性
4.2.7 I2C时序特性
五、引脚介绍
5.1 引脚配置
5.2 引脚描述
六、寄存器介绍
6.1 中断状态寄存器
6.2 中断使能寄存器
6.3 FIFO相关寄存器
6.3.1 FIFO写指针寄存器
6.3.2 FIFO读指针寄存器
6.3.3 FIFO溢出计数器
6.3.4 FIFO数据寄存器
6.3.5 FIFO配置寄存器
6.4 模式配置寄存器
6.5 SPO2配置寄存器
6.6 LED脉冲幅度寄存器
6.7 温度数据相关寄存器
七、I2C接口
7.1 从机ID
7.2 起始信号与停止信号
7.3 应答信号与非应答信号
7.4 写数据时序
7.5 读取数据时序
参考资料
一、整体介绍

MAX30102,集成式,脉搏血氧仪和心率监测模块。对于该芯片而言,只需要1.8V供电,而内部LED设备需要单独提供3.3V电源。
MAX30102与外设或处理器进行主从通信使用的接口为标准化I2C通信协议。该模块在电源线保持通电状态下可通过软件实现关闭且此时待机电流为0。
该模块是基于LED反射技术的心率监测器和脉搏血氧仪传感器,光学模块小巧且内置保护玻璃,使得性能坚固;对于移动设备具有极致低功耗操作,比如采样率以及LED电流可编程实现节能效果、心率监测器低功耗(<1mW)、超低的关断电流(0.7uA);具有快速的数据输出能力,采样率高;具有强大的运动伪影抗性,较高的信噪比;MAX30102工作的温度范围在-40℃~+85℃。
MAX30102使用场景广泛,常用于健康辅助设备、可穿戴设备、智能手机及平板电脑等设备中。
二、详细描述

由于手册是全英文版,可能比较难看,因此这里整了点翻译,如下图所示。

把上述内容简单整理一下,即:
1、MAX30102 是为可穿戴设备设计的完整脉搏血氧(SpO₂)和心率(HR)传感器系统解决方案,体积小且光学、电气性能出色,外部硬件组件需求少,易集成到可穿戴系统。
2、可通过软件寄存器完全调节,数字输出数据可存储在芯片内 32 深度的 FIFO 缓存中,使其支持与微控制器或处理器通过共享总线连接,无需持续从寄存器读取数据。
3、包含SPO2子系统,也就是血氧监测子系统。该系统包含环境光消除ALC,用于抵消环境电流,减小环境干扰;还有18位分辨率、采样率10.24MHz的ADC,输出数据率可编程(即数据采用500次/秒至3200次/秒);还有一个专门的滤波器,提高采集信号的纯净度。
4、内置固定分辨率0.0625℃的温度传感器,用于利用 MAX30102 输出信号的SpO₂算法补偿环境温度变化带来的相关 SpO₂误差,校准SpO₂子系统的温度依赖性。
5、集成了红光和红外LED驱动器,为SpO₂和HR测量调制LED脉冲。同时,LED电流可编程(0至50mA,但需合适电源电压);LED脉冲宽度可编程(69μs至411μs),可根据使用场景优化SpO₂和HR精度及功耗。
三、MAX30102系统框图

上图是MAX30102传感器的系统框图,展示了该传感器从光学信号采集到数字数据输出的完整工作流程,以及外设或处理器间的交互逻辑。整个系统框图可以分为主机与软件层、MAX30102内部功能模块以及光学交互与环境三大板块,如下图所示。

3.1 主机与软件层
首先看主机与软件层,该部分包括了应用层硬件框架以及驱动层三大部分,如下图所示。

APPLICATIONS,即应用层部分,这是整个系统的最上层,用于呈现最终的生理数据(如心率、血氧等),供用户或上层系统使用(如健康APP助手);
HARDWARE FRAMEWORK,即硬件框架,这是硬件层面,负责提供主机硬件支持,如常见MCU(STM32、ESP32等),负责供电、I2C通信以及相关数据处理等;
DRIVER,即驱动层,该部分主要负责驱动主机侧的MAX30102模块,实现I2C配置、数据读取、中断处理等底层操作。
3.2 MAX30102内部
MAX30102内部功能模块如下图所示,还包括了众多小模块,如I2C接口、数据缓存、LED驱动器、RED/IR LED红光/红外光等等。

I2C,即I2C接口,这是与主机(如STM32)通信的桥梁,主机可通过I2C接口向MAX30102写入配置信息(如LED电流、采样率等),并读取采集数据;
LED DRIVERS,即LED驱动器,这是控制内部红光RED以及红外光IR LED的发光的器件。该驱动器具体是通过调节电流大小、脉冲宽度实现不同光强和频率的发光;
RED/IR LED,即前面提到的红光或红外光,这是用于发射特定波长的光的器件。该器件与外部进行交互,用于照射人体组织(如手指、耳垂等),其中RED光波长≈660nm、IR光波长≈880nm;
PHOTO DIODE,即光电二极管,MAX30102发出的RED/IR LED光照射外部的人体组织后反射/透射回来的光将被该器件接收,光电二极管会将接收到的光信号转换成电流信号(光强越大,转换得到的电流信号越大);
AMBIENT LIGHT CANCELLATION,这是环境光抵消的器件。顾名思义,该器件可以抵消外接环境光(如阳光、灯光等)的干扰,避免环境光淹没生理信号导致测量误差;
18-BIT CURRENT ADC,即18位电流ADC,这是一个ADC器件,用于将获取的光电二极管的电流信号转换成数字信号,18位代表分辨率,可捕捉微弱的生理信号;
DIGITAL NOISE CANCELLATION,即数字噪声抵消,该器件用于对ADC转换得来的数字信号进一步降噪,也就是滤波(如过滤高频电磁干扰、电路噪声等),提高信号纯净度;
DATA FIFO,即数据FIFO缓存,这相当于一个存储器件,可临时存储多组ADC数据,减少主机与传感器的I2C通信频率,也就是说这样主机就可以一次性读取多组数据了。
3.3 光学交互与环境
光学交互与环境是传感器与外部环境进行交互的部分,主要包括传感器封装和玻璃、与传感器发射光交互的目标(主要是人体组织)以及环境光,如下图所示

PACKAGING / COVER GLASS,这是传感器顶层的封装以及保护玻璃,主要用于保护内部元件,同时提高RED/IR光和反射光的穿透性;
HUMAN SUBJECT,即人体对象,这是与传感器发射光的主要目标对象。RED/IR光照射人体后,由于血液中氧合/去氧血红蛋白对不同波长光的吸收差异,从而使反射光数据不同进而获取生理信息;
AMBIENT LIGHT,即环境光,这是传感器暴露在外界环境时需要抵消的干扰源,如室内灯光、阳光等,这类环境光会对生理信号的采集造成噪声。
3.4 信号走向与工作原理
接下来,我们分析系统框图,顺着信号流向逐步理解MAX30102采集心率、血氧数据的工作原理以及实现流程,如下图所示。

从左边的主机软件层看起:
首先主机通过I2C发送配置LED相关的指令,传感器接收后对内部LED驱动器进行配置。
接着LED驱动器驱动RED/IR LED发射特定波长的光,发射光透过保护玻璃照射到人体组织(通常是手指),然后产生的反射光和外界环境光会一同透过玻璃进入传感器,给到光电二极管转换成电流信号,接着环境光抵消器件消除进入的环境光得到生理反射光电流信号,然后送进18位电流ADC,将电流信号转换成18位的数字信号,这个信号经过数字噪声消除滤波得到相对纯净的数字数据,接着将数字数据暂存到数据FIFO缓存中。
当主机读取传感器中的数据时,传感器就会将FIFO中的数据拿出,并通过I2C接口发送到主机,最后经过主机的算法处理将数据呈现给应用层的用户。
可见,整个系统信号流动的核心信号链即“光->电->数字->主机处理”,展现了 MAX30102 如何通过 “光 - 电 - 数字” 的闭环,结合抗干扰设计,实现对人体心率、血氧等生理信号的高精度采集,并与外部主机高效交互。
四、相关参数
在MAX30102芯片手册中对于参数的介绍非常多,先是对器件极限电压电流的描述,再是对封装的简单介绍,然后是大量电气特性(包括电源支持部分、脉搏/心率传感器特性、保护玻璃的特性、红外LED特性、红光LED特性、光电检测器特性、温度传感器特性、数字输入输出特性以及I2C时序特性等)。本次我们对主要参数进行介绍,详细内容可参考MAX30102芯片手册自行了解。
4.1 绝对最大额定值
给MAX30102供电时,一定要遵守手册中描述的相关电源或引脚电流的电压范围,避免损坏器件。相关参数如下:
4.1.1 电源相关参数
手册中介绍电源对(保护)地电压范围如下图所示。

VDD to GND:-0.3V 到 + 2.2V,这是器件核心电源(VDD)相对于地的极限电压范围,微控制器为其供电时,电压必须在此区间内,否则会损坏器件内部电路。
GND to PGND:-0.3V 到 + 0.3V,保证不同地之间的电压差在安全范围,避免地电位差过大对器件造成损害。
VLED+ to PGND:-0.3V 到 + 6.0V,是 LED 驱动电源(VLED+)相对于保护地(PGND)的极限电压,微控制器若为 LED 供电或控制相关电源,需确保电压在此范围。
4.1.2 引脚电流
关于引脚的电流电压的参数介绍如下图所示。

All Other Pins to GND:-0.3V 到 + 6.0V,其他引脚相对于地的极限电压,微控制器与这些引脚(如 I2C 的 SDA、SCL,中断引脚 INT 等)连接时,输入输出电压不能超出此范围。
Output Short-Circuit Current Duration:连续短路,说明器件输出引脚不允许长时间短路,微控制器在设计电路和控制时,要避免输出引脚被意外短路。
Continuous Input Current into Any Terminal:±25mA,任何引脚的连续输入电流极限,微控制器向器件引脚输入电流时(如 I2C 的上拉电流等情况),需控制电流不超过此值。
注:除此之外,还有热阻,封装等参数未提及,可参考MAX30102芯片手册自行查看,这里不过多赘述。
4.2 电气特性
由于MAX30102模块中含有大量器件,因此涉及到的相关电气特性也比较多,这里将主要内容进行介绍。
4.2.1 电源电压与电源电流
首先是电源电压电流部分,主要涉及核心器件供电电压、LED对保护地供电电压以及电源供电电流、关断模式下的供电电流范围参数。这部分是器件正常工作时的关键参数,直接影响微控制器的控制策略和电路设计,如下图所示。

1、电源电压
Power-Supply Voltage (VDD):1.7V - 2.0V,这是器件核心工作电源的范围,微控制器需要为其提供在此区间内稳定的电压,保证器件正常工作,其中典型电压1.8V。
LED Supply Voltage (VLED+):3.1V - 5.0V,是 LED 驱动的电源电压范围,微控制器若为 LED 供电,需提供符合此范围的电压,其中典型电压3.3V。
2、电源电流
Supply Current (IDD):在 SpO₂和心率模式下,最大 1200μA;仅 IR 模式下,最大 1200μA。微控制器在设计电源电路时,需要考虑器件的工作电流,选择合适的电源模块或调整供电策略,以满足电流需求并保证电源稳定,二者典型电流为600μA。
Supply Current in Shutdown (ISHDN):最大 10μA,当器件处于关断模式时的电流,微控制器可利用此模式实现低功耗控制,在不需要器件工作时将其关断,减少整体系统功耗,一般为0.7μA。
4.2.2 生理信号采集核心参数
PULSE OXIMETRY/HEART-RATE SENSOR CHARACTERISTICS,即脉搏血氧仪/心率传感器特性,这部分决定心率、血氧测量的精度与稳定性,是微控制器处理数据的基础。手册描述如下图所示。

ADC Resolution(ADC 分辨率):18 bits
意义:ADC 能分辨的最小信号变化为 满量程218
,高分辨率可捕捉血液微小的光吸收变化,这是精准测量心率、血氧的前提。
Red/IR ADC Count(红 / 红外通道 ADC 计数值):典型 65536 Counts
条件:特定 LED 功率(LED1_PA=0x0C等)、脉冲宽度(LED_PW=0x01)下的满量程值,微控制器读取数据时需以此为参考,计算实际光强比例。
Dark Current Count(暗电流计数值):30~128 Counts(无 LED 发光时的基底噪声)
意义:微控制器需在数据处理时扣除暗电流,避免其干扰生理信号(如静止时手指未遮挡的噪声)。
DC Ambient Light Rejection(环境光抑制):Red/IR 通道均为 2 Counts(100klux 直射阳光)
意义:器件能抵消强环境光干扰,微控制器无需额外硬件滤波,直接处理原始数据即可。
ADC Integration Time(ADC 积分时间):随LED_PW变化(69μs~411μs)
意义:积分时间越长,ADC 分辨率越高但功耗增加。微控制器需根据应用场景(如运动时需高帧率,选短积分时间;静止时需高精度,选长积分时间)配置LED_PW。
4.2.3 RED/IR LED 性能
这是红外光或红光LED的相关特性,是微控制器对配置LED驱动器时需要重点关注的内容之一,决定了传感器发射光的质量好坏,如下图所示。

1、IR LED 特性
(1)峰值波长(λP
):870~900nm,是血氧测量的关键波长(去氧血红蛋白对红外光吸收弱)。
(2)正向电压(Δλ
):1.4V(I_LED=20mA),微控制器需为 LED 提供至少 1.4V 驱动电压,且电流不超过 20mA(否则影响寿命)。
(3)辐射功率(VF
):6.5mW,是 LED 的发光强度,微控制器通过配置LED_PA(电流寄存器)调节功率,平衡测量精度与功耗。
2、Red LED 特性
(1)峰值波长(λP
):650~670nm,是心率测量的关键波长(氧合血红蛋白对红光吸收强)。
(2)正向电压(Δλ
):2.1V(I_LED=20mA),同理需匹配驱动电压和电流。
(3)辐射功率(VF
):9.8mW,红光功率更高,适合心率信号(血液体积变化更明显)。
4.2.4 光电二极管性能
这是光电二极管的相关特性,决定光信号接收质量的因素之一,如下图所示。

敏感波长范围(Spectral Range of Sensitivity):600~900nm(量子效率 > 50%),覆盖 Red/IR LED 波长,以确保光信号高效转换为电流。
敏感区域(Radiant Sensitive Area):1.36mm²,微控制器需保证 LED 光聚焦在该区域(如佩戴时手指紧贴传感器)。
4.2.5 温度传感器
这部分用于 “补偿生理信号的温度漂移”,微控制器在读取温度数据时做算法修正,如下图所示。

温度采集时间(TT
):29ms,微控制器需每隔≥29ms 读取一次温度,保证温度数据实时性。
精度(TA
):±1℃(TA=25℃
),温度数据可用于修正 Red LED 波长漂移(温度变化会影响 LED 波长,进而影响血氧计算)。
测量范围:-40℃~85℃,覆盖多数应用场景(如可穿戴设备的室内外使用)。
4.2.6 数字输入/输出特性
这部分决定微控制器与器件引脚(SDA、SCL、INT)的电气兼容性。

4.2.7 I2C时序特性
这部分是微控制器与器件通信的双方约定规则,直接决定 I²C 驱动是否能正常工作,具体内容如下图所示。

1、I²C 地址
写地址:0xAE(Hex)
读地址:0xAF(Hex),微控制器需用该地址发起 I²C 传输。
2、时钟频率(fSCL
):0~400kHz(快速模式)
意义:微控制器需配置 I²C 外设为 400kHz 以内,确保通信稳定(超过则可能丢包)。
3、时序参数
起始/停止条件间隔(tBUF
):1.3μs,微控制器需保证两次通信的停止与起始信号间隔≥1.3μs。
SCL 低电平宽度(tLOW
):1.3μs,高电平宽度(\(t_{HIGH}\)):0.6μs,需满足占空比要求。
数据建立/保持时间(tSU:DAT/tHD:DAT
):100ns/0ns,微控制器需在 SCL 上升沿前 100ns 准备好数据,下降沿后可立即改变数据。
4、总线电容(CB
):400pF,微控制器需控制 I²C 线路的寄生电容(如布线长度、上拉电阻),避免超过此值导致信号衰减。
其中,I2C接口时序图如下图所示。

到实际代码编写时,由于I2C协议相对标准化,不像单总线那种简单协议在不同产品上会被厂商做些改变,因此基本上I2C标准化协议时序在大多数支持I2C协议通信的产品上均通用。
五、引脚介绍
了解了相关电气参数,还需要对芯片引脚功能及连接方式做一个详细了解,不然仍然无法理解如何控制MAX30102芯片。因此接下来我们在了解一下芯片引脚定义及功能介绍。
5.1 引脚配置

5.2 引脚描述

这是MAX30102芯片引脚,而我们使用的这款传感器模块实际引出的引脚如下图所示。

核心引脚介绍及功能描述如下表所示。
| 引脚 | 名称 | 功能描述 |
| VIN | 电源输入引脚 | 为模块提供稳定的工作电压 |
| GND | 接地引脚 | 实现共地,保证电路中各元件的参考电位一致 |
| SDA | 串行数据引脚 | I2C功能引脚,用于数据传输 |
| SCL | 串行时钟 | I2C功能引脚,用于时钟控制 |
| INT | MAX30102中断引脚 | 低电平有效,MAX30102模块中断事件触发输出 |
| RD | RED LED引脚 | 红色LED阴极和LED驱动器连接点,一般不接 |
| IRD | IR RED引脚 | IR LED阴极和LED驱动器连接点,一般不接 |
六、寄存器介绍
6.1 中断状态寄存器

这是两个8位的中断状态寄存器,寄存器地址分别是0x00和0x01,要访问这俩寄存器就是访问这俩地址。
首先,中断状态寄存器1(Interrupt Status 1):B1~B4都不使用
B0位是PWR_RDY,即Power Ready Flag电源就绪标志位,在模块上电并准备好采集数据时会触发电源就绪中断;
B5位是ALC_OVF,即Ambient Light Cancellation Overflow环境光抵消溢出位,在进入的环境光过多导致环境光抵消器件的抵消能力达到最大时会触发此中断而置位,用于提示环境光干扰超标,可能会有多余未抵消的环境光进入ADC,使得测量数据不准确。可通过读取中断状态1寄存器(0x00)来清除中断;
B6位是PPG_RGY,即New FIFO Data Ready新的FIFO缓存数据准备就绪。在SpO2和HR模式中,当数据FIFO中有新样本时,此中断触发。可通过读取中断状态1寄存器(0x00)或通过读取FIFO_DATA寄存器来清除中断;
B7位是A_FULL,即FIFO Almost Full Flag,FIFO接近满标志,在FIFO中剩余空值等于FIFO_A_FULL[3:0]中设置的值时触发FIFO接近满中断,该位置位。用于SPO2血氧和HR心率模式下告诉主机FIFO缓存接近满了的状态位,避免数据溢出。主机读取中断状态寄存器 1(0x00)后,该位会自动清 0,同时 INT 引脚恢复高电平。
其次是中断状态2寄存器(Interrupt Status 2):仅B1位有效
B1位是DIE_ TEMP_RDY,即Internal Temperature Ready Flag内部温度就绪标志,当内部温度转换完成时,将触发此中断,主机可以读取温度数据寄存器。该位可通过读取Interrupt Status 2 Register(0x01)或TFRAC register (0x20)清除。
6.2 中断使能寄存器

这是两个8位的中断使能寄存器,分别是中断使能1寄存器(0x02)和中断使能2寄存器(0x03),主要用于管理中断使能与禁止。
首先是中断使能寄存器1(Interrupt Enable 1):
B5是ALC_ OVF_EN,即环境光抵消溢出中断使能位,置1则开启,反之禁止;
B6是PPG_ RDY_EN,即新的FIFO缓存数据准备就绪中断使能位,置1则开启,反之禁止;
B7是A_ FULL_ EN,即FIFO接近满中断使能位,置1则开启,反之禁止。
其次是中断使能寄存器2(Interrupt Enable 2):
B1是DIE_TEMP_ RDY_EN,即内部温度就绪中断使能位,置1则开启,反之禁止。
6.3 FIFO相关寄存器
这是FIFO数据缓存相关的部分寄存器,分别是FIFO写指针寄存器、溢出计数器寄存器、FIFO读指针寄存器以及FIFO数据寄存器,地址对应0x04~0x07。这些寄存器主要用于管理 FIFO 数据的写入、读取,以及记录溢出情况,如下图所示。

6.3.1 FIFO写指针寄存器
FIFO Write Pointer(FIFO 写指针寄存器,地址 0x04),其中低5位有效,即FIFO_WR_PTR[4:0],其中记录的是MAX30102 下一个要写入样本的位置。每当有一个样本被推入 FIFO 时,该指针会自动递增。复位后该寄存器默认值为 0x00,在开始新的 SpO₂或心率转换时,建议将其清零,确保 FIFO 处于空且已知的状态。
在MODE[2:0]为 010、011 或 111 模式下,主机可通过 I²C 接口修改该指针。
6.3.2 FIFO读指针寄存器
FIFO Read Pointer(FIFO 读指针寄存器,地址 0x06),其中低5位有效,即FIFO_RD_PTR[4:0],该位记录的是主机通过 I²C 接口从 FIFO 中获取下一个样本的位置(地址/指针)。每当从 FIFO 中弹出一个样本时,该指针自动递增。其中复位后该寄存器默认值为 0x00,开始新的转换时,建议将其清零。
主机在读取样本后,可向该指针写入值,以便在出现数据通信错误时,能够重新读取 FIFO 中的样本。
注:写/读指针用于控制 FIFO 中的数据流向。每次有新样本添加到 FIFO 时,写指针会递增。每次从 FIFO 中读取一个样本时,读指针会递增。要重新读取 FIFO 中的一个样本,可将其值减 1,然后再次读取数据寄存器。
在进入血氧模式或心率(HR)模式时,应将 FIFO 写/读指针清零(恢复为 0x00),以确保 FIFO 中不存在旧数据。如果 VDD(电源电压)进行了电源循环,或者 VDD 降至其欠压锁定(UVLO)电压以下,指针会被自动清零。
6.3.3 FIFO溢出计数器
FIFO Overflow Counter(FIFO 溢出计数器,地址 0x05),其中也是低5为有效,即OVF_COUNTER[4:0],用于统计FIFO满时丢失的样本数量。当FIFO满时,新样本无法写入,此时溢出计数器OVF_COUNTER加 1,由于仅5位,因此最多计数到31即0x1F。复位后该寄存器默认值为 0x00,开始新的转换时,建议将其清零。
当从FIFO中弹出一个完整样本(即读指针递增,移除旧的 FIFO 数据并将样本下移)时,溢出计数器会重置为 0。
6.3.4 FIFO数据寄存器
FIFO Data Register(FIFO 数据寄存器,地址 0x07),该寄存器中存放的是8位数据,即FIFO_DATA[7:0],主要用于存放 FIFO 中要读取的下一个样本。当FIFO深度为32时,可存储最多 32 个样本,样本大小取决于配置的 LED 通道数(每个通道信号存储为 3 字节数据,所以 FIFO 宽度可为 3 字节或 6 字节)。
FIFO_DATA寄存器中的数据是读指针寄存器中存放的指针指向的数据,且每次读取FIFO_DATA寄存器时,FIFO_RD_PTR会递增,使指向的数据变成下一个字节。也就是说,数据寄存器中的值与FIFO_RD_PTR指向紧密相关,主机通过I2C接口读取FIFO_DATA寄存器时获取多字节数据时,一般是连续读取的。因此,连续读取该寄存器时,每次读取的是 FIFO 中的下一个字节数据。每个样本每个通道为 3 字节数据(例如,红光通道 3 字节,红外光通道 3 字节等)。
虽然 FIFO 相关寄存器(0x04 - 0x07)都可读写,但在实际操作中,通常只需要写入FIFO_RD_PTR寄存器,其他寄存器由 MAX30102 自动递增或填充数据。
注:一般主机通过I2C读取寄存器时,地址指针会自动递增,可连续读取所有寄存器,但 MAX30102 的FIFO_DATA寄存器(地址 0x07)例外,读取它时地址不自动递增,连续读取会反复读同一地址。而每个样本包含多字节数据,因此需要一次同时从该寄存器读取多字节以获取完整样本。
还有 0xFF 寄存器也是例外,在其之后读取更多字节,地址指针不会回退到 0x00,且读取数据无意义。
数据FIFO由一个可存储 32 个样本的存储区组成,能够存储红外(IR)和红光(Red)的 ADC 数据。由于每个样本包含两个通道的数据,因此每个样本有 6 字节的数据,所以 FIFO 总共可存储 192 字节的数据。
FIFO 数据是左对齐的,这与前面介绍的温湿度传感器DHT11的数据格式类似,如下表所示;换句话说,无论 ADC 分辨率如何设置,最高有效位(MSB)始终位于第 17 位数据位置。

在血氧(SpO₂)模式下,每个数据样本包含两个数据三元组(各 3 字节,共6字节)。要读取一个样本,每个字节都需要一条 I²C 读取指令。因此,在血氧模式下读取一个样本,需要进行 6 次 I²C 字节读取操作(FIFO为32深度,一个样本包含32个字节的数据)。在读取每个样本的第一个字节后,FIFO 读指针会自动递增。
下表展示了每组 3 字节(包含每个通道 18 位 ADC 数据输出)的结构,如下


6.3.5 FIFO配置寄存器
FIFO Configuration寄存器(地址0x08)是用于配置 MAX30102 芯片中 FIFO相关参数的寄存器,其结构如下图所示。


Bits 7-5:Sample Averaging(SMP_AVE),即采样均值,占3位。用于设置数据采样的平均次数,可对多次采样数据进行平均处理,以此来减少数据吞吐量,降低数据中的噪声,同时减少需要传输和处理的数据量,在一些对数据传输带宽或处理能力有限的场景下很有用。通过3位的二进制序列组合对应不同的平均次数,如下图所示。


Bit 4:FIFO Rolls on Full(FIFO_ROLLOVER_EN),即FIFO满时滚动使能。该位用于使能或禁用 FIFO 的回绕功能,当 FIFO 已满时,若该功能使能,新数据会覆盖旧数据,否则新数据无法写入,其中置1使能、置0禁止。

Bits 3-0:FIFO Almost Full Value(FIFO_A_FULL),即FIFO近满中断阈值,与前面的近满中断相对应。该位包含3位,用于设置 FIFO 近满中断阈值,值为剩余空样本数(0~15)。例如 0x0F 表示剩余 15 个空样本时触发中断,提醒主机及时读取。具体数值对应如下表所示。

6.4 模式配置寄存器
这是Mode Configuration寄存器(地址0x09),用于配置 MAX30102 的工作模式等关键参数,寄存器结构如下图所示。

关于这些位的手册介绍如下图所示

整理一下即:
Bit 7(SHDN),用于控制芯片的低功耗状态。使用时,将该位置 1,芯片进入节能模式(寄存器值保留,中断清零);置 0 则退出节能模式,恢复正常工作。
Bit 6(RESET),用于触发芯片复位,复位后所有寄存器恢复上电初始状态。配置时,将该位置 1 启动复位,完成后会自动清 0,且不触发 PWR_RDY 中断。
Bits 2-0(Mode Control),决定芯片的工作模式(如心率、血氧检测等),对MODE[2:0]。使用时通过三位数值组合选择模式,切换模式不改变其他设置,也不清除原有数据,组合与模式对照表如下所示。

同时,该寄存器复位后默认状态为0x00,支持读写操作(R/W)。
6.5 SPO2配置寄存器
这是SPO2 寄存器SpO₂ Configuration(地址0x0A),主要用于配置血氧(SpO₂)相关参数,寄存器结构如下图所示。

然后手册中对于各个位的介绍如下图所示。
![]()


我们简单整理总结一下:
Bits 6 - 5(SpO₂ ADC Range Control)用于设置血氧传感器 ADC 的满量程范围。通过配置这两位的数值,可对应不同的最低有效位(LSB)大小和满量程值,实际使用时可根据血氧信号的幅度范围选择合适的量程,确保信号能被准确采集,配置对应流程表如下。

Bits 4 - 2(SpO₂ Sample Rate Control)定义有效采样率,一个样本包含一次红外脉冲/转换和一次红光脉冲/转换。配置这三位的数值组合,可对应不同的每秒采样数,从 50 到 3200 不等。不过采样率和脉冲宽度相关,若所选采样率对于当前 LED 脉冲宽度设置过高,该寄存器可能会被设置为最高可能的采样率,配置数值与采样率对照表如下图所示。

Bits 1 - 0(LED Pulse Width Control and ADC Resolution)设置 LED 脉冲宽度(红外和红光脉冲宽度相同),进而间接设置每个样本中 ADC 的积分时间,且 ADC 分辨率与积分时间直接相关。配置这两位的数值,可对应不同的脉冲宽度(如 00 对应约 69μs)和 ADC 分辨率(如 00 对应 15 位)。

6.6 LED脉冲幅度寄存器
这是LED脉冲幅度相关寄存器(地址0x0C和0x0D),主要用于配置 LED 的脉冲幅度,寄存器结构如下图所示。

0x0C寄存器的LED1_PA[7:0]位用于设置第一路 LED(如红光 LED)的脉冲幅度;
0x0D寄存器的LED2_PA[7:0]位用于设置第二路 LED(如红外光 LED)的脉冲幅度。

通过对这两个寄存器的读写操作(R/W),可调整 LED 发射光信号的强度,以适应不同的血氧或心率检测场景,寄存器复位后默认状态为0x00。
6.7 温度数据相关寄存器
Temperature Data相关寄存器(地址0x1F - 0x21)用于温度相关功能,分别是温度整数寄存器、温度小数寄存器以及温度配置寄存器。

可见三个寄存器均只有一位的配置,分别对应温度整数位、温度小数位以及温度使能位。
温度整数寄存器用于存储温度的整数部分,采用二进制补码格式,每一位对应 1℃。读取温度数据时,需结合该寄存器与温度小数寄存器的值,通过公式TMEASURED=TINTEGER+ TFRACTION
计算实际温度,它是只读的,无需额外配置,直接读取即可获取温度整数信息。

温度小数寄存器存储温度的小数部分,精度为 0.0625℃。读取温度时,要和温度整数寄存器配合计算实际温度,即便整数部分为负,小数部分也作为正值相加,比如 - 128℃与 0.5℃相加得到 - 127.5℃,该寄存器同样只读,直接读取获取小数部分即可。
温度配置寄存器中的温度使能位(TEMP_EN)是自清除位,将其置 1 时,会启动一次从温度传感器的温度读取操作,温度读取结束后,该位会自动清零回 0,使用时只需把该位置 1 来触发温度读取,无需后续手动清零。
七、I2C接口
MAX30102遵循标准化I2C协议,因此关于I2C协议的数据格式以及信号等不再赘述。主要包括起始信号、停止信号、应答信号与非应答信号、写数据与读数据等,同时数据格式为8位或11位,其中从机地址一般为7位或10位,再包括一位读写方向位。
7.1 从机ID
在手册中关于MAX30102作为从机时的地址描述如下

7.2 起始信号与停止信号

7.3 应答信号与非应答信号

7.4 写数据时序

7.5 读取数据时序


以上均基于芯片手册整理,但是笔者编写底层驱动时因能力有限,实在艰难啊啊啊,因此关于该传感器的驱动代码可参考厂商资料或其他博主开源内容。谢谢
参考资料
MAX30102 亚德诺-ADI_数据手册__用于可穿戴健康设备的高灵敏度脉搏血氧仪和心率传感器
以上便是本次文章的所有内容,欢迎各位朋友在评论区讨论,愿大家共同努力,一起进步吧!
鉴于笔者能力有限,难免出现一些纰漏和不足,望大家在评论区批评指正,谢谢!
