1. 问题背景与现象分析
最近在飞凌OK3588-C平台的Linux R4系统上调试MIPI YUV摄像头时,遇到了一个让人头疼的问题:系统不断报出"csi size err"错误。这个问题特别有意思,因为它只出现在部分摄像头模组上,而其他模组却能正常工作。具体现象是,当使用dmesg查看内核日志时,会看到大量重复的错误信息:
[ 144.609745] rkcif-mipi-lvds2: ERROR: csi size err, intstat:0x1000001, lastline:0!!
这种错误会导致图像采集完全失败,摄像头无法输出有效画面。经过初步排查,我们发现问题的根源可能与MIPI信号的HS(水平同步)和VS(垂直同步)极性有关。有意思的是,FPGA工程师确认他们只是将LVDS信号原样转换为MIPI信号,并没有做任何修改,这就把问题指向了RK3588平台对MIPI信号极性的处理机制。
2. 硬件信号检测与极性分析
2.1 MIPI信号极性基础
在深入解决问题之前,我们需要先理解MIPI信号极性的概念。简单来说,MIPI CSI-2接口中的HSYNC(行同步)和VSYNC(场同步)信号都有两种可能的极性:高电平有效或低电平有效。这就好比开关的两种状态,开或关,只是在这里对应的是信号的电平状态。
在实际项目中,我们发现飞凌OK3588-C的Linux R4系统对MIPI YUV信号的极性有特定要求。如果摄像头输出的极性与平台预期不符,就会出现"csi size err"错误。这就像两个人对话,如果一个人说"是"表示肯定,另一个人却理解为"否",沟通就会完全乱套。
2.2 信号检测方法
要检测信号极性,我们可以使用示波器观察MIPI信号的实际波形。具体操作步骤如下:
- 连接示波器探头到MIPI接口的HSYNC和VSYNC信号线
- 设置示波器触发模式为边沿触发
- 观察信号在有效图像数据期间的极性
- 记录HSYNC和VSYNC的有效电平状态
通过这种方法,我们发现出问题的摄像头模组与正常模组的信号极性确实存在差异。这验证了我们的猜想:极性不匹配是导致问题的根本原因。
3. 驱动层排查与修改
3.1 驱动日志分析
当遇到"csi size err"错误时,首先要做的是详细分析驱动日志。RK3588的MIPI CSI驱动会在检测到尺寸错误时输出详细的调试信息。关键的错误信息包括:
- intstat: 0x1000001 - 表示具体错误类型
- lastline: 0 - 表示最后接收到的行号
这些信息表明驱动没有正确接收到有效的图像数据帧。在我的调试过程中,发现这种情况通常与以下因素有关:
- 信号极性配置错误
- 时序参数不匹

1353

被折叠的 条评论
为什么被折叠?



