第一次接触MIPI CSI-2接口时,我完全被那些高速差分信号搞懵了。后来才发现,这其实就是手机摄像头和处理器之间的"高速公路"。MIPI联盟制定的这套标准,最大的特点就是能用最少的线传输最多的数据——这对寸土寸金的移动设备来说太重要了。
实际项目中,我常用索尼IMX系列传感器,它们的MIPI接口都遵循CSI-2标准。这里有个关键点要注意:MIPI物理层(D-PHY)用的是1.2V摆幅的伪差分信号,这和FPGA常见的LVDS完全不同。我第一次调试时就栽在这里,直接把传感器输出接到FPGA引脚上,结果当然是什么数据都收不到。
正确的做法是用电平转换芯片,比如美信的MC20901。这个芯片特别有意思——它能把MIPI的高速(HS)和低速(LP)信号分开处理。实测中发现,HS信号的摆幅会降到200mV左右,而LP信号保持在1.2V。下图是我在某个车载摄像头项目中的实际连接方案:
code复制Sensor -> MC20901 -> FPGA
HS/LP分离 LVDS接收
遇到"无数据输出"时,我第一个动作永远是抄起示波器。但抓MIPI波形可没那么简单,这里分享几个血泪教训:
首先,一定要用差分探头!我第一次用单端探头测,看到的全是噪声。后来换了差分探头,立即就能看到清晰的波形。建议设置触发条件为Clock Lane的HS模式,触发电压设在100mV左右。
其次,重点关注这几个参数:
有次调试IMX335时,发现数据始终不对。后来抓波形发现Clock的上升沿有振铃,原来是PCB走线太长导致的。缩短到5mm后问题立即解决。这就是为什么MIPI规范要求走线严格等长(误差<50ps)。
如果你正在用Vivado 2016.4调试MIPI CSI-2,请立即停下来!这是我踩过最深的坑。这个版本的MIPI CSI-2 RX核有个致命缺陷——即使前端信号完全正确,AXI接口的tvalid信号就是不会变高。
当时我们团队花了整整两周排查,从传感器配置查到PCB布线。最后偶然升级到Vivado 2019.2,问题神奇地消失了。后来在Xilinx论坛发现,这是2016.4版本的一个已知bug。所以我的第一条建议就是:永远使用最新稳定版的Vivado。
在Vivado 2019.2中配置MIPI CSI-2 RX核时,这几个参数最关键:
我有个小技巧:先用Auto生成初始值,然后在±5范围内微调。曾经有个项目,Tap值设为18时完全没数据,调到22就正常了。这说明时钟数据对齐窗口其实很窄。
很多工程师只关注电气信号,却忽略了启动时序。正确的上电顺序应该是:
有次客户反映设备偶尔启动失败,最后发现是传感器上电太快。我们在FPGA配置完成后加了50ms延时,问题彻底解决。这个细节在手册里往往不会特别强调。
当遇到"无数据输出"时,按这个顺序排查:
有次所有步骤都检查过了还是不行,最后发现是电源噪声太大。所以当常规方法无效时,不妨看看电源质量。