LM95245数字温度传感器:TruTherm技术与高精度热管理设计实战
1. 项目概述LM95245在精密热管理中的角色在服务器主板、高性能计算卡或者高端嵌入式工控设备上你肯定见过那些紧挨着CPU或GPU芯片、用导热胶粘着的小黑片。它们可不是普通的电阻电容而是系统的“体温计”——数字温度传感器。我经手过不少热设计项目从早期的模拟传感器搭配ADC到后来直接选用集成数字接口的芯片最大的感触就是选对传感器热管理就成功了一半。今天要拆解的LM95245就是TI在精密测温领域的一颗经典之作特别适合那些需要对处理器结温进行毫厘级监控的场景。LM95245的核心价值在于它解决了两个关键痛点精度和集成度。早期的分立方案需要外置运放、精密基准源和ADC布线稍有不慎噪声就会把微弱的温度信号淹没。而LM95245把整个ΔVbe测温前端、高分辨率Σ-Δ ADC、数字滤波甚至SMBus接口全部塞进了一个8引脚的小封装里。更厉害的是它的TruTherm技术能自动补偿现代小尺寸工艺晶体管比如45nm、65nm的β值变化让远程二极管测温的误差能控制在±0.75°C以内在特定温度范围内。这意味着你不再需要为不同批次的CPU去手动校准温度偏移系统设计的容错性和一致性大大提升。从应用角度看这颗芯片的定位非常明确为英特尔架构的服务器、工作站和高端台式机提供符合IPMI等管理规范的精准热监控。它的SMBus接口天生就是为这类平台设计的可以直接挂在BMC基板管理控制器的SMBus总线上实时上报CPU和主板关键点的温度。其可编程的T_CRIT和OS报警输出能直接触发系统风扇全速运转或产生不可屏蔽中断NMI实现硬件级的过热保护这对于需要7x24小时稳定运行的数据中心设备来说是至关重要的安全防线。2. 核心架构与TruTherm技术深度解析2.1 双通道测温与ΔVbe原理LM95245提供两个独立的温度监测通道一个用于测量传感器自身芯片温度的本地通道另一个用于测量外部连接的热敏二极管通常集成在CPU/GPU内部的远程通道。其测温的物理基础是半导体PN结的正向压降Vbe与温度的线性关系。具体来说芯片内部会以两个不同的电流I和N*I驱动远程二极管或自身的PN结测量两次的Vbe电压差ΔVbe。这个电压差与绝对温度T成正比且与工艺、结面积等因素无关公式近似为 ΔVbe (kT/q) * ln(N)其中k是玻尔兹曼常数q是电子电荷量。这种方法的妙处在于它抵消了二极管饱和电流Is等工艺参数的影响使得测量结果主要只与温度相关。LM95245内部的Σ-Δ ADC将这个微小的ΔVbe电压通常在毫伏级别转换为数字量。本地温度分辨率为0.125°C10位符号位远程通道在数字滤波器关闭时分辨率为0.125°C11位符号位开启后分辨率可提升至0.03125°C13位。这里有个关键细节ADC的转换并非同时进行而是以轮询Round-Robin方式依次转换本地和远程温度完成一次双通道转换的最快时间约为63ms典型值。在读取温度数据时尤其是远程温度的高低字节必须遵循“先读MSB再读LSB”的顺序因为芯片内部有一个锁存机制读取MSB的瞬间会将对应的LSB数据锁定确保你读到的两个字节属于同一次转换结果避免高低字节错位导致温度计算错误。2.2 TruTherm BJT Beta补偿技术揭秘这是LM95245区别于普通温度传感器的核心技术。传统方案假设远程二极管是一个理想的PN结其非理想因子η为1。然而现代深亚微米工艺如45nm、65nm下的晶体管其电流增益β值较低且非线性度更显著这会导致基于理想模型的温度读数产生显著误差尤其是在高温区间。TruTherm技术本质上是一套内建的、针对特定工艺晶体管模型的补偿算法。LM95245的配置寄存器中有一个“Remote Diode TruTherm Mode Select”位配置寄存器2的D3位。当此位设置为1时芯片内部会调用为“典型英特尔处理器45nm, 65nm, 90nm工艺”优化的补偿曲线动态修正由β值变化引入的测量误差。官方数据表明在TA25°C至85°CTD50°C至105°C的条件下经TruTherm补偿后远程测温精度可达±0.75°C最大值。如果将此位设为0芯片则会使用针对MMBT3904这类离散二极管的模型此时对处理器测温的精度将无法保证。在实际项目中这个设置是首要检查项。我曾经遇到过一台服务器CPU报告的温度总是比散热器基座实测温度高8-10°C排查了半天硬件连接都没问题最后发现是BMC的驱动配置错误将TruTherm模式禁用了。重新启用后读数立刻恢复正常。因此在初始化LM95245时务必根据你连接的热敏二极管类型正确设置此位。对于绝大多数现代英特尔和AMD处理器都应启用TruTherm模式。2.3 SMBus接口与地址配置LM95245采用SMBus 2.0兼容接口这是一种基于I2C协议但增加了超时、警报协议等特性的两线制串行总线广泛用于PC和服务器平台的管理子系统。其引脚SMBCLK时钟和SMBDAT数据均为开漏输出需要外接上拉电阻典型值为1.3kΩ至10kΩ具体取决于总线电容和通信速率。芯片的7位从机地址可通过OS/A0引脚第6脚的硬件电平在三个值中选择低电平接GND0x18 (二进制 0011000)中电平通过电阻分压接至VDD/20x29 (二进制 0101001)高电平接VDD0x4C (二进制 1001100)这里有一个非常重要的硬件设计陷阱OS/A0引脚在上电后默认为地址选择输入功能A0。你可以通过软件将其重新配置为过温关机OS报警输出。但是只有当该引脚硬件连接为高电平即地址为0x4C时才能被配置为OS输出功能。如果你需要用到OS报警引脚那么在PCB布局时就必须将OS/A0通过电阻上拉到VDD并确保地址为0x4C。如果不需要OS功能也务必根据你的SMBus总线规划用电阻将其可靠地拉高、拉低或接到分压中点避免引脚悬空导致地址不确定造成SMBus通信失败。3. 寄存器详解与软件驱动设计要点LM95245的所有功能都通过一系列寄存器控制。理解这些寄存器是编写稳定可靠驱动程序的基石。下面我将关键寄存器分成几类并结合代码片段讲解操作要点。3.1 温度数据寄存器与读取策略温度数据存储在只读寄存器中分为本地和远程且有符号和无符号两种格式。远程温度数据是否启用滤波器会影响LSB寄存器的位权重和分辨率。温度值计算示例以有符号远程温度滤波器关闭为例假设我们依次读取寄存器0x01MSB和0x10LSB得到两个字节MSB 0x19LSB 0x20。合成16位数据raw_data (MSB 8) | LSB 0x1920。解析为有符号整数这是一个12位符号位的左对齐数据。先将其视为16位有符号整数int16_t temp_raw (int16_t)raw_data;。转换为浮点温度值分辨率是0.125°C/LSB。float temperature (temp_raw / 256.0f) * 0.125f;。 计算过程0x1920右移8位除以256得到整数部分再乘以0.125得到实际温度。0x1920对应十进制64326432 / 256 25.12525.125 * 0.125 3.140625这里注意左对齐格式意味着高8位是整数部分低8位是小数部分但权重不同。正确算法是温度 (raw_data 4) * 0.125。因为它是12位数据左对齐到16位所以需要右移4位来获取实际的12位数值。0x1920 4 0x192 十进制为402402 * 0.125 50.25°C。这更符合一个典型的CPU温度读数。关键操作注意如前所述必须先读MSB再读LSB。在代码中这应该是一个不可分割的原子操作。建议的读取函数如下以C语言伪代码为例// 假设已实现基础的SMBus读字节函数 smbus_read_byte(addr, reg) int16_t read_remote_temp_signed(uint8_t sensor_addr) { uint8_t msb, lsb; int16_t raw_temp; // 1. 首先确保命令指针指向远程温度MSB寄存器 (0x01) // 如果之前已指向该寄存器可跳过此步。但为保险起见通常先写入命令。 smbus_write_byte(sensor_addr, 0x01); // 写入命令字节指向MSB寄存器 // 2. 读取MSB寄存器 (0x01) msb smbus_read_byte(sensor_addr, 0x01); // 此操作后LSB被锁定 // 3. 紧接着读取LSB寄存器 (0x10) lsb smbus_read_byte(sensor_addr, 0x10); // 读取后LSB锁存释放 raw_temp (msb 8) | lsb; // 转换为实际温度滤波器关闭分辨率0.125°C // 数据为12位符号位左对齐于16位中因此右移4位得到实际数值 return (raw_temp 4); }3.2 配置寄存器初始化与模式设置芯片的行为由几个配置寄存器控制。上电后芯片处于默认状态转换速率1秒滤波器开启TruTherm模式开启等。在驱动初始化时我们通常需要根据应用需求进行配置。配置寄存器1 (地址 0x03/0x09)这个寄存器控制芯片的基本运行模式。D6 (STOP/RUN)0为运行模式持续转换1为待机模式。在待机模式下可以通过写One-Shot寄存器0x0F触发单次转换适合对功耗极其敏感的应用。D4, D3, D2, D1分别是远程T_CRIT屏蔽、远程OS屏蔽、本地T_CRIT屏蔽、本地OS屏蔽。当设置为1时对应的温度超过限值将不会拉低T_CRIT或OS报警引脚但状态寄存器中的标志位仍会置位。这允许你通过轮询状态寄存器来实现软件报警而不影响硬件报警引脚。初始化建议对于大多数持续监控应用将此寄存器设为0x00全0即运行模式且所有报警均通过硬件引脚输出。配置寄存器2 (地址 0xBF)这是远程二极管通道的核心配置。D6 (OS/A0功能选择)0引脚作为地址输入A01引脚作为OS报警输出。只有在硬件连接为高电平时设置为1才有效。D5, D4二极管故障屏蔽位。用于控制当检测到远程二极管开路或短路故障时是否触发OS或T_CRIT报警。默认D51故障屏蔽T_CRITD40故障不屏蔽OS。这意味着如果二极管故障OS引脚仍可能报警因为故障时温度读数为-128°C或255.875°C很可能触发OS限值。D3 (TruTherm模式选择)关键位。对于监测CPU/GPU必须设置为1。D2-D1 (远程滤波器使能)默认值为11滤波器开启。滤波器能有效抑制噪声但会引入约4个转换周期的延迟见图11的阶跃响应。在噪声较大的环境如开关电源附近务必开启。在需要快速响应的场合可设置为00关闭滤波器但需评估噪声影响。转换速率寄存器 (地址 0x04/0x0A)控制连续转换模式下的转换间隔。00连续转换最快约33ms/通道无二极管63ms/通道有二极管。010.364秒。101秒默认。112.5秒。功耗权衡转换越快功耗越高见图7。在电池供电设备中应根据温度变化速度选择最慢的可用速率以节省电量。3.3 限值与报警逻辑实现LM95245提供了两套独立的温度限值比较器T_CRIT临界温度和OS过温关机。每个比较器都可以独立监控本地和远程温度。限值寄存器远程OS限值 (0x07/0x0D)8位无符号默认0x5585°C。本地共享OS/T_CRIT限值 (0x20)7位无符号默认0x5585°C。注意本地通道的OS和T_CRIT共享同一个限值寄存器。远程T_CRIT限值 (0x19)8位无符号默认0x6E110°C。公共迟滞寄存器 (0x21)5位无符号默认0x0A10°C。迟滞的作用是防止报警输出在限值附近频繁跳变。例如远程T_CRIT限值设为110°C迟滞10°C。当温度从109°C上升到110°C时T_CRIT引脚拉低报警。温度必须回落到100°C110-10以下T_CRIT引脚才会恢复高电平。这个值需要根据系统的热惯性来设置太小会导致风扇频繁启停太大则报警恢复慢。报警逻辑流程每次温度转换完成后芯片会比较本地和远程温度值与对应的限值寄存器。如果某个通道的温度超过其限值且该通道的报警未被屏蔽配置寄存器1则对应的状态位状态寄存器1置1。同时如果任意一个未屏蔽的通道触发了报警相应的报警引脚T_CRIT或OS就会被拉低开漏输出需要外部上拉。只有当所有触发报警的通道的温度都回落到限值 - 迟滞以下时报警引脚才会释放。状态寄存器1 (0x02)是查询报警来源的关键D7 (Busy)转换进行中时为1。D4 (ROS)远程温度超过OS限值。D2 (Diode Fault)远程二极管故障开路或短路。D1 (RTCRIT)远程温度超过T_CRIT限值。D0 (LOC)本地温度超过共享的OS/T_CRIT限值。在中断服务程序或轮询任务中读取这个寄存器就能快速定位热问题的根源。4. 硬件设计、布线要点与常见陷阱再好的芯片也怕糟糕的PCB设计。对于LM95245这类高精度模拟数字混合芯片硬件布局布线是成败的关键。4.1 电源与去耦设计LM95245的工作电压范围为3.0V至3.6V典型3.3V。数据手册明确要求在VDD引脚附近需要并联放置三个电容100pF、0.1μF和10μF并且100pF的陶瓷电容必须最靠近芯片的VDD引脚1脚。这个顺序不能错。100pF用于滤除极高频率的噪声100MHz这些噪声可能来自数字开关或射频干扰。0.1μF (100nF)滤除中高频噪声几MHz到几十MHz这是数字芯片去耦的标准配置。10μF提供局部储能应对电流的瞬时变化并滤除低频噪声。为什么必须靠近电容的寄生电感会随走线长度增加而增大从而降低其高频去耦效果。长走线相当于给噪声开了一个后门。我曾调试过一块板子LM95245的远程温度读数偶尔会有1-2°C的毛刺后来用示波器在VDD引脚上看到了几十毫伏的高频纹波正是由于100pF电容放得太远。将其挪到芯片背面via-in-pad后纹波消失读数立刻稳定下来。4.2 远程二极管连接与布线这是精度影响最大的部分。D和D-引脚连接到CPU或其他芯片的内部热敏二极管。走线要求D和D-必须作为差分对进行布线。这意味着两条线要尽可能等长、等宽、平行走线且紧密耦合。这能有效抑制共模噪声如来自数字电源的开关噪声。建议使用较细的线宽如4-6mil并用地线包围或采用微带线结构以提供一致的阻抗并减少串扰。寄生参数走线会引入寄生电阻和电容。寄生电阻会产生额外的压降被传感器误认为是温度变化。因此走线应尽可能短绝对不要超过几厘米。如果必须走长线可以考虑使用双绞线。寄生电容会与传感器的电流源形成低通滤波器减缓信号边沿可能影响测量。数据手册图3和图4展示了二极管节点电容和漏电流对读数的影响。通常总电容包括走线和ESD保护器件应控制在1000pF以内。滤波与保护可以在D和D-之间靠近传感器端放置一个100pF的电容用于滤除高频噪声。但电容值不宜过大否则会影响传感器的驱动能力。绝对不要在D或D-到地之间单独加电容这会严重分流传感器的驱动电流导致读数错误。如果需要ESD保护应选择低电容的TVS二极管对如5pF并对称地放置在D和D-对地之间。远离噪声源D/D-走线必须远离开关电源、时钟线、高速数据总线等噪声源。最好在PCB的内层走线用地平面作为屏蔽。4.3 SMBus总线与上拉电阻SMBCLK和SMBDAT是开漏输出必须连接上拉电阻到3.3V。电阻值的选择是一个权衡阻值太小总线电流大上升沿快但会增加芯片的功耗和发热可能轻微影响本地温度读数。阻值太大上升沿变慢可能无法满足SMBus的时序要求特别是高速模式。数据手册建议在VDD3.0V时为了提供2.1V的高电平最大上拉电阻为82kΩ5%或88.7kΩ1%。在实际项目中我通常使用4.7kΩ到10kΩ的电阻。这个范围在标准SMBus负载电容几十到几百pF下能提供足够快的边沿速度同时功耗也可接受。务必使用精度1%的电阻以确保总线电平的稳定性。上拉电阻的电源应来自干净的模拟3.3V而不是数字3.3V以避免数字开关噪声耦合到总线上。5. 软件驱动实战与调试技巧驱动LM95245不仅仅是读写寄存器更要处理各种边界情况和错误状态。5.1 完整的初始化流程一个健壮的初始化流程应该如下#define LM95245_ADDR 0x4C // 假设A0接高电平 int lm95245_init(void) { uint8_t reg_val; // 1. 验证器件存在读取制造商ID (0xFE) 和版本ID (0xFF) if (smbus_read_byte(LM95245_ADDR, 0xFE) ! 0x01) { return -1; // 非TI器件或通信失败 } printf(Manufacturer ID: 0x%02X\n, smbus_read_byte(LM95245_ADDR, 0xFE)); printf(Revision ID: 0x%02X\n, smbus_read_byte(LM95245_ADDR, 0xFF)); // 2. 配置远程二极管通道 (配置寄存器2, 地址0xBF) // 目标配置: OS/A0作为地址输入(0), 故障屏蔽T_CRIT(1), 故障不屏蔽OS(0), // TruTherm模式开启(1), 滤波器开启(11), 保留位(1) // 即: 0b 0 0 1 0 1 1 1 1 0x2F // 但注意D0是保留位读为1。我们写入0x2F读回可能是0x2F或0x2F|0x010x2F因为D0是1。 // 实际上默认值就是0x1F。我们需要确保D31TruTherm开启和D2-D111滤波器开启。 reg_val smbus_read_byte(LM95245_ADDR, 0xBF); if ((reg_val 0x0E) ! 0x0E) { // 检查D3, D2, D1位 reg_val (reg_val ~0x0E) | 0x0E; // 设置D31, D21, D11 smbus_write_byte(LM95245_ADDR, 0xBF, reg_val); } // 3. 配置运行模式与报警屏蔽 (配置寄存器1, 地址0x03) // 目标: 运行模式(0), 远程T_CRIT不屏蔽(0), 远程OS不屏蔽(0), // 本地T_CRIT不屏蔽(0), 本地OS不屏蔽(0) - 0x00 smbus_write_byte(LM95245_ADDR, 0x03, 0x00); // 4. 设置转换速率 (转换速率寄存器, 地址0x04) // 设置为连续转换最快模式 (00) smbus_write_byte(LM95245_ADDR, 0x04, 0x00); // 5. 设置温度限值与迟滞 (根据应用需求) smbus_write_byte(LM95245_ADDR, 0x07, 85); // 远程OS限值 85°C smbus_write_byte(LM95245_ADDR, 0x19, 105); // 远程T_CRIT限值 105°C (比OS高) smbus_write_byte(LM95245_ADDR, 0x20, 95); // 本地共享限值 95°C smbus_write_byte(LM95245_ADDR, 0x21, 5); // 公共迟滞 5°C // 6. 可选设置远程偏移量 (用于软件校准) // 如果已知传感器存在固定偏移可写入0x11高字节和0x12低字节 // 偏移量为2的补码格式单位0.125°C。 return 0; // 初始化成功 }5.2 温度读取与状态监控任务在RTOS或裸机循环中需要定期读取温度和状态。void temperature_monitor_task(void) { int16_t local_temp_raw, remote_temp_raw; float local_temp_c, remote_temp_c; uint8_t status; while(1) { // 1. 读取状态寄存器1检查错误和报警 status smbus_read_byte(LM95245_ADDR, 0x02); if (status 0x04) { // D2: Diode Fault printf([ERROR] Remote diode fault detected!\n); // 处理二极管故障可能记录日志触发次级报警等 } if (status 0x12) { // D4: ROS, D1: RTCRIT, D0: LOC // 有温度报警 if (status 0x10) printf([ALERT] Remote OS limit exceeded!\n); if (status 0x02) printf([CRITICAL] Remote T_CRIT limit exceeded!\n); if (status 0x01) printf([ALERT] Local temperature limit exceeded!\n); // 可以读取温度值进一步判断 } // 2. 读取本地温度 (MSB:0x00, LSB:0x30) smbus_write_byte(LM95245_ADDR, 0x00); // 指向本地MSB local_temp_raw (int16_t)(smbus_read_byte(LM95245_ADDR, 0x00) 8); local_temp_raw | smbus_read_byte(LM95245_ADDR, 0x30); local_temp_c (local_temp_raw 4) * 0.125f; // 10位符号右移4位 // 3. 读取远程有符号温度 (MSB:0x01, LSB:0x10) smbus_write_byte(LM95245_ADDR, 0x01); // 指向远程MSB remote_temp_raw (int16_t)(smbus_read_byte(LM95245_ADDR, 0x01) 8); remote_temp_raw | smbus_read_byte(LM95245_ADDR, 0x10); remote_temp_c (remote_temp_raw 4) * 0.125f; // 假设滤波器关闭 printf(Local: %.3f C, Remote: %.3f C\n, local_temp_c, remote_temp_c); // 4. 任务延时频率应低于转换速率。如果设置为连续最快模式(63ms)这里可以延时100-200ms。 vTaskDelay(pdMS_TO_TICKS(200)); } }5.3 常见问题排查与解决思路在实际部署中你可能会遇到以下问题问题1读取的温度值固定为-128°C有符号或255.875°C无符号且状态寄存器显示二极管故障Diode Fault。原因这是典型的远程二极管连接问题。D可能对地短路、对电源短路或者完全开路未连接。排查首先用万用体检查D和D-对地、对3.3V的直流电阻。正常情况下二极管正向应有几百欧姆电阻反向兆欧级以上。检查PCB走线特别是过孔和连接器是否存在虚焊或断裂。确认连接的CPU或芯片是否已经上电并处于工作状态。有些处理器的热敏二极管在核心未上电时是不导通的。检查D/D-走线附近是否有强干扰源巨大的噪声也可能被误判为故障。问题2温度读数不稳定有数摄氏度的跳动。原因A电源噪声。用示波器AC耦合模式在100pF去耦电容的焊盘上测量VDD纹波。如果纹波超过几十毫伏说明去耦不足或电源本身噪声大。解决确保三个去耦电容100pF, 0.1uF, 10uF已正确安装且紧靠芯片。检查电源轨的负载是否过重或考虑为LM95245使用独立的LDO供电。原因BSMBus总线噪声。总线受到干扰导致读取的数据出错。解决检查SMBus走线是否与噪声线平行过长。确保上拉电阻值合适4.7k-10kΩ且上拉电源干净。可以在SMBCLK和SMBDAT上对地加一个10-47pF的电容小心不要影响上升时间。原因C远程二极管走线受干扰。解决确保D/D-是紧密耦合的差分对。如果走线过长或环境恶劣可以考虑在传感器端的D和D-之间增加一个100pF电容并尝试启用数字滤波器配置寄存器2的D2-D1设为11。问题3SMBus通信时好时坏甚至完全无响应。原因A地址冲突。总线上有其他设备地址与LM95245冲突。解决用逻辑分析仪抓取SMBus波形确认发送的地址字节是否正确。检查OS/A0引脚电平是否稳定确保地址设置正确。原因B总线时序不满足。主控的SMBus时钟频率过高或高低电平时间不满足芯片的tLOW, tHIGH要求。解决降低主控的SMBus时钟频率至100kHz以下标准模式。检查总线电容是否过大导致上升时间过长超过tTIMEOUT35ms的风险。如果总线很长设备多可能需要减小上拉电阻值。原因C芯片未正常复位。如果主控在LM95245通信中途复位可能导致其SMBus状态机卡死。解决在驱动初始化时增加一个总线恢复序列先尝试读取ID如果失败则主动将SMBDAT和SMBCLK线拉低至少35ms执行超时复位然后再重新尝试初始化。问题4本地温度读数明显高于环境温度。原因自发热。LM95245自身功耗会导致芯片结温升高。虽然功耗仅几百微安但在密闭空间或散热不良时仍可能产生几摄氏度的温升。解决评估本地温度读数的用途。如果仅作参考可以接受这个偏移。如果需要精确测量环境温度应确保芯片周围空气流通良好或者通过实验测量出在特定工作条件下的自发热偏移量在软件中进行补偿。切记不要用本地温度来精确测量PCB环境温度它更适合作为芯片自身健康状态的参考。6. 进阶应用低功耗与单次转换模式在一些电池供电的便携设备或物联网节点中功耗是关键指标。LM95245的待机模式Standby和单次转换One-Shot功能可以派上用场。待机模式通过设置配置寄存器1的D6位STOP/RUN为1芯片将停止周期性的温度转换仅保持SMBus接口活动此时典型电流降至300μA以下。单次转换在待机模式下向One-Shot寄存器地址0x0F写入任意值会触发一次完整的本地和远程温度转换。转换完成后芯片自动返回待机模式。此时T_CRIT和OS引脚会根据本次转换的结果更新状态。应用模式系统大部分时间处于睡眠状态LM95245也处于待机模式。定时器如MCU的RTC每隔一段时间如10秒唤醒MCU。MCU通过SMBus向LM95245的One-Shot寄存器写入数据触发单次转换。MCU等待一段时间大于63ms转换时间然后读取温度数据和状态寄存器。如果温度正常MCU返回睡眠如果超温MCU启动风扇或进行其他处理。LM95245也返回待机模式。这种模式下的平均功耗可以做到极低。假设每10秒转换一次每次转换加读取耗时100ms工作电流670μA待机电流300μA则平均电流约为(0.67mA * 0.1s 0.3mA * 9.9s) / 10s ≈ 0.307mA。这比持续在1秒转换速率下的0.35mA典型值略有降低但在更长的采样间隔下优势会更明显。注意事项在单次转换模式下报警功能是“单次有效”的。即只有触发转换的那一次结果会更新报警引脚。如果之后温度在待机期间发生变化报警状态不会更新直到下一次单次转换。因此这种模式适用于对实时性要求不高的周期性巡检场景而不适用于需要持续监控的紧急过热保护。对于后者必须让芯片保持在连续转换模式。