尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

示波器抓取MIPI D-PHY波形:HS/LP切换时序详解

示波器抓取MIPI D-PHY波形:HS/LP切换时序详解 搞嵌入式的尤其是做过显示驱动、摄像头驱动或者屏幕调屏的朋友肯定绕不开MIPI D-PHY这个物理层接口。它是连接主控和屏幕模组、摄像头模组的高速串行总线手机里那块OLED屏、行车记录仪里的CMOS传感器基本都靠它传数据。平时写驱动调参靠逻辑分析仪看包还够用但一旦遇到上电时序不对、花屏、唤醒失败这类问题很多公司会要求直接拿示波器看物理波形。这篇文章我就用一次实战记录带你用示波器抓一次MIPI D-PHY的波形手把手把HS模式和LP模式的切换时序讲透。这篇文章适合三种人第一种是刚接触MIPI调驱动对HS/LP切换没概念第二种是手边有示波器但不知道怎么设置和触发MIPI波形第三种是遇到现象但不确定是不是物理层的问题想用波形确诊的。我会把探头选择、示波器设置、触发思路、波形解读和常见坑全部过一遍尽量让新手也能照着做。1. 准备工作示波器和探头怎么选才不踩坑1.1 带宽估算公式500M、1G、2G到底差在哪讲HS和LP切换时最常问的问题就是我的示波器行不行这取决于你要抓多高速率的HS信号。D-PHY的HS模式速率范围很宽低端比如800Mbps高端能到2.5Gbps甚至更高。示波器带宽至少需要能覆盖信号的主要谐波分量。工程上有个粗略算法测量数字信号示波器带宽约为信号上升沿对应的频率的3~5倍。比如1Gbps的数据率其基频是500MHz想要看到比较真实的上升沿至少要能覆盖三次谐波即1.5GHz所以推荐使用1GHz以上的示波器来抓HS波形2GHz以上当然更稳。如果你手里只有500MHz的机器也不是完全不能用。LP单端波形和大尺度的切换过程用500MHz也能看得很清楚但HS的小摆幅差分波形会明显变形上升沿被拉缓幅度可能测不准。所以如果你只是排查“到底有没有HS传输”“切换顺序对不对”500MHz够用但你要测量准备时间、保持时间、过冲等参数带宽不够会导致误判。这个定位要提前想清楚。信号部分建议最低带宽原因LP单端电平100MHzLP信号是低速单端HS差分波形1GHz以上HS基频高需覆盖谐波HS上升沿测量2GHz以上上升沿快低频测不准1.2 探头选择差分探头、单端探头与X1/X10档位的取舍MIPI D-PHY的HS模式是低压差分信号D0P和D0N互为反相LP模式则分别是单端高/低电平。最理想的方式是使用有源差分探头它既能测差分摆动又能自动抑制共模噪声。但多数实验室只有普通无源单端探头这就得用两个通道分别接D0P和D0N然后让示波器做A-B数学通道还原出差分信号。这里有几个关键细节。第一两个探头必须同一型号最好做通道间去偏斜校准否则线缆长度和探头延迟不一致会让差分波形产生相位误差测出来的摆幅和时序都不准。第二探头地线一定越短越好最好用探头自带的弹簧接地针不要拖一长串地线夹。MIPI HS信号幅度只有200mV左右地线过长形成的环路会感应噪声波形上全是毛刺根本没法分析。第三探头档位一般用X10档因为X1档带宽通常只有个位数MHz测MIPI完全不够看。X10档虽然把信号衰减到十分之一但配合示波器内部放大可以把小信号还原回来只是底板噪声会明显一些。关于X1/X10还有另一个坑很多人怕X10衰减太大导致看不清故意打X1结果看到的是一个被严重滤波的慢变信号。其实在MIPI这种场合X10带来的带宽优势远比衰减重要。示波器内部有垂直放大可以把几mV的信号放大到屏幕能看而X1探头的几十MHz带宽会把几百ps的HS上升沿抹平。1.3 上机前的通道校准和偏斜校正接探头之前先把示波器设置好。通道带宽限制建议先关掉因为LP信号虽然慢HS信号快全带宽才能保证波形细节。垂直档位先用500mV/div看LP电平等发现HS后再切换成50mV/div看差分细节。采样率至少要达到信号速率的4~5倍比如1Gbps的速率示波器采样率至少5GSa/s建议10GSa/s。存储深度也很关键因为HS切换的瞬间信号很快但LP电平持续时间可能几十微秒甚至毫秒想完整看到切换序列单次捕获需要很长的记录长度。好多老示波器在深存储下刷新率很低面板反应会卡建议先跑一遍自动捕获把波形“拍下来”再慢慢缩放而不是靠实时显示去找。两个无源探头做差分采集前必须进行deskew偏斜校准。方法很简单用同一个方波信号同时接到两个探头在示波器菜单里找到通道偏斜Deskew让两个通道的波形完全重合。这一步很重要因为几十皮秒的偏斜对于高速差分信号都有影响。2. 协议基础LP模式和HS模式到底在传什么2.1 LP模式是单端电平很多人一开始就理解错了MIPI D-PHY的LP模式用于传输控制命令比如屏幕初始化命令、摄像头寄存器配置。LP模式下D0P和D0N是独立的单端信号高电平约1.2V低电平0V。它们的组合决定总线状态LP-11表示D0P和D0N都是高总线空闲LP-10和LP-01分别对应不同指令LP-00表示总线进入低电平为HS传输做准备。LP信号的上升沿、下降沿比HS慢得多这是人为设计的方便低功耗通信和时序容忍。很多新手以为D-PHY是纯差分协议但HS阶段才是差分LP阶段是单端推挽。如果不理解这一点抓波形时容易懵。你在示波器上看到CH1和CH2并不是反相而都是1.2V那就是LP空转状态。只有当它们变成0V然后出现一对小幅度反向信号才是进入HS了。搞懂这个基础下面看切换时序才不糊涂。2.2 HS模式是低压差分摆幅只有200mVHS模式下D0P和D0N呈现差分信号一个高一个低高电平约200mV低电平约-200mV相对于共模电平。摆幅很小所以必须用高带宽探头抓。数据以突发模式传送高速时钟在时钟通道上持续输出数据通道只在传输期间工作。HS有HS-0和HS-1两种情况分别对应差分电压为负和正。在示波器上如果直接用单端探头看D0P你会看到它从0V跳到小幅度区间出现幅度约±100mV的震荡相对共模这才是真正的HS信号。如果用D0P-D0N的数学通道则会看到一个更干净的、以0V为中心的差分包络幅度约200mV。我习惯把垂直档位设置在50mV/div这样能把HS小信号看得比较清楚。不过要提醒一句如果用单端探头看因为还叠加了共模电压波形位置会整体抬高不要被这个骗了。2.3 切换时序从LP-11到HS-ZERO再到HS数据这是本文的重点。从LP空闲到HS数据必须严格经过一系列状态变化。大致过程是初始时总线处于LP-11空闲。发送端驱动Dp为低保持Dn为高即LP-01维持时间为T_HS-PREPARE。然后Dp和Dn同时变低进入LP-00称为HS-ZERO用于建立接收端的HS模式准备。紧接着差分驱动开启发送HS同步序列接收端锁定时钟。随后发送正式的HS数据包。数据结束后进入HS-TRAIL差分幅度衰减然后Dp和Dn回到低电平LP-00。之后驱动关闭Dp和Dn回到高电平先经过LP-10再回到LP-11总线恢复空闲。如果中间任何状态的保持时间不满足要求比如T_HS-PREPARE太短、HS-TRAIL太短接收端可能误判导致花屏、闪屏或摄像头无法出图。所以学会在示波器上量这些时间是定位问题的关键。D-PHY不是只有数据通道有这套切换时钟通道也一样但时钟通道只传HS clock不会传LP数据。做显示初始化时我们需要重点看数据通道0D0P/D0N的切换因为命令模式的数据都从D0走。在高速模式CSI/DSI协议包里还会包含EoTEnd of Transmission和Bus Turnaround等特殊包这些在物理层上都会体现为一组特定的LP/HS状态切换不过大多数时候我们只要抓住最基础的切换序列就够用了。3. 实操记录抓取HS/LP切换波形的完整步骤3.1 测试点选取与探头连接方式这一步直接决定成败。一般开发板上都预留了MIPI测试点或者你可以焊一根细线引出D0P、D0N、GND。如果测试点远离芯片尽量用短的接地弹簧针。连接顺序先用通道1接D0P通道2接D0N设置数学通道M1CH1-CH2。如果你想看单端波形可以直接看CH1和CH2想看差分信号看M1。注意如果用的是差分探头则直接输出差分信号不需要数学通道。还有一个容易忽略的点MIPI走线是差分对测试点最好选在源端或接收端附近不要从长走线中间随意挑一个点。因为阻抗不连续会产生反射导致波形失真。开发板测试点通常已经考虑了阻抗匹配直接焊线会影响阻抗但如果你只是看逻辑状态和大概时序问题不大如果做信号完整性分析建议使用SMA头或探头焊接座。3.2 示波器参数设置触发、时基、采样率和存储深度这一步是很多人失败的原因。先用单次触发模式触发电平设置要参考LP电压。因为LP高电平是1.2V低电平0V所以建议触发电平设在0.6~0.8V触发沿选择下降沿。为什么选下降沿因为从LP-111.2V进入LP-01/00时会有下降沿这是HS传输的前奏。如果你只想抓完整的LP-11到LP-01到LP-00再到HS的切换那么单次触发加足够长的时基就能捕获。时基怎么设置可以先设置50us/div看看总线上有没有周期性HS burst。如果有周期性刷新你可以打开roll模式或者使用“自动”模式观察。若希望看清HS内部细节再把时基缩小到200ns/div但这样不能看到完整切换。所以建议先抓一个大的再在波形上放大观察HS区域。采样率参考1Gbps速率建议至少5GSa/s如果存储深度8Mpts时基20us/div采样长度约400us采样率可能只有2GSa/s要权衡。有一些示波器支持分段存储segmented memory可以只捕获多个短时间片段很适合抓MIPI这类突发信号。分段存储的原理是只记录触发点前后很短的片段跳过空闲期这样可以在不牺牲采样率的情况下捕获多包数据。3.3 提高触发成功率的三个实用技巧如果总线上有多通道都在传输普通下降沿可能触发在任意一包上。这时可以用脉宽触发设定触发条件为“脉宽小于某个时间”专门命中那些短的LP-00脉宽或者直接使用总线解码触发。现在很多中高端示波器自带MIPI D-PHY协议解码选项选好通道设置阈值电压LP高/低阈值、HS交叉阈值就能直接解码HS包内容还能一键导航到包位置。对于经常调MIPI的工程师这个功能非常值得用。在你找不到协议解码时还可以使用边沿触发再加延迟或者用区域触发。区域触发可以让示波器只在信号进入某个“画出来的区域”时触发适合从一堆信号里挑出特定状态转换。不过区域触发设置麻烦新手还是先用下降沿加脉宽触发比较靠谱。第三个技巧是利用外部触发信号如果你在驱动代码里能临时加一个GPIO翻转在开始发送MIPI命令前沿这个GPIO发一个脉冲接到示波器的EXT触发端口触发稳定性会极大提升。这在调试早期非常有用。3.4 波形保存与后续数据分析抓到波形后建议同时保存屏幕截图和波形数据。波形数据一般导出为CSV或二进制方便后续用脚本分析。截图时注意把测量参数和时间戳一起带上方便写测试报告。如果要用数据做二次分析记得保存全部采样点不要只保存屏幕显示的部分。很多示波器默认保存方式是“保存屏幕图像”但图像不能恢复成数据所以导出CSV时要选择“波形数据”而不是“屏幕图像”。如果你用Python做后期分析可以读取CSV后计算上升沿、准备时间等参数几行脚本就能批量处理。这样做的好处是避免人工手动光标测量带来的误差特别是要抓几十次统计分析时。我的习惯是把波形CSV和一张全屏截图放在同一个文件夹命名里带上板卡型号、MIPI速率和测试点后面整理测试报告时非常省事。4. 波形解读每个切换细节应该怎么量4.1 LP阶段先学会看电平状态和准备时间在波形上找到一段总线空闲你看到D0P和D0N都在1.2V对应LP-11。然后注意看某次通信开始D0P先掉到0VD0N还保持高于是进入LP-01。这段宽度通常十几ns到几十ns对应T_HS-PREPARE。如果T_HS-PREPARE太短接收端就来不及准备你需要回去查配置。接着两路都到0V出现LP-00宽度一般也有几十ns这部分是HS-ZERO的前奏。我实际调屏时见过很多次问题往往出在LP-01持续时间。有些SoC的D-PHY控制器会把这部分时间给得很短在时序图上看着能工作但到了实际硬件上接收端就是不稳定。这时候用示波器一量就很容易发现LP-01的宽度不够。测量时把光标放在D0P下降沿和D0N下降沿之间时间差就是T_HS-PREPARE。注意D0P和D0N两个下降沿不一定是同时的这个先后顺序也是时序检查的一部分。4.2 HS阶段用数学通道看差分同步序列当两路都到0V后你会观察到D0P和D0N之间出现幅度很小的反向波动这就是HS差分信号。在示波器上如果用CH1-CH2数学通道你看到的这个差分波形更干净。先出现一串等宽的脉冲那是同步序列随后是数据和时钟。实际测量中可以调节电压刻度将差分波形放大你会看到摆幅约200mV。同步序列非常重要。接收端就是靠它来锁定时钟和数据对齐。如果这一段不是规则方波可能信号完整性有问题。比如我在抓某块屏的初始化序列时发现HS-ZERO之后同步序列的第二个脉冲幅度明显偏低最后确认是D0P走线上的匹配电阻虚焊导致反射叠加。类似这种问题只看协议层根本发现不了必须看物理波形。4.3 HS退出HS-TRAIL到LP-11的常见形态HS爆发结束后差分对先进入HS-TRAIL幅度逐渐减小然后D0P和D0N同时回到低LP-00随后D0P先升高到1.2VD0N保持低LP-10最后D0N也升高回到LP-11。整个过程就是从“差分模式”回到“单端电平模式”。这里同理要注意HS-TRAIL保持时间如果过短会导致总线还没完全恢复就进入LP状态接收端可能无法识别下一次传输。在波形上HS-TRAIL表现为差分幅度从200mV慢慢收窄直到变成两个近似重叠的线然后一起跳到0V。这个“慢慢收窄”的过程不是示波器余晖而是驱动器的衰减速率的真实表现。如果这个阶段太长说明驱动器退出慢会导致总线占用时间变长影响多设备共享总线时的切换效率。这里有一个小技巧把时基放大到50ns/div专门看HS尾巴就能很清楚地看到D0P和D0N是如何合并并回到LP电平的。4.4 关键时序参数的测量与调整思路在示波器上直接使用光标测量。比如测量T_HS-PREPARE从LP-11结束的下降沿到LP-00开始下降沿之间的时间。测量T_HS-TRAIL从HS数据结束点到两路都达到低电平的时间。也可以使用测量功能设置时间测量在数学通道M1上。还可以借助示波器的“自动测量并统计”功能连续抓多包求平均值确认时序余量。如果时序不满足通常需要翻PHY的datasheet对照具体数值调驱动里的HSTX/LPTX timing参数或寄存器。不同SoC的寄存器命名不一样但通常都有针对准备时间/保持时间的调整项。调参时先调T_HS-PREPARE如果再不行再调HS-TRAIL经验上是这样的顺序。调的时候不要一次改太多一次只改一个参数然后重新抓波形看变化这样才能定位到哪个寄存器真正起作用。5. 常见问题与排查技巧实录5.1 抓不到HS波形可能不是示波器的问题常见原因是触发没设置好。如果你只是用上升沿触发往往只能看到LP变化看不到HS小信号因为HS幅度太小没触发到。解决触发设为下降沿触发电平在0.6-0.8V之间或者使用脉宽触发。还有检查一下探头是否确实接到了D0P/D0N而不是只接了一条信号线。很多复用板上MIPI信号可能没有通到测试点需要确认电路图。还有一个因素触发电平设太高比如设在了1.0VLP高电平是1.2V下降沿从1.2V跨越1.0V确实会触发但如果设在了0.2VLP低电平是0V下降沿到不了0.2V以下对LP-01来说只到0V就可能不触发。正确做法是取LP高低电平的中间值我一般习惯设在0.7V左右。5.2 HS波形变成正弦波多半是带宽和地线惹的祸原因示波器带宽不够、探头带宽不够、接地线太长、测试点阻抗不匹配。你可以降低信号速率或者换更短的接地弹簧针把探头拧紧。如果只能用手头的低带宽示波器可以抓LP部分看切换时序但HS摆幅和上升沿细节就不能太当真。这也解释了为什么很多公司做MIPI调试都愿意花大价钱买2GHz以上的示波器确实是一分钱一分货。另外一个常见原因是探头没有补偿。无源探头在X10档下都有一个可调电容用来匹配示波器输入电容。如果探头补偿没调好方波会变成圆头或尖角看起来就像正弦波。接上示波器自带的1kHz方波校准源用小一字螺丝刀调整探头上的补偿电容让屏幕上的方波边角平直。很多人忽略这一步导致高速信号测量失真。5.3 A-B数学通道波形不准先做deskew两个无源探头的传输延迟可能不一致。在示波器上做通道间去偏斜Deskew用同一个方波信号同时输入两个探头校准到两个通道波形重合。偏斜校准之后差分波形会准确很多。如果还是没有看看是不是触发点导致的水平位置偏移用“水平位置归零”再试。我还要提醒一点数学通道M1CH1-CH2的带宽取决于通道本身的模拟带宽但数学运算会放大量化噪声和地线噪声。所以测出来波形有些“毛”是正常的不要一看到毛就以为信号有问题。想要更干净可以打开数学通道的数字滤波或者用示波器的高分辨率采集模式Hi-Res。5.4 波形毛刺多是探头环还是电源噪声有可能是探头地环路引入的高频噪声也有可能是MIPI走线旁边有串扰。可以先确认地线连接再适当减小带宽限至1GHz如果示波器带宽更高来滤除无关噪声更实际的做法是看平均后的波形或者用差分探头减少共模噪声。注意毛刺也可能来自开关电源的噪声特别是开发板供电不干净时。可以在示波器上同时监测电源轨看毛刺是否和电源开关噪声对齐。如果毛刺是周期性的比如每隔固定时间出现常常和DCDC开关频率相关。如果毛刺只在HS切换时出现那多半是驱动器的瞬态电流造成的阻抗压降这时要检查供电去耦电容。我见过一个案例HS波形边沿明显抖动最后发现是电源走线过长导致串扰移动了LDO输出电容位置后问题消失。这类问题需要耐心和系统思考。5.5 怎么区分D0数据通道和时钟通道如果你接错线把时钟通道当成数据通道看到的HS波形会是一直连续翻转的时钟而LP阶段则始终是LP-11如果时钟通道在空闲时不传LP指令。正常数据通道的HS burst是不规律的因为里面是包头、数据、ECC、CRC。用协议解码或者肉眼观察如果波形里有规律长串1/0翻转的就是时钟如果是不规则的就是数据。还有一个更直接的办法在驱动初始化流程里如果你只发一条短命令数据通道D0上会出现一个短促的HS burst而时钟通道上会一直持续到该数据通道的整个传输窗口结束。所以看波形宽度也能猜出来。平时调试如果不需要关心时钟通道干脆只接数据通道用“时钟通道没接也能抓D0”的思路来减少接线复杂度。最后再分享一个小技巧。每次调试MIPI的HS/LP切换时序时我都会习惯性先把示波器存储深度调到最大然后用下降沿触发不管当前跑的速率是多少先抓一整段LP到HS再到LP的波形再局部放大去量各个准备时间。这样最不容易漏掉问题。如果发现时序紧张再去查SoC的MIPI控制器寄存器调整预准备/预保持时间基本能定位大部分初始化失败、花屏和唤醒异常的物理层问题。
返回列表