ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Hi3516CV610硬件设计实战:电源时序与DDR布线要点

Hi3516CV610硬件设计实战:电源时序与DDR布线要点 拿到Hi3516CV610的参考设计原理图时很多人第一反应是被它的BGA封装吓住觉得电源轨多、DDR部分又不敢动整个硬件设计周期拉得很长。但实际做过几个项目之后我的体会是这芯片在入门级IP Camera SoC里算是最省心的一类DDR集成在片内外设也不算复杂真正决定板子能不能一次点亮、跑不满载不重启的恰恰是电源和复位时序这两个最不起眼的地方。这篇就把我在Hi3516CV610项目中踩过的坑、试过的方案、最后沉淀下来的设计习惯一次性捋清楚覆盖电源模块选型、DDR相关布局布线、时钟复位、启动配置和板级调试给正在做或者准备做这颗料的硬件工程师做个参考。标题里虽然带了DDR布线但要先说清楚一个事实Hi3516CV610量产型号通常是内置DDR的省掉了外部走线的麻烦。不过实际开发中有些参考设计、二次开发板或大容量定制版本仍然会引出外部DDR3L/DDR4接口而且内置DDR模式下BGA附近去耦、电源完整性、阻抗连续这些设计习惯和外置场景是相通的。所以下面拆DDR部分的时候我会把内置DDR的电源完整性和外置DDR的布线规则都写了免得拿到外置版本时手足无措。1. 整体设计思路与电源域拆解1.1 Hi3516CV610的典型供电架构Hi3516CV610这颗芯片定位是入门级IPC SoC集成ISP、视频编码、以太网MAC和音频接口内部DDR意味着系统BOM成本能压得比较低非常适合家用摄像头、智能门铃、USB Camera这类产品。它的供电轨不像高端SoC那样动辄十几路但也绝对不是一颗LDO就能打发的。从参考设计看典型供电轨大致包括VDD_CORE内核供电通常在0.8V到0.9V附近电流随负载变化明显跑编码器时瞬态电流可能到1A以上。VDD_DDRDDR电源内置DDR时一般是1.5V或1.2V取决于DDR类型需要和SoC的DDR PHY共用同一电源域。VDD_IOIO电源一般3.3V用于SD/eMMC/GPIO/UART等接口。AVDD模拟电源Sensor MIPI、音频ADC/DAC、PLL等供电通常由2.8V或1.8V LDO供给对纹波敏感。VDD_PLLPLL电源对噪声极其敏感纹波大会直接导致时钟抖动、视频不同步。我第一次做这个芯片时犯过一个错以为既然是内置DDR的低功耗芯片电源就可以随意一点用一颗DCDC输出3.3V再挂两片LDO把内核和模拟电压拉出来就行。结果板子一上电跑预览画面就出现水波纹用示波器量AVDD发现纹波有40mV左右超出了Sensor供电要求。后来才意识到IPC SoC对电源纹波的要求比普通MCU开发板严格一个数量级。1.2 上电时序为什么是硬约束很多做过51单片机或普通MCU的人转来做IPC SoC最容易忽视的就是上电时序。MCU项目里经常是一颗3.3V直接给整个系统无所谓时序但Hi3516CV610这类SoC内部有复杂的数字逻辑、DDR PHY和模拟PLL如果内核电压和IO电压上电顺序不对轻则启动失败重则闩扣损坏芯片。海思参考设计里通常要求VDD_CORE先于VDD_IO上电或者同时上电但VDD_IO不能明显早于VDD_CORE。模拟电源AVDD最好在数字电源稳定之后再上电避免模拟电路在上电瞬间处于不确定状态。复位信号释放必须发生在所有电源轨都达到稳定之后且要满足最小复位宽度一般要几百毫秒。如果外接SensorSensor的MCLK和MIPI供电也要遵循模组上电规范否则图像起不来。实际项目里我不建议用一堆分立IC去做时序控制调试起来太痛苦。最简单的做法是选用带时序控制功能的PMIC或者用DCDC的PG引脚配合复位芯片搭一个硬件时序链。如果硬件上确实没留时序控制也可以用GPIO控制LDO的EN引脚在软件里按顺序拉高但这样对Bootloader要求高而且系统启动前如果供电不稳还是会有隐患。我给一个通用做法上电时序由DCDC的PG信号串联控制下一路EN形成链式使能。比如VDD_CORE的PG接VDD_IO的ENVDD_IO的PG再经过一个RC延时去控制复位芯片。这样硬件上天然保证顺序不用软件干预也不需要复杂逻辑。这个方法我在多个IPC项目里用过稳。2. 电源模块设计实战选型、参数计算与Layout要点2.1 DCDC还是LDO按电流和纹波需求来切电源方案的选择没有标准答案核心看两件事电流多大纹波能容忍多少。VDD_CORE这种大电流且动态变化快的轨必须用DCDC因为LDO的效率和热耗都扛不住。假设VDD_CORE为0.85V负载电流1.2A如果从3.3V用LDO降压压差是2.45V功耗接近3W一个小型IPC主板上根本散不出去。DCDC的效率就算只有85%损耗也就0.18W左右体感差距极大。VDD_IO 3.3V这种轨如果系统里外设不多、电流在几百毫安以内用LDO其实更省心纹波小且电路简单但如果要带动Wi-Fi模组、电机驱动或者多路Sensor3.3V瞬态电流很大还是得DCDC。AVDD和VDD_PLL这类模拟轨不建议直接挂DCDC哪怕DCDC后级滤波做得再好开关噪声还是会有毛刺。稳妥做法是DCDC出一个中间电压比如3.3V再用低噪声LDO降到2.8V或1.8V给模拟部分供电。LDO的电源抑制比能把残余纹波压到几毫伏以内。2.2 DCDC电感、电容、反馈电阻的参数怎么算以VDD_CORE的DCDC为例我常用的是SY8088A这类小型同步降压IC开关频率1MHz左右支持2.5V到5.5V输入峰值电流足够。但选型只是开始外围参数才是决定稳不稳的关键。电感值的选择直接套用公式L (Vin - Vout) * Vout / (Vin * f * ΔI)其中Vin是输入电压按5V算Vout是0.85Vf是1MHzΔI取输出电流的30%左右。假设负载电流1.2A那ΔI 0.36A。代入后L (5 - 0.85) * 0.85 / (5 * 1MHz * 0.36) L 4.15 * 0.85 / (5 * 1e6 * 0.36) L 3.5275 / 1.8e6 L ≈ 1.96uH所以选2.2uH电感是合理的。这个取值不是玄学按公式走能保证纹波和瞬态响应在一个平衡点。电感饱和电流要留足余量建议大于1.5倍最大负载电流否则大电流时电感量跌落纹波突然变大。输出电容方面从纹波要求反推。假设目标纹波30mV电感纹波电流0.36A那输出电容的ESR要控制在30mV/0.36A也就是83mΩ以内。陶瓷电容的ESR很低基本满足但容值也要够通常用两颗22uF并联降低ESR同时平摊发热。输入电容不能省4.7uF到10uF的陶瓷电容要紧靠DCDC的VIN引脚放否则开关瞬间的电压尖峰会让你怀疑人生。反馈电阻的分压比决定输出电压。以SY8088A为例内部基准电压一般0.6V公式是Vout 0.6 * (1 R1/R2)要输出0.85V假设R2取100K则R1 R2 * (Vout / 0.6 - 1) 100K * (0.85/0.6 - 1) 100K * 0.4167 41.67K标贴电阻取42.2K或43K都能接受输出电压误差会被反馈环路吸收。反馈走线要远离电感开关节点最好从输出电容末端单独拉细线回到芯片FB引脚不要经过大电流路径否则采样到的是带噪声的电压。2.3 电源布局的地回路与散热设计电源Layout是整个主板Layout的基石DCDC开关节点是板上最大的噪声源布局好坏一眼就能看出来。DCDC布局我总结几个硬性要求输入电容、电感、输出电容构成的高频环路面积要尽量小最好在同一层、同一侧走线短而宽。开关节点LX的铜皮不要细长条用短粗的铺铜引出到电感宽度至少能过满载电流。反馈走线走底层避开LX和电感正下方用细线单独跑。地平面要连续DCDC的功率地、模拟地、SoC数字地建议单点汇合不要在大范围内直接把地铜皮割裂成孤岛。散热方面Hi3516CV610本身功耗不算夸张但DCDC电感和MOS管如果是外部MOS方案会有热量。做小型化产品时电感选带磁屏蔽的功率电感底部打过孔阵列到地层能有效降低局部温升。我用过贴片一体成型电感辐射噪声比普通绕线电感小很多对Sensor图像干扰有明显改善。AVDD的LDO布局注意输入脚和输出脚都要有1uF到2.2uF的陶瓷电容且地要单独接到模拟地平面不要在数字地大铜皮上串来串去。LDO的散热焊盘如果允许打几个散热过孔到内层地长时间运行会更稳。3. DDR相关设计内置DDR与外置扩展的布线实战3.1 内置DDR版本的去耦与电源完整性先说内置DDR的常规情况。Hi3516CV610内部集成DDR后外部看不到数据线看起来布线一下子简单了。但简单不等于可以马虎DDR电源完整性依然能决定系统稳定性。DDR电源轨在PCB上表现为BGA区域附近的多个电源引脚集中供电。设计时要注意DDR电源引脚周围布置至少4到6颗100nF高频去耦电容尽量靠近BGA焊盘放在芯片同一面、紧贴引脚过孔直接落到电源平面。每隔几个引脚放一颗10uF或22uF的体电容提供中低频储能。电源平面要完整不要在BGA下方被走线割裂成细脖子。割裂的电源平面等效于串联电感DDR突发读写时电压跌落会直接导致系统死机或数据错误。如果板子是两层板没有完整电源平面那就更要注意电容摆放和走线宽度DDR电源线至少走20mil以上长度越短越好。我遇到过内置DDR版本跑稳定性测试时长时间录像后偶发花屏摸DDR电源的纹波有接近100mV的毛刺后来把BGA下的去耦电容从4颗加到7颗并把电源过孔阵列加了两排毛刺降到30mV以内问题消失。这类问题不在原理图上体现完全靠布局经验。3.2 外置DDR时的分组等长与阻抗控制有些定制版本或参考设计板会引出外部DDR3L/DDR4这时布线规则就要严格按照高速数字信号来走。DDR总线的关键不是单根线能跑多快而是组内所有信号到达时间差要足够小所以等长是重头戏。DDR走线一般分成三组数据组DQ0-DQ7、DQS、DM每组8位数据加对应DQS和DM组内等长要求最严DDR3L一般控制在±10到20mil以内DDR4还要更严。地址命令组包括A0-Ax、BA、CAS、RAS、WE、CS、CKE、ODT等相对时钟的等长要求放宽到±50mil但整组也要走一起。时钟组CLK和CLK#差分对对内等长差要控制在5mil以内差分阻抗100欧姆且要参考完整地平面。我做外置DDR时习惯按以下步骤先定层叠。4层板常用信号-地-电源-信号DDR信号走在顶层底层作为完整地参考不要跨分割跨分割意味着阻抗突变。设定单端阻抗50欧、差分阻抗100欧DDR3L布线时线宽线距用叠层计算器先算一遍再结合实际板厂工艺微调。数据线以DQS为基准做等长地址线以CLK为基准做等长。不要所有线都往同一个目标长度拉组内短就绕绕线间距保持3W以上减少耦合。所有DDR走线尽量同层避免过多过孔。过孔本身有寄生电容和电感大量过孔会破坏信号完整性。真需要换层时必须给过孔旁边放接地过孔提供回流路径。VREF要单独走细线两端用100nF电容到地。VREF面积小、没有干扰时DDR读写才稳定。经历过一次DDR跑training过不了的案例信号线等长都做好阻抗理论上也匹配但颗粒就是training失败。最后定位到VREF走线太长且旁边有一根翻转频率极高的地址线串扰把参考电压打得乱七八糟。改走线、加电容后一次通过。这种问题非常隐蔽常规检查不一定能发现只能靠对DDR原理的理解去排查。3.3 DDR的ODT、驱动强度与软件协同牵一发动全身的还有ODT配置和驱动强度。这部分通常在U-Boot或DDR初始化代码里配置硬件工程师容易忽略。PCB布线定了之后如果实测时序裕量不足除了改板另一个思路是调整DDR控制器的驱动强度和ODT电阻值。驱动强度太强信号振铃严重电磁干扰也大太弱则上升沿过缓时序不满足。ODT同理适中才能让信号波形干净。调试时可以先用示波器看DQS/DQ的眼图眼图张开不够优先调整驱动强度其次调ODT再不行才动走线。内置DDR的版本这些参数一般在原厂参考配置里已经调好不需要动。但如果你用外置DDR颗粒换了大容量型号建议仔细过一遍初始化配置不要想当然沿用默认参数。4. 时钟、复位与启动配置的隐蔽坑4.1 晶振选型、负载电容与起振电路Hi3516CV610需要外部晶振提供系统时钟常见是24MHz。晶振看着简单实际上坑不少。晶振的负载电容值必须对应晶振规格书不是随便焊两个18pF上去就完事。负载电容、晶振本身电容、PCB寄生电容三者共同决定实际振荡频率。如果偏了轻则网络对时不准重则系统时钟偏离导致视频帧率异常或音频变速。我常用的做法先看晶振规格书标注的CL值按CL (C1*C2)/(C1C2) 寄生电容来配。假设CL为12pF寄生电容估3pF那C1C2取18pF比较接近。如果调试发现频率偏差再微调C1/C2。注意晶振两个引脚到SoC的走线尽可能短周边不要走高速信号线晶振底下地平面不要挖空起振电阻根据SoC手册要求决定是否需要。还有一个经常被忽略的点晶振和SoC之间的串联电阻。有些SoC内部振荡器增益偏高需要外部串1K到10K电阻来限制驱动电平否则晶振会过驱波形削顶长期可靠性下降。这个电阻值参考原厂设计不要自己随意去掉。4.2 复位芯片的阈值与复位时序许多工程师把复位电路看成一个RC延时就完了这在MCU时代还行在IPC SoC上风险太大。SoC对复位脉冲宽度、复位释放时的电源电压阈值都有明确要求。比如要求复位释放时VDD_CORE必须已经达到0.8V以上的90%如果RC复位电路在电源还没爬升到位时就释放复位SoC会进入不稳定状态。我推荐直接用带有电源监控功能的复位芯片比如MAX809、APX803这类电压检测型复位IC检测阈值可选比如2.93V或2.63V根据你的电源轨来选。复位释放延时也可以选常见有1.6ms、10ms等。选10ms档给电源稳定留出足够时间。同时复位信号上要加100nF电容去耦避免误触发。一个实际案例某次样机偶尔上电无输出电流异常小复位信号用示波器观察基本是乱的。原因是复位芯片阈值选太高3.3V还没到检测阈值但复位芯片已经先动作随后3.3V建立过程中复位又被拉高SoC相当于在电源爬坡中间被强行启动最终死锁。换成阈值2.63V的复位芯片后彻底解决。4.3 启动配置引脚和Boot模式选择Hi3516CV610支持从SPI NOR Flash、eMMC、SD卡等多种方式启动由启动引脚的电平决定。这些引脚在芯片内部通常有上拉或下拉但外部仍要按参考设计接对。硬件设计时最容易犯的错把启动配置引脚复用成GPIO或其它功能后没有保留上电瞬间的电平状态。上电时这些引脚必须先保持稳定电平Bootloader读取完启动源后才能作为普通IO使用。如果外部接了容性负载太大电平上升沿太缓可能被误判成另一个电平导致启动源错误。调试时如果板子不上电启动先用万用表量启动引脚电平是否和预期一致再查Flash有没有贴错方向、有没有虚焊。很多时候“启动失败”根本不是软件问题就是某个引脚电平不对。5. 常见问题排查与板级调试验证速查5.1 按症状快速定位问题我把实际调试中常见的问题整理成速查表方便大家按图索骥。这里列出的都是真实遇到过的问题不是从书上抄来的。现象优先排查方向处理建议上电电流异常大板子发烫电源短路、芯片损坏、电解电容反接断开各路电源逐一量阻抗用红外测温定位发热点电流正常但不出时钟晶振未起振、晶振负载电容错、SoC供电缺AVDD示波器测晶振引脚波形确认AVDD纹波正常启动失败、Bootloader无打印启动引脚电平错、SPI Flash虚焊、复位时序不对量启动引脚电平重新焊接Flash抓复位波形Uboot能起但内核崩溃或反复重启DDR电源纹波大、DDR training失败、VREF异常量DDR电源纹波查看trainning日志检查VREF去耦视频图像有水波纹或条纹Sensor供电纹波大、MIPI走线受干扰、AVDD不干净示波器量AVDD纹波检查MIPI差分线等长和参考地音频有杂音AVDD噪声、音频codec参考电压抖动加大AVDD电容音频走线远离DCDC电感千兆以太网丢包PHY供电噪声、差分线阻抗失配、时钟抖动查PHY供电纹波确认TX/RX差分走线阻抗匹配USB识别不稳定USB差分线阻抗不对、VBUS路径压降大检视USB布线补偿VBUS铜皮宽度这张表不是万能药但排查思路是通用的先电源再时钟后复位然后才去怀疑DDR/Flash/外设。这个顺序是我踩过无数坑后总结出来的铁律。5.2 调试必备工具和测试点位设计在PCB设计阶段就预留调试用的测试点能省后面一大半力气。我的建议每路电源轨都引出测试点至少包含GND和输出方便示波器探头直接测量。晶振引脚旁边预留测试点或足够大的焊盘方便抓波形。复位信号拉到测试点必要时可以断开复位电路单独控制。DCDC的LX节点不要铺大铜皮直接连接到外部但可以在附近留一个小的测试焊盘测量开关节点波形。如果有外置DDR建议保留至少一组DQ/DQS测试点方便量信号完整性。常用工具方面一台四通道示波器是必需的带宽建议200MHz以上测DDR信号完整性至少500MHz。电流探头比万用表串联测电流方便得多特别是测瞬态电流。热像仪对排查局部过热点非常有帮助实验室有条件的话真值得配一台。5.3 高低温与长期稳定性测试的建议很多硬件问题是在实验室正常温度下测不出来的电源模块尤其如此。DCDC的饱和电流、Feedback电阻的温漂、电容在低温下的容值变化都会影响系统稳定性。我通常做完功能验证后还会跑一轮温度循环测试。常见做法高温70度满载运行24小时观察电源纹波和SoC温度。低温-20度冷启动验证DCDC是否能正常启动有些电感低温下饱和电流降低容易在启动瞬间触发过流保护。温度循环-20度到70度切换间隔1小时连续跑几个循环看是否有偶发复位或死机。如果高低温下出现启动失败先量各路电源电压是否在规格范围内。陶瓷电容在直流偏压下容值会下降如果设计的容值本来就贴着下限高温或大电流时输出纹波就会超标。必要时可以换成容量更大的电容或者增加电容并联数量留足设计余量。DDR相关的高低温问题更多表现为随机死机或数据错误。我遇到过一次低温下内存压力测试失败的案例最后定位是DDR电源的体电容在低温下ESR升高导致瞬态响应跟不上加大储能电容后解决。这些经验不做测试根本发现不了。写在最后的调试心得板级调试这件事很多时候拼的不是原理图设计得多完美而是遇到问题后能不能用正确的方式定位。我之前带过一个新人板子启动失败他第一反应是重新编译Bootloader反复刷了十几遍也没用。我一量启动引脚发现电平被一个10uF电容拖慢了上升沿SoC误判成错误启动源换了小电容后一次点亮。类似这种低级但隐蔽的坑在这个行业里永远不会消失。Hi3516CV610整体来说硬件设计难度其实不算高但它像一面镜子能照出你对电源完整性、时序、信号完整性这些基本功到底掌握得扎不扎实。熟练之后你会发现这颗芯片的成熟度和参考设计完整度都很不错只要按部就班做好电源和DDR这几件事稳定量产并不是难事。
返回列表