MAX30102文档

中断状态寄存器

img

无论何时触发中断,MAX30102都会将低电平有效的中断引脚拉至低电平状态,直到中断被清除。

A_FULL: FIFO满标志

在SpO 2和HR模式下,当FIFO写指针剩余一定数量的空闲空间时,该中断触发。

触发号可以由FIFO_A_FULL [3:0]寄存器设置。 通过读取中断状态1寄存器(0x00)清除中断。

PPG_RDY:新的FIFO数据就绪

在SpO 2和HR模式下,当数据FIFO中有新样本时,此中断将触发。通过读取中断状态1寄存器(0x00)或读取FIFO_DATA寄存器来清除中断。

ALC_OVF:环境光消除溢出(置位时说明硬件校正失败)

当SpO 2 / HR光电二极管的环境光消除功能达到其最大限制时,该中断触发,因此,环境光影响ADC的输出。通过读取中断状态1寄存器(0x00)清除中断。

PWR_RDY:电源就绪标志

在上电或欠压情况下,当电源电压VDD从欠压锁定(UVLO)电压低于UVLO电压时,电源就绪中断被触发,表示模块已上电并准备好收集数据。

DIE_TEMP_RDY:内部温度就绪标志

内部芯片温度转换完成后,将触发此中断,以便处理器可以读取温度数据寄存器。通过读取中断状态2寄存器(0x01)或TFRAC寄存器(0x20)来清除中断。

中断允许寄存器

​ 保留位应该设置为0

FIFO数据寄存器

FIFO深度为32,最多可容纳32个数据样本。样本大小取决于配置为活动的LED通道(a.k.a.通道)的数量。由于每个通道信号存储为3字节数据信号,因此FIFO宽度可以是3个字节或6个字节。

I 2 C寄存器映射中的FIFO_DATA寄存器指向要从FIFO读取的下一个样本。 FIFO_RD_PTR指向此示例。读FIFO_DATA寄存器不会自动递增I 2 C寄存器地址。突发读取该寄存器,一遍又一遍地读取相同的地址。每个样本是每个通道3个字节的数据(即,RED为3个字节,IR为3个字节等)。

FIFO寄存器(0x04-0x07)都可以写入和读取,但实际上只应写入FIFO_RD_PTR寄存器。其他数据由MAX30102自动递增或填充数据。当开始新的SpO 2或心率转换时,建议首先将FIFO_WR_PTR,OVF_COUNTER和FIFO_RD_PTR寄存器清零为全零(0x00),以确保FIFO为空并处于已知状态。在一次突发读取I 2 C事务中读取MAX30102寄存器时,寄存器地址指针通常会递增,以便发送的下一个数据字节来自下一个寄存器,等等。例外情况是FIFO数据寄存器寄存器0x07。读取该寄存器时,地址指针不会递增,但FIFO_RD_PTR会递增。因此,发送的下一个数据字节表示FIFO中可用的下一个数据字节

从FIFO读取

通常,从I 2 C接口读取寄存器会自动增加寄存器地址指针,因此可以在没有I 2 C启动事件的情况下以突发读取方式读取所有寄存器。 在MAX30102中,除FIFO_DATA寄存器(寄存器0x07)外,所有寄存器都适用。

读FIFO_DATA寄存器不会自动递增寄存器地址。一遍又一遍地读取该寄存器取来的都是同一地址的数据。 每个样本包含多个字节的数据,因此应从该寄存器(在同一事务中)读取多个字节以获得一个完整样本。

另一个例外是0xFF。 在0xFF寄存器之后读取更多字节不会使地址指针返回到0x00,并且读取的数据没有意义。

FIFO数据结构

数据FIFO由32个样本存储器组组成,可存储IR和RED ADC数据。 由于每个样本由两个通道的数据组成,每个样本有6个字节的数据,因此可以在FIFO中可以存储192个总字节数据。

FIFO如表1所示进行数据左对齐; 换句话说,无论ADC分辨率设置如何,MSB位始终位于第17位数据位置。 有关FIFO数据结构的直观表示,请参见表2。

FIFO数据每通道包含3个字节

FIFO数据是左对齐的,这意味着无论ADC分辨率设置如何,MSB始终位于相同的位置。 FIFO DATA [18] - [23]保留。 表2显示了每个三字节字节的结构(包含每个通道的18位ADC数据输出)。

SpO 2模式下的每个数据样本包含两个数据三元组(每个3个字节)。要读取一个样本,每个字节需要一个I 2 C读取命令。 因此,要在SpO 2模式下读取一个样本,需要6 I 2 C字节读取。 在读取每个样本的第一个字节后,FIFO读指针自动递增。

写/读指针

写/读指针用于控制FIFO中的数据流。 每次将新样本添加到FIFO时,写指针都会递增。 每次从FIFO读取样本时,读指针都会递增。 要重新读取FIFO中的样本,请将其值减1并再次读取数据寄存器。

进入SpO 2模式或HR模式时,应将FIFO写/读指针清零(返回0x00),以便FIFO中不存在旧数据。 如果V DD重新上电或V DD降至低于其UVLO电压,则指针自动清零。

从FIFO读取数据的伪代码示例

第一个事务:获取FIFO_WR_PTR:

1
2
3
4
5
6
7
START;
Send device address + write mode
Send address of FIFO_WR_PTR;
REPEATED_START;
Send device address + read mode
Read FIFO_WR_PTR;
STOP;

中央处理器评估要从FIFO读取的样本数:

NUM_AVAILABLE_SAMPLES = FIFO_WR_PTR – FIFO_RD_PTR

(Note: pointer wrap around should be taken into account)

NUM_SAMPLES_TO_READ = < less than or equal to NUM_AVAILABLE_SAMPLES >

第二个实务: 从FIFO中读取 NUM_SAMPLES_TO_READ 个样本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
START;
Send device address + write mode
Send address of FIFO_DATA;
REPEATED_START;
Send device address + read mode
for (i = 0; i < NUM_SAMPLES_TO_READ; i++) {
Read FIFO_DATA;
Save LED1[23:16];
Read FIFO_DATA;
Save LED1[15:8];
Read FIFO_DATA;
Save LED1[7:0];
Read FIFO_DATA;
Save LED2[23:16];
Read FIFO_DATA;
Save LED2[15:8];
Read FIFO_DATA;
Save LED2[7:0];
Read FIFO_DATA;
}
STOP;
START;
Send device address + write mode
Send address of FIFO_RD_PTR;
Write FIFO_RD_PTR;
STOP;

第三个事务:

写入FIFO_RD_PTR寄存器。 如果第二个事务成功,则FIFO_RD_PTR指向FIFO中的下一个样本,并且不需要第三个事务。 否则处理器适当地更新FIFO_RD_PTR,以便重新读取样本。

FIFO 配置(0x08)

位 7:5: 样本均值化 (SMP_AVE)

为了减少数据吞吐量,可以通过设置该寄存器在芯片上对相邻样本(在每个单独的通道中)进行平均和抽取。

img

位4: FIFO满时循环(FIFO_ROLLOVER_EN)

当FIFO完全填满数据时,该位控制FIFO的行为。 如果FIFO_ROLLOVER_EN设置为(1),则FIFO地址将从0开始,FIFO将继续填充新数据。 如果该位未置位(0),则在读取FIFO_DATA或更改WRITE / READ指针位置之前,FIFO不会更新。

位3:0:FIFO几乎满值(FIFO_A_FULL)

该寄存器设置发出中断时FIFO中剩余的数据样本数(3个字节/样本)。 例如,如果此字段设置为0x0,则在FIFO中剩余0个数据样本时发出中断(所有32个FIFO字都有未读数据)。 此外,如果此字段设置为0xF,则在FIFO中剩余15个数据样本时发出中断(17个FIFO数据样本具有未读数据)。

SpO 2 配置 (0x0A)

Bits 6:5: SpO 2 ADC量程控制

该寄存器设置SpO 2传感器ADC的满量程范围,如表5所示。

比特4:2:SpO 2采样率控制

这些位定义了有效采样率,其中一个样本由一个IR脉冲/转换和一个红色脉冲/转换组成。

采样率和脉冲宽度是相关的,因为采样率设置脉冲宽度时间的上限。 如果用户选择的采样率对于所选的LED_PW设置来说太高,则可能的最高采样率被编程到寄存器中。

位1:0:LED脉冲宽度控制和ADC分辨率

这些位设置LED脉冲宽度(IR和RED具有相同的脉冲宽度),因此间接设置每个样本中ADC的积分时间。 ADC分辨率与积分时间直接相关。

采样率和性能

ADC的最大采样速率取决于所选的脉冲宽度,进而决定了ADC的分辨率。 例如,如果脉冲宽度设置为69μs,那么ADC分辨率为15位,并且所有采样率都是可选的。 但是,如果脉冲宽度设置为411μs,则采样率受限。 表11和表12总结了SpO 2和HR模式的允许采样率。

心率模式下,仅红色LED用于捕获光学数据并确定用户的心率和/或光电容积描记图(PPG)。

SpO 2温度补偿

MAX30102具有精确的板载温度传感器,可根据I 2 C主机的命令数字化IC的内部温度。 温度对红色和红外LED的波长有影响。 虽然器件输出数据对IR LED的波长相对不敏感,但红色LED的波长对于正确解释数据至关重要。

表13显示了红色LED波长与LED温度的相关性。 由于LED管芯以非常短的热时间常数(几十微秒)加热,因此应根据LED的电流水平和IC的温度计算LED波长。 使用表13估算温度。

MAX30102具有2线I2C / SMBus兼容串行接口,包括串行数据线(SDA)和串行时钟线(SCL)。 SDA和SCL有助于MAX30102与主机之间的通信,时钟速率高达400kHz。 图1显示了2线接口时序图。 主机生成SCL并在总线上启动数据传输。 主器件通过发送正确的从地址和数据将数据写入MAX30102。 每个发送序列由START(S)或REPEATED START(Sr)条件和STOP(P)条件构成。 传输到MAX30102的每个字长为8位,后跟一个应答时钟脉冲。 来自MAX30102的主机读数据传输正确的从机地址,然后发送一系列9个SCL脉冲。

MAX30102与主机产生的SCL脉冲同步在SDA上传输数据。 主设备确认收到每个数据字节。 每个读取序列由START(S)或REPEATED START(Sr)条件,非应答和STOP(P)条件构成。 SDA既可作为输入,也可作为漏极开路输出。 SDA需要一个上拉电阻,通常大于500Ω。 SCL仅作为输入操作。 如果总线上有多个主机,或者单个主机具有漏极开路SCL输出,则SCL上需要一个上拉电阻,通常大于500Ω。 符合SDA和SCL的串联电阻是可选的。 串联电阻可保护MAX30102的数字输入免受总线上的高压尖峰影响,并最大限度地降低总线信号的串扰和下冲。

数据传输

在每个SCL周期期间传输一个数据位。 SDA上的数据必须在SCL脉冲的高电平期间保持稳定。 SCL高时SDA的变化是控制信号。 请参阅START和STOP条件部分。

启动和停止条件

当总线不使用时,SDA和SCL空闲。 主设备通过发出START条件来启动通信。 START条件是SCL为高电平时SDA从高到低的转换。 STOP条件是SCL为高电平时SDA从低到高的转换(图7)。 来自主设备的START条件表示传输到设备的开始。 主设备终止传输,并通过发出STOP条件释放总线。 如果生成REPEATED START条件而不是STOP条件,则总线保持活动状态。

早期停止条件

MAX30102在数据传输期间的任何时刻都能识别出STOP条件,除非STOP条件出现在与START条件相同的高脉冲中。 为了正常工作,请勿在与START条件相同的SCL高电平脉冲期间发送STOP条件。

从机地址

总线主控器通过发出START条件后跟7位从机ID启动与从机设备的通信。空闲时,MAX30102等待START条件后跟从机ID的控制序列。串行接口逐位比较每个从站ID,如果检测到错误的从站ID,则允许接口断电并立即断开与SCL的连接。识别出START条件后跟正确的从机ID序列后,MAX30102被根据ID字的LSB是读还是写(R / W)编程为接受或发送数据。 R / W表示主机是写入还是从MAX30102读取数据(R / W = 0选择写入条件,R / W = 1选择读取条件)。接收到正确的从机ID后,MAX30102通过将SDA拉低一个时钟周期发出ACK。 MAX30102从机ID由7个固定位B7-B1(设置为0b1010111)组成。首先发送最重要的从ID位(B7),然后发送剩余的位。表17显示了设备的可能的从ID。

应答位

应答位(ACK)是MAX30102在时钟的第9位在写入模式下用于握手接收每个数据字节(图8)。 如果成功接收到前一个字节,MAX30102会在整个主机产生的第9个时钟脉冲期间拉低SDA。 监测ACK可以检测失败的数据传输。 如果接收设备繁忙或发生系统故障,则会发生不成功的数据传输。 如果数据传输失败,总线主机将重试通信。 当MAX30102处于读模式时,主器件在第9个时钟周期内拉低SDA以确认接收数据。 在每个读取字节之后,主机发送应答以允许数据传输继续。 当主机从MAX30102读取数据的最后一个字节,然后是STOP条件时,发送一个未应答。

写操作

对于写操作,将从ID作为第一个字节,然后是寄存器地址字节,然后是一个或多个数据字节。 寄存器地址指针在接收到的每个数据字节后自动递增,因此例如可以一次写入整个寄存器库。 使用STOP条件终止数据传输。 写操作如图9所示。

内部寄存器地址指针自动递增,因此写入附加数据字节按顺序填充数据寄存器。

img

读数据格式

对于读操作,必须执行两次I 2 C操作。首先,发送从机地址,然后发送您想要读取的I 2 C寄存器的ID。然后发送REPEAT START(Sr)条件,然后发送读取从机ID。然后,MAX30102开始从第一个操作中选择的寄存器中发送数据。读指针自动递增,因此器件继续按顺序从其他寄存器发送数据,直到收到STOP(P)条件。例外情况是FIFO_DATA寄存器,读取指针在读取其他字节时不再递增。要在FIFO_DATA之后读取下一个寄存器,需要I 2 C写命令来更改读指针的位置。图10和图11显示了读取一个字节和多个字节数据的过程。需要进行初始写操作发送读取寄存器地址。从初始I 2 C写操作中选择的寄存器开始,按顺序从寄存器发送数据。如果读取FIFO_DATA寄存器,则读指针不会自动递增,后续的数据字节将包含FIFO的内容。