STM32MP157未使用DSI与ANA引脚处理:悬空危害及软硬件方案

STM32MP157未使用DSI与ANA引脚处理:悬空危害及软硬件方案
1. 先从引脚本身说起DSI和ANA在STM32MP157FAC1里扮演什么角色STM32MP157FAC1是意法半导体STMP15x系列里非常有代表性的一颗异构处理器双核Cortex-A7负责跑Linux或Android之类的上层系统Cortex-M4则用来处理实时控制任务。这种架构在工业HMI、智能网关、带屏家电里出现频率很高因为它能把“显示交互”和“实时控制”分开既享受MPU的生态又有MCU的实时性。既然是面向显示应用这颗芯片就自然集成了MIPI DSI控制器可以直连高分辨率LCD屏。DSI引脚在芯片封装上一般是一组差分对一对时钟DSI_CKP/DSI_CKN外加四对数据DSI_D0P/DSI_D0N到DSI_D3P/DSI_D3N。这些引脚走MIPI D-PHY物理层特点是电压摆幅低、速率高适合传输像素数据和控制指令。很多工程师遇到的问题是如果这个产品最终不装屏幕或者屏幕走的是RGB/LVDS接口那DSI引脚是不是直接空着就行答案显然不是但这背后到底怎么处理得从引脚电气特性说起。再说ANA引脚。这里先提醒一句不同型号、不同封装里叫ANA的引脚作用不一定完全相同。在STM32MP157FAC1这个型号上ANA引脚往往和内部模拟通道、ADC前端、参考电压或者测试模式有关它的名字很容易让人误以为“凡是没有功能的模拟引脚都叫ANA”实际上它通常是一个具体功能引脚的助记符。如果你手头有数据手册里的Pinout表格你会看到这类引脚给出的推荐连接经常是“No connect”或者“Connect to ground via resistor”。具体状态一定要以你手里的最新数据手册和勘误表为准不要照搬别家芯片的惯性思维。1.1 一颗MPU里为什么会有高速显示串行接口MIPI DSI不是普通IO它走的是差分信号逻辑“0”和“1”由两条线上的电压差决定而不是单根线对地的绝对电压。这种设计的好处是抗共模干扰强、速率可以做高但它的代价是接收端必须要有确定的偏置条件否则差分接收器会一直处于不确定状态。STM32MP157FAC1的DSI控制器内部有D-PHY它内部并没有像普通GPIO那样强上拉或强下拉所以一旦这组引脚悬空接收器输入端电压就会随外界噪声漂移。有些人可能会觉得控制器没使能D-PHY不工作引脚就不会有问题。实际上D-PHY的输入结构始终连接在引脚上除非芯片进入特定低功耗模式把整个模拟前端断电否则它一直在“监听”外部信号。这个状态下引脚悬空就会在内部形成一条不确定通路待机漏电就是这么来的。另外MIPI DSI并不是只有“点亮屏幕”时才需要关注。在PCB布局上DSI差分对附近往往有高速时钟或电源走线如果DSI引脚悬空这些相邻信号会通过寄生电容耦合进来在引脚上产生一串衰减振荡。这个振荡幅度可能不大但足以让D-PHY输入端的ESD保护二极管微导通结果就是整机EMI变差、电流变大甚至在某些静电放电场景下更容易损坏芯片。1.2 ANA引脚的本质高阻抗输入与测试通道ANA引脚经常以单独一个名字出现在原理图库中看起来跟普通GPIO不一样。它一般连接着芯片内部模拟多路复用器、比较器或者测试总线。模拟输入的显著特征是输入阻抗极高通常在兆欧级别所以对外界电压非常敏感。比如你手上沾着静电去碰一下悬空的ANA引脚万用表上可能显示不出变化但内部已经产生了一小段不确定的偏置。这个偏置在某些情况下会让芯片退出低功耗状态或者让ADC结果发生偏移。实际上在芯片出厂测试阶段ATE测试设备就是通过这些模拟引脚施加和测量信号的。ATE的Pin Electronics会驱动引脚到特定电压然后检测芯片内部节点状态。到了用户板上这颗芯片已经过了测试阶段但这些模拟引脚依然和内部结构相连。如果你在PCB上放着不管生产测试时测试针床或飞针接触的一瞬间很容易把感应电荷灌进芯片。我见过一块板子在产线测试时偶发上电电流偏大最后查到原因就是ANA引脚悬空测试探针接触瞬间触发了内部模拟开关产生了一个微秒级的短路电流。这种问题在样机阶段很难复现因为人工调试时探头接触方式和产线自动化设备完全不同。所以对待ANA引脚应该有一个基本认知不要因为它没有明确功能就当它不存在也不要因为它是模拟引脚就直接短路到地。正确的姿势是先查清楚它的内部连接再决定用什么阻抗等级的电平固定方案。2. 为什么“悬空”才是最大的坑电气原理与实测数据我见过不少项目硬件工程师把用不到的DSI和ANA引脚直接空着理由是“这块PCB上没有网络连接应该没关系”。这个想法在低速数字电路里偶尔行得通但在MPU级别的高速混合信号系统里几乎必然埋雷。CMOS输入级的核心是一个由PMOS和NMOS组成的栅极结构栅极本身是极高阻抗的电容性负载。输入端如果没有驱动源也没有上下拉电阻电位就会停在阈值电压附近。此时环境里的任何噪声比如旁边时钟线的翻转、电源纹波、人手靠近的感应电压都会让电位来回穿越阈值。内部输出逻辑就在“0”和“1”之间抖动这个抖动本身不会立刻烧坏芯片但会持续消耗电流还会向电源网络注入噪声。DSI和ANA引脚悬空带来的问题还不只是内部逻辑抖动。我实测过一块基于STM32MP157FAC1的主板系统在Linux suspend状态下整机待机电流大约比预期高了1.2mA。逐项排查后发现问题出在一组没有使用的DSI差分引脚上——接收器一直处在不确定状态从IO电源轨额外拉了一路电流。处理方式也很简单把这对差分引脚分别通过4.7k电阻下拉到地再在设备树里关闭DSI控制器待机电流立刻回到数据手册给出的典型值。2.1 功耗不只是“多一毫安”的事很多人在评估低功耗时只盯着SoC的典型待机电流却忽略了引脚悬空带来的额外漏电。像STM32MP157FAC1这种BGA封装的芯片未使用引脚并不等于“不存在”它仍然通过封装基板和内部电路相连。每个悬空的高阻抗输入可能带来几十到几百微安的漏电流听着不多但整板多个引脚累计起来就可能让待机电流翻倍。如果你做的是电池供电的便携式设备这1mA可能决定产品能不能撑过一夜。如果是需要满足能源认证的工业设备这1mA也可能让你在能效测试里不达标。更麻烦的是这种漏电和温度相关温度升高后漏电流会指数级增加。夏天样机测试没问题到了冬天产线批量抽检却出现待机偏大很可能就是这类引脚悬空导致的。我曾经在电源测试时用热像仪扫过板子发现芯片封装边缘有一个异常发热点位置正好对应一串未处理的DSI引脚。当时主控已经进入低功耗模式按理说大部分电路应该断电但那个点的温度还是比周围高了几摄氏度。把引脚处理完之后热像图上就干干净净了。从那以后我养成了在原理图评审时逐个检查未使用引脚的习惯不再相信“系统没用到就不会耗电”这种话。2.2 启动配置与IO驱动能力引脚状态会“说话”DSI和ANA引脚在某些型号上可能不是单纯的高性能接口它们往往兼任启动配置引脚或测试模式引脚。STM32MP157的启动源选择是通过复位期间特定引脚的电平状态来实现的比如BOOT0、BOOT1以及一些复用为启动配置的引脚。如果这些引脚恰好和DSI或ANA功能重叠并且你在原理图里把它们空着那么复位期间它们就是浮空状态系统读到什么电平完全靠运气。这种问题最难查因为它不是每次都出现。可能十次启动里有八次正常两次失败也可能换了电源批次后故障率上升。很多工程师遇到这种情况会先去查DDR配置、查文件系统、查电源时序很少会想到是启动配置引脚悬空。我自己的经验是遇到偶发启动失败先把原理图里所有标注为“NC”但连接到SoC的引脚全部列出来再核对数据手册里的配置引脚表基本能发现线索。还有一个容易被忽略的点是IO驱动能力。如果你的软件把未使用的引脚错配成了GPIO输出并且没有连接外部负载那么引脚翻转时会对自身的寄生电容充放电产生脉冲电流。虽然这个电流不大但在高分辨率示波器上能看到电源轨上多出一串毛刺。更麻烦的是如果这个引脚在PCB上走线很长还可能形成一根单极天线辐射噪声会影响旁边的MIPI DSI走线。你在用DSI调试工具查看波形时就会看到本来干净的眼图多了不少抖动其实根源在几厘米外的一个未使用引脚。3. 硬件与软件双管齐下的处理方案处理未使用引脚业内常见做法是“硬件固定电平、软件关闭功能”。这两步不是二选一而是应该同时做。硬件保证上电瞬间引脚状态确定软件保证系统运行后引脚不会被意外使能。只有一边处理都容易留下隐患。3.1 硬件推荐连接用电阻固定电平而不是直接短路先说DSI的差分引脚。我的建议是把每组差分对的P和N分别通过4.7k电阻下拉到地不要直接短接到地。直接接地虽然也能固定电平但如果有外部浪涌冲击电流会直接进入引脚铝电解电容或TVS都没来得及动作。串一个电阻就相当于给引脚留了一道缓冲即使有静电大部分能量会被电阻消耗掉不会直接冲击芯片封装内部。这里有一个细节P和N两端要对称处理。有些工程师觉得反正不用只拉低其中一个就行。这样做会在差分接收器输入端产生一个单端偏置相当于人为制造了共模电压。MIPI D-PHY接收器对共模电压是有范围要求的一旦超出范围内部偏置电路就可能不正常反而比完全悬空更容易出问题。ANA引脚则要稍微谨慎一些。如果确认它没有内部上拉用一个10k电阻下拉到地是最稳妥的。如果数据手册里明确说该引脚内部有上拉那就用10k上拉到电源避免和内部上拉形成分压导致引脚电平处于中间态。选10k而不是1k或100k是为了在“固定电平”和“不增加额外负载”之间取个平衡。1k电阻固定能力更强但会额外消耗电流100k电阻功耗低但抗干扰能力弱。10k在绝大多数场合都够用。对于开发阶段还不确定是否会复用的引脚我建议在原理图里预留一个0欧串联电阻位。默认0欧不贴下拉电阻贴好将来需要复用这组信号时拆掉下拉电阻贴上0欧让信号从连接器进入芯片。这样既满足量产状态又保留了后期改动的空间。3.2 软件配置把外设关掉把引脚设成模拟输入硬件之外软件也要处理。STM32MP157的引脚不是上电后就自动进入DSI功能的复位后大部分引脚默认是GPIO模拟输入状态。此时只要不去配置MUXDSI控制器的时钟也没有使能引脚通常就是高阻模拟态。但问题是启动引导代码或者Linux内核里的某个驱动可能认为这个引脚属于某个外设顺手就把它复用掉了。所以你在设备树里要做两件事第一把用不到的DSI控制器和对应的引脚组放到disabled状态第二为这些引脚单独定义一个pinctrl节点把它们配置成模拟输入Analog Mode同时加上内部下拉或上拉。模拟输入模式是STM32功耗最低的GPIO模式因为输入缓冲器和输出驱动都被关掉了引脚上只有非常微弱的漏电。这个状态最接近“物理断开”。下面是一段示意性的设备树配置实际使用时引脚号和宏名要按你的原理图和芯片头文件来改pinctrl { unused_dsi_pins: unused-dsi-pins { pins1 { pinmux STM32MP157_PA8_ANALOG, STM32MP157_PA9_ANALOG, STM32MP157_PB0_ANALOG, STM32MP157_PB1_ANALOG; bias-pull-down; }; }; }; dsi { status disabled; pinctrl-names default; pinctrl-0 unused_dsi_pins; };有人会问配置成模拟输入之后外部下拉电阻还需要吗我的答案是最好保留。因为设备树生效是在内核启动阶段而在U-Boot启动和复位释放瞬间引脚状态仍然由硬件电平决定。外部电阻能保证整个上电过程中引脚都是确定电平不依赖软件时序。从代码维护角度看把未使用引脚的配置集中放在一个节点里注释写清楚“DSI未使用保留外部下拉”后续其他人接手板子时能很快理解。如果不写注释等半年后你自己回来看这段代码八成也要猜半天。3.3 方案对比与选型建议不同处理方式的优缺点可以用一张表说清楚处理方式电平确定性功耗影响EMI风险后续复用难度适用场景完全悬空差高高高仅早期功能调试不建议量产直接短接地好低中中引脚内部无驱动时可用但不推荐串电阻接地好低低低推荐量产兼顾可靠性和可维护性仅软件模拟输入中低中中已量产后的补救措施外部电阻软件模拟输入最好低低低新设计首选方案如果项目还在原理图阶段建议直接采用“外部10k下拉设备树模拟输入”的组合。如果项目已经流片或量产了没法改板那么先在软件里把DSI控制器关闭并把引脚设为模拟输入至少能处理掉大部分功耗和EMI问题。只是这种补救方案对复位瞬间的启动配置引脚悬空无能为力真遇到启动不稳定大概率还是得改板。4. 实操记录从原理图到板级验证该怎么做理论说再多不如把流程走一遍。这里记录一下我在STM32MP157FAC1项目里从原理图设计到板级验证的完整步骤供大家参考。4.1 原理图阶段先做一个“未使用引脚清单”拿到新芯片的参考原理图后我做的第一件事不是急着画电路而是建一张Excel表格把所有连接到SoC的引脚列出来按功能分组。DSI组里包括DSI_CKP/N和DSI_D0P/N到DSI_D3P/NANA组则根据数据手册里的引脚定义逐个列。每一行都标注“当前是否使用”“推荐连接”“实际连接”。然后逐个核对参考设计。很多参考原理图里这些未使用引脚已经给出了处理建议比如“NC”或“Reserved”。但“NC”不代表可以悬空很多时候参考设计默认你会在PCB上留一个测试点或下拉电阻位。我的做法是只要参考设计里有对应网络我都会放一个电阻位哪怕是默认不贴也比后期飞线强。另外重要的一点是检查启动配置。STM32MP157的启动源选择不仅靠BOOT引脚有些复用为启动配置的普通引脚也可能影响启动。我会把数据手册里所有带“Strapping”标注的引脚都查一遍确保它们和“未使用DSI/ANA引脚”没有重叠。如果真有重叠处理方式必须优先服从启动配置要求而不是简单下拉。4.2 设备树配置不要只在Linux层面关外设在STM32MP157这种平台上还有一层容易被忽略的软件U-Boot。U-Boot在Linux之前运行它也会初始化引脚和外设。如果你只在Linux设备树里把DSI控制器改成disabledU-Boot的板级配置仍然可能在启动阶段就使能了DSI相关时钟。此时DSI控制器内部有活动引脚即使没有外部连接也可能产生内部翻转。所以正确的做法是在U-Boot的设备树或板级初始化文件里也把DSI外设关掉或者在引脚初始化阶段直接把这些引脚设为模拟输入。这块有一个小技巧如果你不熟悉U-Boot的引脚配置可以先把U-Boot里所有跟DSI相关的宏注释掉重新编译后看启动日志里有没有DSI相关初始化记录。一般来说STM32MP157的官方SDK里U-Boot设备树和Linux设备树结构类似你可以在U-Boot设备树里加上一段类似之前展示的pinctrl节点再把DSI节点的status改成disabled。4.3 板级验证用数据说话样板焊接回来不能只看系统能不能启动就收工。我通常按下面几步验证引脚处理是否到位第一步用万用表二极管档测量DSI引脚对地阻值应该能看到近似于下拉电阻的读数。如果读数是无穷大说明引脚或电阻虚焊如果读数接近0可能焊锡桥连了要检查是不是短路。第二步用示波器探头测量DSI引脚和ANA引脚的静态电压。正常情况下应该稳定在0V下拉时或电源电压上拉时。如果你看到的是缓慢漂移的波形或者电压在某个中间值附近抖动说明引脚还在悬空需要回去检查网络连接。第三步做低功耗测试。把系统进入suspend或STOP模式用精密电流表串联测量整机供电电流。对比数据手册里的典型值如果明显偏高我会按照“先软件后硬件”的顺序排查先在软件里把所有未使用外设全部关闭再测量电流如果电流降下来了说明是软件配置问题。如果软件已经关完电流还是高就依次断开板上的下拉电阻观察电流变化找到具体是哪个引脚在漏电。第四步如果在做EMI摸底测试用近场探头扫一下板子表面重点观察DSI引脚附近有没有明显的辐射热点。辐射热点往往和悬空引脚的寄生振荡有关处理掉之后频谱上会干净很多。5. 常见问题与排查技巧实录处理DSI和ANA引脚时我踩过不少坑也帮别人排查过不少问题。这里挑三个比较典型的案例每个都能对应一类常见故障。5.1 实测遇到过的三个问题第一个问题是系统偶发启动失败。客户反馈产品十次上电有一次停在启动阶段有时候重启一下又能好。软件团队查了很久DDR压力测试没问题文件系统完整电源时序用示波器量也正常。后来我让他们把所有标着“NC”的SoC引脚全部列出来再把数据手册里的启动配置引脚表拉出来对比发现其中有两个“NC”引脚实际上是DSI数据引脚在复位期间兼任启动配置。这两根引脚在原理图里就是悬空的复位时电平不确定才导致偶发启动失败。处理方法是给这两个引脚加上10k下拉之后连续跑了两百次上电测试一次都没失败过。第二个问题是整机辐射超标。某个项目不接DSI屏幕PCB上也没有焊接DSI连接器但在EMC预测试阶段发现500MHz附近有一簇辐射噪声。近场探头在DSI引脚位置扫到了很强的信号和正常走线耦合完全对不上。查了软件配置发现内核里某个显示驱动自动探测DSI控制器虽然没有屏幕但控制器时钟还是在跑引脚被复用成了DSI功能并持续输出。后来我在U-Boot和Linux设备树里都禁用了DSI控制器把相关引脚配置成模拟输入辐射噪声明显下降顺利通过了测试。第三个问题是ATD测试工位偶发电流偏大。这是量产阶段出现的问题生产测试工程师发现某些板子在上电瞬间电流比正常板子大了几十毫安但用一段时间又恢复正常。排查后发现测试板上的ANA引脚悬空而测试针床通过ATE Pin Electronics驱动引脚时这些高阻抗模拟输入处于不确定状态上电瞬间内部模拟开关瞬间导通。这个问题的隐蔽之处在于它只在自动化测试设备上出现人工用示波器探头测试根本触发不了。5.2 从问题里总结出的排查顺序如果你也遇到类似问题我建议按下面的顺序排查能少走很多弯路先查原理图把SoC所有未使用引脚都列出来确认它们是否都有明确的上拉或下拉路径。不要放过标着“NC”的网络那可能只是参考设计里没画电阻不代表可以悬空。再查U-Boot和Linux设备树确认所有未使用外设都被禁用引脚配置为模拟输入或高阻态。特别要注意有没有驱动会“好心”地自动开启外设探测功能。然后用示波器量引脚静态电平看是否存在漂移或中间态。最后用电流表和近场探头确认功耗和EMI是否恢复正常。这一步看起来很基础但绝大多数问题都出在“原理图没检查”和“软件配置没查全”上。我见过不少团队遇到问题后第一反应是换芯片、换PCB材料最后才发现只是几个电阻没补上。5.3 几个值得记住的经验点处理未使用引脚的核心原则是不要让任何输入悬空给每个引脚一个确定状态并用外部电阻保持这个状态。DSI差分引脚P和N要对称处理不能只处理其中一端。ANA引脚要确认内部结构后再决定上拉还是下拉不要盲目照搬其它芯片的连接方式。如果你在调试中使用了DSI Studio之类的MIPI DSI测试分析工具建议在正常显示时先记录一组标准波形包括差分摆幅、共模电压、上升沿和下降沿。后续遇到引脚干扰问题时可以和这组波形对比能快速判断是信号质量问题还是外部干扰问题。这组数据在排查未使用引脚引起的EMI时特别有用。还有一个容易被忽略的是测试点。未使用引脚一定要保留焊盘和测试点不要为了“省事”把它从封装库里去掉。芯片底部的走线和引脚框架可能共用电源网络删掉焊盘会导致后期维修和产线测试时没法探测信号反而增加成本。正确做法是保留焊盘加上下拉电阻和测试点这样既满足电气要求也不影响可制造性。6. 资料获取与进一步调试建议处理STM32MP157FAC1的DSI和ANA引脚本质上是“查手册、看封装、量波形、调配置”四个动作的组合。这几个动作的先后顺序不要乱尤其是第一点先查手册。STM32的数据手册里通常会有一节叫“Unused IOs and unconnected pins”或者“Pin recommendations”里面会明确列出哪些引脚悬空是可以接受的哪些必须连接固定电平。你去ST官网下载对应型号的数据手册翻到引脚描述表逐个对比你要处理的引脚。这里特别注意同一个芯片家族里不同封装比如LFBGA448和TFBGA257未使用引脚的处理要求可能不一样不能直接复用别人的BOM。官方应用笔记和应用手册也值得看尤其是与MIPI DSI硬件设计相关的文档。它会给出差分走线的阻抗控制要求、端接电阻的选型建议、ESD器件的布局位置这些内容虽然看起来是在讲DSI接口如何设计但反过来也能指导你理解未使用引脚为什么需要对称处理。当你把DSI接口的电气特性搞清楚了自然就明白悬空为什么不靠谱。如果你以后确实要调试MIPI DSI信号建议准备一套支持高速差分测量的工具和软件比如DSI协议分析仪或者支持MIPI DSI的示波器软件。先用它采集正常的DSI信号保存好眼图和协议解码结果作为后续开发的底稿。即使当前项目不用DSI这套底稿在下一个带屏项目里也能直接复用省去重新摸索的时间。根据我这几年做MPU硬件评估的经验DSI和ANA引脚处理得好不好往往在原理图评审阶段就决定了。评审的时候不要只看功能模块连接一定要有人专门负责“未使用引脚”这一栏逐个打勾确认。这个角色的价值在开发初期体现不出来到了量产测试和EMI认证阶段你会发现当初的几分钟检查能帮你省下几周的排查时间。最后再分享一个小技巧在原理图标注里用不同颜色区分“必须连接”“建议连接”“可选连接”会让后续review和硬件调试都清爽很多。这个习惯我一直保留到现在实测下来非常管用。

最新新闻

日新闻

周新闻

月新闻