资讯动态

SDM660平台电源配置实战:从PMIC架构到DVFS调优与排障

发布时间:2026/10/6 10:58:48 来源:尧图企业网站定制
做SDM660平台的项目也不是一两天了每次有同事拿着“唤醒不了”“待机功耗下不去”“温度异常高”这类问题找过来排查到最后十有八九都绕不开电源部分的配置。手机平台上大家都盯着Camera、屏幕、性能调度电源配置往往是最容易被忽略但又最能决定产品生死的一环。SDM660这颗芯片虽然发布有些年头了但在行业终端、IoT设备、车载后装甚至一些国产平板方案里仍然大量出货一套扎实的电源配置知识什么时候都用得上。这篇就把SDM660电源部分配置这件事从头到尾捋一遍从双PMIC架构、各路电压域的分工到DTS里怎么改、时序怎么对再到DVFS调优和实际排障手段全部端出来讲。内容偏实战是给RD工程师看的不是科普软文。1. 先搞清SDM660的电源管理整体框架1.1 两颗PMIC的分工逻辑SDM660平台用的是高通经典的“主PMIC辅PMIC”搭配方案具体型号是PM660和PM660L两颗芯片一起承担整个系统所有的电源转换、充电管理、外设供电以及部分模拟信号采集功能。从硬件拓扑上看PM660作为主PMIC挂在SPMI总线的master端直接和SDM660的处理器核心通信负责SoC内部几个关键电压域的供电比如CPU簇的VDD_APC、系统逻辑的VDD_CX、VDD_MX同时也负责USB PHY的供电和检测、一部分LDO输出、电池充电通道和Fuel Gauge电量计。PM660L则是辅助PMIC主要是补充PM660覆盖不到的部分比如大电流的GPU供电、显示背光WLED驱动、振动马达驱动、Audio Codec电源以及剩余的LDO输出。这里有个很容易忽略的关键点两颗PMIC之间并不是独立工作的它们通过SPMI总线互联所有的电压调节请求、状态查询、中断上报最终都是由主PMIC汇总后交给SoC侧的RPM固件处理。所以你在改某一个LDO电压的时候如果发现PM660L上的寄存器不生效或者写不进去先别急着怀疑寄存器地址算错了大概率是SPMI通信那一侧的APID映射表没配对。1.2 为什么单PMIC方案撑不住SDM660有人会问SDM660也不是什么旗舰芯片为什么当年高通要给它配两颗PMIC核心原因有三个。第一是电流能力。SDM660在满负荷运行时CPU大核簇瞬间峰值电流可能到4A以上加上GPU、DDR、Modem同时拉高瞬态总电流超过10A很正常。单颗PMIC的BUCK输出能力有限勉强硬撑要么发热爆炸要么输出纹波超标导致SoC复位与其在单芯片里堆大电感大管子不如拆成两颗各司其职PCB布局和散热都更好处理。第二是背光驱动。PM660L集成了WLED背光升压驱动电路可以直驱4串到6串的LED背光输出电流能到30mA串。如果这个功能放在PM660里背光开关瞬间的噪声会直接耦合到主PMIC的模拟地上屏幕显示和数据采集都会受影响。物理上隔离是效果最好的解法。第三是历史包袱。高通从骁龙800时代开始就建立了“大主PMIC大辅PMIC”的平台套路PMIC和SoC是一起lay出来的沿用双PMIC的框架可以最大程度复用参考设计降低客户整机设计的风险。这也是后面骁龙6系、7系平台一直保留双PMIC方案的原因。临了补一句两颗PMIC的供电输入都要做充分的去耦处理我在实际项目中见过因为PM660L输入端钽电容被工程师顺手换成了普通MLCC导致背光启动时输入电压跌落触发UVLO屏幕一闪一闪的问题。看似只是换了个电容实际是电源配置里最容易被忽视的输入路径阻抗问题。2. 电压域逐个拆谁在吃这路电2.1 从SDM660的电源域框图找关系打开SDM660的Technical Reference Manual最值得花时间看的就是Power Domain那张大图。整颗SoC内部被划分成十几个电压域每个域既独立供电又互相存在依赖关系。我从实际项目维护的角度把最核心的几个域列出来电源轨域作用典型电压范围上电顺序位次备注VDD_APC0小核簇2.2GHz A530.8V - 1.0V中段随CPR/DVFS动态调整VDD_APC1大核簇2.2GHz A730.8V - 1.0V中段峰值电流高需要大电流BUCKVDD_CXSoC核心逻辑、互联总线0.5V - 0.95V前段与VDD_MX有电压依赖关系VDD_MX大部分数字逻辑保持电源0.55V - 0.95V最前段AOP域和唤醒逻辑也挂在这条域上VDD_GPUAdreno 512 GPU0.6V - 0.9V中后段大电流瞬态响应要求高VDD_EBI0/EBI1LPDDR4/4X内存接口0.6V - 1.0V内存训练前与内存颗粒DDR PHY强相关VDD_MEMDRAM供电1.0V/1.1V内存训练前固定电压或随频率切换VDD_MX和VDD_CX内部逻辑0.5V-0.95V- -两者有斜坡依赖很多人一看这张表就头大记不住谁是谁。我的经验是把它们分成三组记第一组是“跟性能走”的动态轨包括APC0、APC1、GPU、CX它们电压高不高全看当时负载高不高第二组是“跟存活走”的常开轨包括MX、AOP、SSC处理器睡不睡觉都在供电第三组是“跟外设走”的专用轨比如EBI、MEM、RF、IO这些它们常亮常灭取决于当前外设状态。分组记的好处是排障时思路特别清晰——玩着玩着重启了先查第一组休眠唤醒不了先查第二组外设没反应先查第三组。2.2 CPU和GPU不是同一条电源轨关于CPU和GPU的电源配置有两点经验必须强调。第一SDM660的“大小核”是两个独立簇电压设计上虽然都叫VDD_APC但APC0和APC1分别由PM660上的两路BUCK供电DTS里对应的是两个regulator节点。做DVFS调优时注意不要只改大核那一组的频点电压表小核那边也要同步压否则会出现“大核温度正常、小核漏电异常”的怪现象。第二GPU的供电轨是从PM660L的那颗大电流BUCKB_BOB或SIDO的某个输出取的。GPU的瞬态响应要求比CPU更苛刻因为帧负载是突变的一帧重负载突然切到轻负载电压容易过冲。这也是高通的默认配置里GPU频率和电压映射表的步进会比CPU更细的原因。实际调优时如果发现GPU偶尔渲染卡顿但又不掉帧可以尝试提高GPU最低频率档位而不是单纯加压效果往往更明显。2.3 那些不起眼但很关键的LDO轨主PMIC和辅PMIC上一共分布着二十多路LDO这类轨电压不高、电流不大但每一路都对应一个具体外设的供电需求而且很多外设在低功耗模式下是靠LDO保持供电的。做电源配置时LDO最容易踩的坑是电压值照抄参考设计没有查外设的实际工作电压范围。以SDM660平台常搭配的UFS 2.1闪存为例它的VCC电压是2.5VVCCQ是1.2VVCCQ2是1.8V。如果VCCQ默认配成1.8V启动的时候UFS驱动初始化就会失败而且这个失败不是必现的有时候能过初始化有时候卡死。这种问题没有快速排查技巧只能对照memory芯片规格书逐项核。LDO配置还有一个关键是正确设置负载开关模式和软启动斜率。有些PM660L的LDO在PWM/PFM模式下会有输出纹波差异对模拟传感器供电时建议强制PWM模式而在摄像头传感器这类有启动浪涌的供电上软启动时间设太短会导致电压跌落设太长又会导致上电时序不满足sensor规格要求。这个要对着波形实测别拍脑袋定。3. 软件配置怎么落地从RPM固件到DTS3.1 先理解SPMI总线上的电源管家机制在SDM660平台上软件层面直接对PMIC寄存器动手是行不通的。所有电压调节请求都要经过RPMResource Power Manager固件RPM跑在专用的小核上以消息的形式处理来自主核的请求。硬件通道就是SPMI总线协议层是QCOM的Resource State Coordinator。所以你在看SDM660电源配置代码时会看到大量围绕RPM调度的抽象层。比如内核里qcom-pm660-regulator.c这个驱动本质上是注册了一批regulator_ops回调读电压走的是SPMI寄存器写电压走的是RPM消息。这套设计的最大好处是RPM能够全局统筹电源状态比如A53簇要降频到300MHzRPM会先把APC0电压降到对应档位再通知时钟控制器降频保证安全余量。这也是为什么很多从I2C类PMIC平台转过来的工程师会不适应——他们在老平台上习惯了直接写PMIC寄存器改电压到了SDM660上发现改了不生效其实就是绕过了RPM的仲裁。记住这句话SDM660平台上所有电源轨的电压状态最终所有者是RPM固件不是Linux内核。3.2 DTS里电源节点的配置套路一个典型的PM660的regulator节点长这样rpm_bus { rpm-regulator-smpa1 { status okay; pm660_s1: regulator-s1 { regulator-name pm660_s1; regulator-min-microvolt 800000; regulator-max-microvolt 1165000; qcom,init-voltage 1120000; regulator-always-on; regulator-boot-on; }; }; };这段配置的意图很明确定义一个名为pm660_s1的buck允许电压范围是0.8V到1.165V系统启动时初始电压是1.12V并且要求常开。实际项目里最关键的是搞清楚每个regulator节点名和PMIC物理输出之间的对应关系这块要用寄存器偏移和基地址来确认我建议直接从高通发布的pm660.dtsi和pmi660.dtsi原始文件出发不要拿别人改过的中间版本否则一旦出现多个版本文件混用排查半天全是节点映射错位。另一个需要特别注意的是regulator-min-microvolt和regulator-max-microvolt的值。DVFS过程中内核会在这个区间内动态调压如果你的区间上下限太宽调压的步长会变大系统负载轻微波动时电压就会大幅跳动表现出来就是电池电量消耗异常。3.3 RPMh/RPMPD面向任务的电压管理接口SDM660在SDM平台里属于偏老的设计它采用的第一代RPM接口到后期平台逐步引入RPMh和RPMPD管理方案。对应用处理器而言SDM660的DVFS管理是通过rpmpd驱动把电压域抽象成Power Domain来用的。比如CPU调频框架会通过clk_cpu驱动请求对应的电源域性能状态性能状态和电压档位由RPM固件维护内核只需要告知目标性能等级不需要知道具体电压值。这样做的好处是彻底解耦SoC厂商可以安全的调整某档位对应的实际电压而不需要用户态配合。如果你在调试中要查看当前Power Domain状态可以直接读这个节点cat /sys/kernel/debug/rpmh_master/active_only它会打印每个域当前accepting的active-only状态包括电压档位和是否处于可调状态。这个调试手段在排查死机后电压异常的问题时特别有用可以看到系统在崩溃前最后请求的电压档位反向推断死机原因。4. 电源时序设计启动成败的第一道关4.1 硬件时序与PBS可编程启动序列SDM660的上电时序并不是由SoC在Linux启动后控制的而是靠PMIC内部的PBSProgrammable Boot Sequence引擎在硬件层面完成的。PBS本质上是一个小型状态机可以在内核还没跑起来之前按照预烧录的序列依次拉高各路电源轨的输出。默认的PBS序列大致是先启动PM660内部的常开低压轨VREG_S3给RPM和SoC的Always-on域供电然后抬升VDD_MX等MX稳定后再抬VDD_CX再以后才是APC0/APC1、EBI、GPU等大电流轨期间PMIC的复位输出一直保持拉低直到所有rails稳定后才释放SoC的reset。这中间最关键的一条约束是VDD_CX不能比VDD_MX先到达目标电压否则SoC内部的逻辑毛刺可能导致启动失败或损坏。硬件配置上要用示波器实测确保在任意温度、任意负载条件下CX的上升沿都晚于MX且斜坡不陡于某个阈值。软件层面也要配置和时序严格匹配的电压初始值尤其要注意在DTS中不应该乱加regulator-boot-on这个属性会让对应regulator在启动早期就被lock up一旦加错到某个不该提前打开的轨上面会破坏整个时序窗口。4.2 调时序时最典型的坑漏了DVDD/AVDD的跟随在实际调板时最容易出现的问题是加电开机后SoC虽然不复位但一直卡在某个特定的启动状态比如JTAG能连上但CPU不运行代码。这种问题往往不是“电压没起来”而是“某些轨提前或延后了”导致SoC内部的LDO比如数字逻辑里的PLDO、模拟的ALDO还没准备好就开始接收信号。我踩过最深的坑是关于内存供电的。LPDDR4X的VDD1和VDD2需要和CPU核电压一起起来但VDDQ必须延迟若干微秒。板级设计时想当然把VDDQ和VDD1连在了一起结果DDR训练每次跑到中间就挂掉。查到最后发现是VDDQ和VDD1的时序差不够VDDQ早于模型要求。这类问题光看代码没用必须对着规格书的时序图逐一核对波形。所以调试SDM660上电时序我的建议顺序是第一步示波器抓关键的10路电源轨看斜率、时延和压降第二步和PBS配置表格里预设的delay值逐项比对第三步再用脚本把各路轨的rise time全部记录下来归档。这套流程跑完绝大多数上电问题都能定位。5. 功耗与性能平衡DVFS/低功耗配置实操5.1 CPU/GPU的DVFS频压表怎么配DVFS的本质是在性能与功耗之间找平衡点SDM660上做功耗优化的大头也在DVFS频压表上。高通默认发布的cpu_volt_table通常余量给得比较大目的是兼容所有芯片的工艺偏差但这也意味着大批量产品在出厂后功耗偏高。手动压电压的方法不复杂思路却很考究以CPU大核为例从默认最高频对应的电压档位开始每降一档电压就跑一轮稳定性测试prime95或者类似的重负载memory测试、混合负载压力测试组合跑稳定就继续降不稳就回退一档留一个step余量。整个过程像寻优算法关键是不能激进一档档来。有一点特别提醒不要在系统release前的最后一刻去优化DVFS表那时改动的风险极大。CPU DVFS调压影响的是全系统稳定性不只是CPU自身个位数毫伏的差异都可能造成IPC总线校验出错。建议在项目中期就把频压表定下来后期只做个别档位的微调。GPU的DVFS配置思路类似但多了热限制这个维度。SDM660这颗GPU在重负载下升温非常快如果限温阈值设置过高烫手不说还会诱发内部热保护降频掉帧体验反而更差。我的做法是通过PM660L的ADC读取芯片结温辅助频压表动态调整把温度控制在可接受范围。5.2 低功耗模式进入条件与配置要点SDM660的睡眠流程和同代平台一致CPU在进入WFI后会逐级下电先关电源域内的时钟再通过RPM协商进入low power mode最后关掉相应电压轨。但不是说睡眠就万事大吉实际产品中待机功耗下不去往往是低功耗配置没做完整系统虽然关了屏幕各个模块的供电却还一直保持工作态。配置低功耗模式需要逐一检查所有外设驱动的suspend回调重点看这几类Touch、G-Sensor、Wi-Fi/BT、Camera、NFC。每一个外设在suspend之后都应该把对应LDO切到低功耗模式或load switch关断而不仅仅是“把外设芯片睡过去”。我测过一个项目待机电流超标最后发现是TP的供电LDO没关电流多出将近2mA。另外SDM660支持一个叫作“App-Set Low Power Mode”的机制可以在SoC进入深度睡眠前由主PMIC把某些特定轨压到保持电压比如VDD_MX最小可以压到0.55V保持寄存器和内存不掉电但把漏电控制在极低水平。这个配置的入口在/sys/kernel/debug/pm660_low_power_mode调试时可以手动开关验证效果。5.3 实测功耗的检查方法功耗调优没有测量就全是猜测。SDM660平台的实际功耗测量一般在电池端串联高精度采样电阻配合安捷伦或者国产的高精度电流计把当前电流实时读到PC端做曲线分析。这个测试过程中最关键的是区分“模块功耗”和“整机功耗”尤其是待机场景。如果整机待机电流偏高但模块逐个关都正常那问题往往在SoC本身的idle状态没有进入。可以用下面的命令直接查看CPU各个核的状态驻留时间cat /sys/kernel/debug/tracing/trace_stat/power_end如果发现idle状态一直是浅睡眠说明有IRQ没mask住或者某个kernel worker在不停被唤醒这类问题就不是电源配置能完善解决的需要回到驱动层排查。6. 排障实战电压不对、开机失败怎么查6.1 直读PMIC寄存器比猜想更快的定位方式遇到电源相关的问题第一件事就别猜直接读PMIC的寄存器状态。SDM660平台可以通过内核debug接口读SPMI寄存器最常见的检查手段是在adb shell里使用高通的qpnp-debug接口或者直接访问sysfs节点cat /sys/kernel/debug/pm660/spmi_debug或者更底层的方式用fastboot/early console配合spmi命令直接读物理地址# 读PM660 SPMI地址0x4000开始的寄存器 spmi read 0 0x4000 0x20通过读到的寄存器值可以判断PMIC是否输出正常、是否进入过流保护/过压保护状态、是否有软复位请求。比如你要看某个LDO当前的输出电压档位找到该LDO对应的VSET寄存器把数值换算成电压再和万用表实测值对比如果寄存器显示1.8V但实测只有1.2V怀疑方向马上从配置转到板级虚焊或负载短路。6.2 典型案例一一上电就保护性断电曾经遇到一批板子现象是插入USB后PMIC起来一下又立刻关断循环保护。第一步用示波器抓PMIC输出看到S3轨电压起来到1.3V左右就迅速跌零跟电源保护特征一致。接下来通过SPMI读寄存器查16位中断状态寄存器发现是OVP过压保护触发。顺着OVP找下去最终定位到USB VBUS检测引脚上的分压电阻虚焊导致检测电压异常偏高误判为外部过压。这个问题如果只看代码完全查不出来一定是软硬件协同电源配置不只是改配置也要回头怀疑硬件通路是否按规格工作。6.3 典型案例二DDR Training失败重启循环另一个高频问题是DDR Training不稳定表现为设备偶尔能启动、偶尔在启动早期重启。排查时先查EBI和MEM两路电压的波形特别关注在内存训练阶段瞬间电流抽走后的电压跌落。我处理过一次VDD_EBI的BUCK输出端离内存颗粒的供电引脚太远走线阻抗偏大导致瞬态压降超标。BUCK本身配置没问题但负载端电压已经低于DDR PHY的最低工作电压。解决方法是在靠近内存颗粒的位置加一组470nF的MLCC做电荷缓冲效果立竿见影。这类布板相关的问题提醒我们电源配置不能只盯IC和寄存器PCB寄生参数同样决定成败。6.4 一套可复用的电源故障排查链路最后把排查思路整理成下面这套动作基本能覆盖SDM660平台99%的电源故障用SPMI寄存器读取确认PMIC是否存在保护性关断OVP/UVP/OCP/TSD。示波器多通道抓取关键电压轨上电时序记录每个轨的delay、rise time、overshoot。对数采结果检查时序是否符合SDM660 TRM要求重点看MX、CX、EBI、APC之间的相对先后。轻载和重载两种条件下分别测试输出纹波和动态响应BUCK用PWM强制模式对比差异。通过内核devfreq和regulator框架把实际频率、电压曲线dump出来对照预定的频压表检查是否按照预期工作。确认每个LDO输出对应的外设工作电流是否超过该LDO规格避免长期超载运行。这套流程看似繁琐但每一步都能直接缩小问题范围比乱改参数碰运气要高效得多。每次做完一轮排查把波形、寄存器值、环境条件记录在案后面再遇到类似问题就有据可查。SDM660电源部分的配置说难是难在体系庞大、牵一发动全身说简单也简单找对方法后每一步都有章可循。双PMIC的分工打开局面电压域分组让思路清晰软件路径理解了就不再玄学时序、DVFS、LPM一步步落地遇到问题用寄存器直读和示波器配合定位电源这条路就能顺顺利利走通。我个人这几年干下来最大的体会是电源配置永远没有“一次配置永久省心”这种好事每一版改板、每一次换料、甚至每换一批代工厂工艺电源余量都可能变化养成长测、留好记录的习惯比记住任何一组参数都有用。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑