
SDM660是Qualcomm骁龙660移动平台的代号这颗芯片在2017年发布后几乎成了中端机的代名词。OPPO R11、小米Note 3、vivo X20这些当年的爆款都用它一直到今天还有不少IoT设备、行业终端在沿用这套方案。所以如果你手里正好有一块SDM660的板子要调或者正在做基于这颗SoC的电源管理设计这篇文章就是写给你的。我最早接触SDM660是给一台带屏智能音箱做主控选型当时看中它的原因很简单性能够用、出货量大、PMIC方案成熟。但真正把板子拿到手开始调电源才发现这里面的门道比想象中多得多。尤其是电源部分SDM660用的是PM660PM660L双PMIC架构和当年骁龙835那套单PMIC的思路完全不一样配置起来坑不少。这篇文章我不打算给你念芯片手册也不做PPT式的架构图罗列。我按实际调试项目的顺序把SDM660电源部分的架构解析、关键电源轨配置、时序要求、常见错误和调试方法一条条讲清楚都是我在真实项目中踩过坑、拿示波器一针一针量出来的经验。1. 电源架构拆解为什么SDM660要挂两颗PMIC先搞清楚整体框架后面调起来才不迷糊。SDM660的PMIC方案是PM660加PM660L组合。看过SDM660参考设计的人都知道这俩PMIC各有分工PM660是主PMIC负责SoC核心供电、内存供电、IO供电这些命脉电源PM660L则偏向显示、音频、充电相关的高压或模拟电源。具体分工大致如下PM660输出VDD_CXCPU/GPU核心、VDD_MX内存相关、VDD_APC应用处理器核心、VDD_SRAM等关键电源轨PM660L负责LCD背光供电、摄像头AVDD、音频编解码器电源、USB PHY电源、部分传感器供电为什么要拆成两颗核心原因是SDM660有独立的调制解调器Modem和应用处理器AP两者对电源噪声的要求不同。Modem部分对电源纹波极其敏感单独用一颗PMIC供电可以物理上隔离来自AP高速开关带来的电源干扰。这在当年是个很有实用价值的决策尤其是SDM660这代芯片加了CDMA基带射频和数字部分共用PCB电源隔离做不好灵敏度直接崩。还有一个现实考虑功耗和散热。双PMIC可以把发热源分散不至于像单PMIC那样所有降压转换器挤在一起充电加游戏场景下板面温度能差出2到3摄氏度。对于主打轻薄的中端手机来说这个差距就是卖点。我们的板子用的是标准PM660PM660L组合FPC连接器接线和手机上的连接方式保持一致方便后续直接搬到量产机型上。如果你做的是IoT模块也可以只挂其中一颗但那就需要手动关掉未使用PMIC的对应电源域操作空间不小后面会讲。2. 关键电源轨配置与参数选择2.1 VDD_CX与VDD_MXSoC核心命脉先讲最核心的VDD_CX和VDD_MX。VDD_CX供给CPU和GPU的核心逻辑是SDM660所有电源轨里电流变化率最高的一个。它由PM660的S1降压器输出有的设计里叫BUCK1默认配置电压是0.8V左右但实际电压会根据运行频率动态调整最高能到1.0V上下。VDD_MX供给内存控制器、L3缓存和部分数字逻辑由PM660的S2降压器输出默认1.1V左右。这两个电源轨最关键的一点是它们的电压不是固定值而是由硬件自动电压调节AVS控制的。也就是SoC根据自身工艺偏差和温度动态请求PMIC调整输出电压。这就意味着你在配置表里写的那个电压只是一个期望值真正跑起来是多少要看SoC和PMIC之间的握手结果。我遇到过工程师在这里犯的最大的错误为了省电手动把VDD_CX的固定电压调低。结果跑高频跑不起来系统随机重启。后来查下来是AVS机制被绕过了SoC在高频时需要的电压高于手动设定值逻辑就出错。记住一句话SDM660的VDD_CX和VDD_MX千万不要手动固定电压除非你明确知道自己要干什么。正确做法是在PMIC配置脚本里只设置最小和最大电压边界然后交给AVS硬件控制环去动态调整。最小边界关系到最低频能否稳定运行最大边界关系到射频拉满时是否够电压这两个值在参考设计里都有推荐值直接抄作业即可。2.2 VDD_APC应用处理器核心的调压策略VDD_APC是SDM660的应用处理器Application Processor Core专用供电由PM660的S3/S4降压器提供。这里的APC对应的是Kryo 260核心分大小核所以VDD_APC实际上可能是多路大核小核各有独立供电。大核Kryo 260 Gold电压相对高峰值电流能到好几安培所以PM660上用了两个降压器并联输出以提供足够的电流能力。小核电压低一点但也不能含糊。这里的配置要点和VDD_CX类似也是AVS参与动态调整。但区别在于VDD_APC的动态响应要求更高——因为CPU频率可以毫秒级跳变电压必须能跟上频率的变化。这就是为什么PM660上的降压器要选支持快速瞬态响应的模式。调试时有一个非常实用的指标负载瞬态响应。具体做法是写一个循环脚本让CPU在最低频和最高频之间快速切换同时用示波器看VDD_APC波形。正常的波形应该是在频率切换瞬间电压有一个轻微的下冲几十毫伏然后迅速回到目标值。如果下冲超过100mV或者恢复时间超过几十微秒就要检查补偿网络参数或者降压器的开关频率设置。2.3 内存供电VDD_MEM与VDD_QDRI内存相关的电源轨有两条VDD_MEM供LPDDR4/LPDDR4X内存颗粒的核心电压一般1.1VVDD_QDRI供内存IO接口一般1.8V。这两路看着简单但坑不少。内存供电最怕的是上电时序不满足要求导致内存初始化失败现象就是系统能开机但经常死机或者干脆点不亮。LPDDR4的电源时序要求非常严格VDD1内核要先于VDD2IO到达两者之间至少要有1微秒的间隔VDDQIO要在VDD2稳定之后才能拉起来。如果你的设计里这两路电分别来自不同的降压器控制好了时序顺序如果来自同一颗PMIC的不同输出PMIC内部通常已经处理好了顺序只需要在配置脚本里确认对应的上电序列是否正确即可。调试小技巧如果点不亮别急着查代码。用示波器探头同时抓VDD_MEM和VDD_QDRI的上升沿量一下两者的时序。如果顺序反了或者间隔不足大概率就是这个原因。这个检查十次里有七次能命中问题。2.4 其他电源轨的配置注意事项除了上面几路大电源还有一堆小电源轨需要关注。这里挑几个容易出问题的讲。VDD_PX是外设IO供电1.8V。它供的是UART、I2C、SPI这些低速接口的电平。如果这个电压不对外设通信会时好时坏。我遇到过一个板子I2C读传感器数据经常出错查了两天才发现是VDD_PX的纹波超标示波器一看峰值有100多mV直接把I2C的高电平判读弄乱了。后来在输出端加了2.2uF的MLCC问题立刻解决。VDD_TSSC是触摸屏控制器供电1.8V。看着不起眼但触摸屏的灵敏度和上报延迟很大程度上取决于这路电的纯净度。如果屏幕触摸偶尔没反应先量这路电压再看看PMIC这边是不是有别的负载在开关时把纹波打进去了。VDD_EBI是外部总线接口供电也归内存子系统管一般跟着VDD_MEM走不用单独操心。但注意在配置表里别把它漏了漏了的话内存训练会报错。USB PHY供电也是容易被忽略的地方。PM660L上的USB PHY供电如果配得不对会表现为USB识别不稳定、枚举失败、设备断开重连。当年我们还遇到过USB只能在低温下正常工作温度一高就掉线排查下来是USB PHY供电的LDO在高温下压降变大供过去的电压不够了。3. 启动时序与掉电时序让SoC按正确顺序苏醒和入睡3.1 上电时序配置要点SDM660对上电时序的要求本质上是按先时钟后核心的逻辑。具体来说最关键的一步是VDD_CX和VDD_MX必须先建立然后才允许SoC的时钟开始起振最后才是复位信号释放。为什么是这个顺序因为SoC的核心逻辑和内存控制器在时钟起来之前就必须有电否则时钟控制逻辑处于未定义状态锁定环PLL上电后无法锁定整个系统就起不来了。这就像人必须先有呼吸电源然后心跳时钟才能起来最后大脑复位复位信号才能开始运作。顺序搞反了后面全是白费。PM660/PM660L的时序控制有两种方式硬件引脚控制和软件控制。硬件方式是用PMIC的GPIO做时序互锁比如VDD_MX起来了拉高一个GPIO通知PM660L可以开始输出VDD_APC。软件方式是让PMIC按照预先烧写的序列自动执行。我建议你用混合方式关键电源轨的时序用硬件互锁这能保证即使软件崩溃电源也不会乱序非关键的电源轨比如外设供电可以交给软件控制以便于调试时灵活开关。在pm660_regulator.c驱动的初始化日志里你会看到类似这样的输出pm660_regulator_probe: regulator S1 registered, voltage range 388000-1352000 pm660_regulator_probe: regulator S2 registered, voltage range 388000-1352000这里的电压范围不是直接写死的而是从设备树里的regulator-min-microvolt和regulator-max-microvolt字段读出来的。你在修改设备树时只需要改这两个值驱动就会自动更新可调范围。3.2 掉电时序更容易被遗忘的坑上电时序讲的人多掉电时序讲的人少但掉电出问题的概率一点不低。SDM660关机时的掉电顺序要求VDD_APC先掉然后VDD_CX最后VDD_MX。原因很简单VDD_MX供着内存控制器如果它在CPU和总线的电之前掉内存控制器的逻辑会处于不确定状态可能导致漏电甚至闩锁效应。我遇到过的一个实际案例设备关机后功耗高整块板子在待机状态下还有200mA电流。查了一个礼拜最后发现是掉电顺序错了——VDD_MX比VDD_APC先掉电导致SoC内部一部分逻辑电路没有完全放电形成了一条低阻抗漏电路径。修这个问题的办法是修改PMIC的掉电序列配置。在PM660L的寄存器里PWR_DWN_SEQ寄存器控制着各路输出的掉电顺序。修改时需要保证三个原则核心先掉、内存后掉、IO最后掉。3.3 从设备树的角度理解时序配置在Linux内核里SDM660的电源配置主要靠设备树文件。你会看到类似这样的节点pm660_s1 { regulator-min-microvolt 388000; regulator-max-microvolt 1352000; qcom,init-voltage 750000; regulator-always-on; };这里的regulator-always-on不能随便加——加上后这一路电常开会拉高待机功耗。但像VDD_CX这种路不设always-on又可能在系统休眠时被关掉导致SoC无法唤醒。正确的做法是配合regulator-system-load和regulator-ramp-delay让内核的regulator框架自动管理开关时机。ramp-delay这个参数很容易被忽略但它直接影响电压切换速度。SDM660的CPU调频时需要电压先变频率后变先升压再升频、先降频再降压。如果ramp-delay设得太大调频就会变慢性能受影响设得太小PMIC的降压器来不及跟上CPU的请求会报欠压错误。PM660推荐的ramp-delay是8000 到 20000 ns/V参考设计里一般给12800可以直接用。4. 核心配置实操从设备树到寄存器调试4.1 参考设计中的电源树检查拿到一块新板子第一步别急着改代码先检查电源树。我一般按下面这个清单过一遍拿万用表量各路电源的对地阻抗排除短路——特别要注意VDD_CX和地之间的阻抗如果低于几十欧姆基本是SoC焊接问题或者PCB设计缺陷拿热成像仪看PMIC周边温度通电后如果局部温度明显高就有漏电嫌疑对照参考设计的电源树确认每一路电源的供电来源和去向这里的核心思想是先确认硬件健康再进行软件配置。省得后面软件调了半天最后发现是硬件设计问题。4.2 用APPSBL和LK阶段排查电源问题SDM660平台的软件启动流程是PBLPrimary Boot Loader→ SBL1 → APPSBL也就是LK/ABL→ 内核。电源配置在前两个阶段基本就定死了后面内核只是读取配置。如果在LK阶段就出现电源问题现象通常是不开机或者开机logo闪一下就黑屏。排查方法接上调试串口打开LK的详细日志。在APPSBL阶段你会看到完整的电源初始化记录。注意看有没有regulator probe failed或者voltage out of range的报错。这两个报错几乎都是设备树里电压配置超出PMIC支持范围导致的。我之前遇到过一次把VDD_CX的最小电压设成了300mV结果PMIC直接报错拒绝工作。PM660L的S1电压范围是388mV到1352mV低于388mV就不认。所以配置电压前先查一下对应PMIC的电压范围表网上能搜到PM660L的datasheet里关于S1-S6的完整列表。4.3 实测波形与参数调优板子能开机只是第一步。真正考验功力的是把各个电源轨调到性能、功耗、稳定性的最佳平衡点。我建议你按这个顺序测先测静态电压。在系统空载状态下用万用表量各路主要电源的输出电压和配置值对比偏差应该在1%以内。如果偏差过大检查反馈电路的分压电阻是否贴错。再测动态响应。写一个CPU满负载脚本以1秒为周期让CPU在最低频和最高频之间切换同时用示波器抓VDD_APC的波形。观察以下几个指标电压跌落幅度、恢复时间、是否有振铃。最后测纹波。在系统稳定运行的状态下用示波器的交流耦合模式抓各路电源的纹波。一般来说核心电源纹波控制在30mV以内没问题超过50mV就需要警惕了。纹波超标的处理优先级先确认MLCC电容布局够不够开关节点附近至少要保证一颗0.1uF加一颗1uF再看是不是和别的电源轨共地导致的地弹。如果这两个都没问题再考虑在输出端加一颗小容量的高频电容。4.4 电源管理集成电路PMIC寄存器调试实战配置阶段需要操作PMIC寄存器时可以用高通的SPMI总线直接访问。在Linux的shell环境里可以用下面的方式来读写PM660的寄存器# 查看PM660 S1寄存器的电压配置SPMI地址0x01对应PM660主设备 cat /sys/kernel/debug/pmic/spmi/pm660_s1/voltage # 手动设置电压调试用正式量产不建议 echo 750000 /sys/kernel/debug/pmic/spmi/pm660_s1/voltage不过更常用的方式是直接在设备树里改电压范围让驱动自动计算寄存器值。PM660的电压查找表是一个离散的步进式列表不是连续的。你写一个750mV的电压值驱动会就近查找最匹配的那一个档位可能是752mV。这个问题不大但如果你的外设对电压精度有要求需要注意这一点。调试时还有个小技巧用示波器抓SPMI总线的波形确认PMIC确实是按照你配置的寄存器值工作的。如果SPMI通信异常你改的配置不会生效但软件的报错信息可能不明显。遇到过SPMI走线过长导致时序违规配置时好时坏一阵一阵最后示波器一看时序边沿已经很难看了拉大驱动强度才解决。5. 常见故障排查与实战笔记5.1 开不了机的电源排查思路先说结论SDM660设备开不了机80%的概率和电源时序、电压范围配置有关。排查思路按以下层级展开。先看上电瞬间是否有关键电源输出。用示波器同时抓VDD_CX、VDD_MX和复位信号。如果三个信号都没有问题在PMIC的启动条件比如PMIC的使能引脚没拉起来或者主电池电压检测有问题。如果VDD_MX有了但VDD_CX没起来问题大概率在PMIC的时序配置上。查一下设备树里VDD_CX对应的regulator是否定义了supply-on-sequence。如果VDD_CX也有了但SoC不跑代码查一下复位信号的时序。SDM660要求复位信号在VDD_CX稳定后至少保持若干毫秒的低电平然后才释放。如果复位释放太早SoC内部的电源管理单元还没准备好代码就跑飞了。5.2 待机功耗高的排查思路待机功耗高首选排查掉电时序这个前面已经说过。如果掉电时序没问题再用排除法把各路电源从设备树中一个一个去掉去看待机功耗的变化。这里有一个容易被忽视的点GPIO状态。SDM660的很多GPIO在芯片内部有内部上拉或下拉默认状态可能是拉高的。如果某个GPIO在休眠时没有被正确配置为输入它会通过内部上拉持续灌电流。一个GPIO漏电可能只有几十微安但几十个GPIO加起来待机功耗就会从几十毫瓦涨到几百毫瓦。检查方法遍历所有GPIO看它们在休眠时的默认状态确保不需要输出的引脚被设置成高阻输入。5.3 频繁重启的排查思路SDM660如果运行过程中频繁重启先看是不是VDD_CX在高频时欠压。SDM660在频率切换到最高档位的瞬间需要的电流可能从几百毫安跳到几安培这个电流变化率非常快。如果PMIC的降压器响应不够快VDD_CX电压就会被拉低SoC检测到欠压触发保护重启。排查方法系统活着的时候用示波器持续抓取VDD_APC波形。如果发现重启前电压有明显跌落说明是供电问题。解决方案有几个换用更高开关频率的降压模式在VDD_APC输出端加更大的输出电容或者降低CPU的最高频率上限避开瞬态响应跟不上的场景。5.4 一个真实案例复盘OTG供电导致的电源噪声最后分享一个我记忆深刻的案例因为它非常典型也很有代表性。有一块SDM660板子带USB OTG功能。客户反馈设备在插入U盘时屏幕会有轻微闪烁触摸操作偶尔失灵。排查过程最初的直觉是屏幕驱动或触摸驱动问题但排了很久没结果。后来用示波器抓电源发现在插入U盘的瞬间VDD_PX1.8V IO供电上出现了一个约200mV的毛刺持续时间10毫秒左右。这个毛刺通过PCB的地平面耦合到了触摸控制器和屏幕接口的IO线上导致显示和触摸同时受到干扰。根因是USB OTG的VBUS供电和VDD_PX共用了同一条地回路U盘插入瞬间的大电流通过地平面回流抬高了参考地电位。解决办法有两个我最后都做了一是在OTG的VBUS路径上加了一颗磁珠滤除地弹带来的高频噪声二是在PCB设计上把USB的地和模拟/IO地做了分离用单点连接。这个案例给我最大的教训是SDM660的电源调试不只是看PMIC的配置还要看整个系统的电源完整性和地平面布局。很多时候问题不是PMIC本身而是它周围的PCB环境。6. 工具链与调试方法的建议6.1 调试工具准备一套趁手的调试工具能省一半的时间。我常用的配置如下示波器至少4通道带宽200MHz以上推荐500MHz。抓电源波形时用无源探头搭配短地线弹簧避免长地线引入额外电感万用表精度至少4位半用于测量静态电压和阻抗电子负载用于模拟负载电流验证PMIC的大电流输出能力热成像仪排查发热问题和漏电路径效率比万用表高太多逻辑分析仪调SPMI协议时序时必用能快速定位通信异常6.2 调试流程小结我习惯的顺序是硬件健康检查 → 上电时序验证 → 静态电压校准 → 动态响应测试 → 纹波测试 → 待机功耗评估 → 系统压力测试。每一步都有明确的目标和判断标准。比如上电时序验证的目标是确认各路电源的电平和顺序与参考设计一致动态响应测试的目标是确认电压跌落和恢复时间在允许范围内。每一步过了再进下一步不然越到后面越难定位问题。6.3 量产阶段的电源配置注意事项如果已经到了量产阶段有几个事情必须提前做准备一是PMIC参数的校准数据要固化。每块板子的PMIC个体差异会导致输出有微小偏差量产前需要做一次校准把实际电压值和目标电压值的偏差记录在板上然后由驱动在启动时读取并修正。SDM660方案里这个数据一般存在PMIC的OTP区域或者单独的EEPROM里。二是设置好PMIC的保护参数。过压保护OVP、欠压保护UVP、过流保护OCP的阈值都要根据实际负载情况设置不能太灵敏正常工作时误触发也不能太宽松故障时不保护。三是考虑温度特性。PMIC的输出电压会随温度漂移低温时电压会略低高温时略高。这个特性对模拟电路影响较大对数字电路影响较小。如果板子上有对电压敏感的模拟部分比如RF前端就需要特别注意。最后再分享一个个人体会电源调试里遇到的大部分棘手问题其实都不是技术深度不够而是没有按顺序排查。尤其是SDM660这种成熟平台绝大多数故障都能通过先时序后电压再纹波的思路快速定位。保持耐心一步一个脚印去验证别跳步就一定能把电源部分配置好。