rv1126bp lvds调试

1126bp是25年新发的 kernel6.1版本 比较新资料少,调试难度大

1,debug思路汇总

ai写的 有可能是瞎编的。

这些底层的时钟、数据处理细节完全可以不依赖 v4l2 抓果,通过内核标准节点、驱动日志、中断状态就能排查,刚好适配你们「先确认时钟再看数据通路」的调试思路,我按排查顺序整理下方法,适配你们现在 FPGA 做前端输出的场景:


先确认前提(避免 SOC 侧无意义调测)

因为现在 FPGA 相当于直接扮演了「摄像头 + 信号源」的角色,XVCLK 已经是 FPGA 给 CMOS、FPGA 再输出标准摄像头信号(MIPI/DVP)给 SOC,所以先对齐 FPGA 侧的输出配置,再查 SOC:

  1. FPGA 输出的接口参数和 SOC 设备树 / 驱动配置完全一致:比如 MIPI 的 Lane 数、速率、VC 通道、数据类型(RAW8/RAW10/YUV 等);如果是 DVP 并行接口的话,HSYNC/VSYNC 极性、PCLK 频率 / 相位、数据位宽对齐;

  2. 建议 FPGA 先输出固定测试图案(比如彩条、固定字节序列 0xAA/0x55),不要直接送真实 CMOS 采集数据,方便后面对比 SOC 接收是否正确。


一、SOC 侧时钟状态排查方法

你不需要管给 CMOS 的 XVCLK,重点看SOC 侧 CSI/DSI 接收链路的时钟状态,通用方法如下(所有 Linux 平台基本都适用,不需要改代码):

  1. 先查错误日志,快速定位时钟失败问题

直接搜 dmesg 里的时钟相关报错:

复制代码
dmesg | grep -iE 'clk|csi|mipi|isp' | grep -iE 'err|fail|warn'

如果有clk_get failclk_set_rate faileddphy pll unlock这类日志,直接就定位是时钟配置问题,比如 CSI 模块申请时钟失败、MIPI 接收端的锁相环没锁住(FPGA 送的时钟和 SOC 配置不匹配)。

  1. 用 clk 子系统节点看所有时钟的实时状态

只要内核开了CONFIG_DEBUG_FS(绝大多数嵌入式 Linux 默认开),挂载 debugfs 后直接看时钟总表:

复制代码
mount -t debugfs none /sys/kernel/debug # 没挂载的话先执行
cat /sys/kernel/debug/clk/clk_summary

重点找和 CSI/MIPI/ISP 相关的时钟项,确认 3 个点:

  • enable_count > 0:说明时钟已经正常使能;

  • rate 和预期一致:比如 MIPI HS 速率对应时钟、DVP 的 PCLK 输入频率,和 FPGA 输出的参数是否匹配;

  • 父时钟正确:如果是用 FPGA 送的随路时钟做采样,确认 CSI 采样时钟的父时钟是ext_csi_clk这类外部输入时钟,不是 SOC 内部 PLL(如果配成内部时钟会导致采样不同步,全是 CRC 错误)。

  1. 特殊接口时钟补充:MIPI DPHY 状态

如果是 MIPI 接口,大部分 SOC 会在 debugfs 下出 DPHY 的专属节点,比如/sys/kernel/debug/mipi_csi0/dphy_status,直接看pll_lock状态是否为 1:

  • 锁不住 = FPGA 输出的 MIPI 时钟质量 / 速率不匹配、或者是 FPGA 用了时钟 burst 模式(有些 SOC 不支持非连续 MIPI 时钟);

  • 锁住了 = 前端时钟链路正常,接下来可以查数据通路。


二、SOC 侧数据处理细节排查方法

时钟确认没问题后,不用等 v4l2 抓图,从「中断→链路配置→底层数据」逐层查:

  1. 先看中断状态,确认有没有收到数据

看 CSI/MIPI/ISP 的中断有没有正常上报:

复制代码
cat /proc/interrupts | grep -iE 'csi|mipi|isp'
  • FPGA 开始送流后,对应中断的计数会持续增长(比如帧结束中断、MIPI 包接收中断),如果完全不涨 = 根本没识别到数据流,优先查接口配置(VC 通道、数据类型、同步极性不对);

  • 如果计数涨但伴随大量错误中断,dmesg 里会有对应报错:

    • 全是 CRC 错误 = MIPI 信号质量差、PCLK 采样相位反了、数据位宽不匹配;

    • 帧同步错误 = FPGA 输出的分辨率 / 行长度和 SOC 配置不一致、VSYNC/HSYNC 极性错;

    • FIFO 溢出错误 = CSI 接收时钟配慢了、后端总线带宽不够。

  1. 看 CSI/ISP 的 debug 节点,看数据接收统计

几乎所有 SOC 的摄像头驱动都会在 debugfs 下导出接收统计,路径一般是/sys/kernel/debug/csiX/或者/sys/kernel/debug/ispX/,可以直接读:

  • frame_cnt:统计收到的完整帧数,FPGA 送流时应该和帧率匹配增长,说明 SOC 已经能完整识别帧;

  • error_cnt:各类错误的计数,比如同步错误、CRC 错误的次数,判断是偶发还是全错;

  • 部分厂商还支持直接 dump CSI 接收到的原始 RAW 数据(不需要走 v4l2),直接和 FPGA 输出的测试图案对比,100% 确认采样是否正确。

  1. 开驱动 debug 日志,看逐包 / 逐帧处理细节

如果需要看更细的处理逻辑,可以动态开摄像头驱动的 debug 日志:

  • 方法 1:如果驱动有模块参数,加载时加debug_level=7,会打印所有帧接收、缓冲区处理的日志;

  • 方法 2:内核开了**CONFIG_DYNAMIC_DEBUG**的话,用 dyndbg 动态打开对应驱动的 debug 打印,比如:

    复制代码
    echo 'file drivers/media/platform/xxx-csi.c +p' > /sys/kernel/debug/dynamic_debug/control

    开了之后 dmesg 会打印每一个 MIPI 短包、帧头帧尾、缓冲区提交的细节,能直接看到 SOC 是不是收到了正确的帧长度、有没有把数据正常送到 v4l2 缓冲区

  1. 查 v4l2 链路配置,确认格式匹配

如果前面都没问题,再确认 v4l2 链路的格式配置,不用抓图,用media-ctl就能看:

复制代码
media-ctl -p # 看整个media拓扑

确认从 CSI 接收单元→ISP→v4l2 设备节点的整个链路的格式(分辨率、像素格式、场序)和 FPGA 输出完全一致,比如 FPGA 送的是 1080P RAW8,结果 CSI 节点配的是 720P RAW10,肯定抓不到正确数据。

也可以用v4l2-ctl -d /dev/video0 --all看最终视频节点的格式配置是否正确。


三、什么时候需要看 v4l2 抓图结果?

只有当前面所有检查项都正常:

  1. 时钟全部使能、频率正确、DPHY 锁定;

  2. 中断正常增长、没有错误报错;

  3. 帧计数正常增长、链路格式配置完全匹配;

    这时候如果还是有问题(比如色彩不对、有条纹),才需要抓图分析,大概率是小的配置问题(比如 Bayer 序配反、gamma 没关)或者 FPGA 输出的测试图案本身有问题。


常用调试顺序参考

  1. FPGA 输出固定测试图案→确认 FPGA 侧参数和 SOC 配置对齐;

  2. 查 dmesg 有没有时钟 / DPHY 报错→读 clk_summary 确认时钟状态→确认 DPHY 锁存;

  3. 开 FPGA 送流→看中断是否增长→查 error_cnt 有没有错误;

  4. 确认帧计数正常增长→查 media 拓扑格式匹配→最后 v4l2 抓图验证。

0,其他

相关推荐
星华云8 小时前
[FPGA]Spartan6 Uart固定波特率读写JY901P惯导模块
fpga开发·verilog·jy901p·惯导模块
s090713619 小时前
ZYNQ无SD卡纯NAND Flash启动Linux全攻略
linux·fpga开发·zynq·nand flash启动
jjinl21 小时前
AG32VF407RGT6 开发流程记录
fpga开发
FPGA小迷弟21 小时前
FPGA面试题汇总整理(一)
学习·fpga开发·verilog·fpga
Z22ZHaoGGGG21 小时前
verilog 资源占用少的滤波方法
fpga开发
S&Z346321 小时前
[SZ901]FPGA 下载器硬件介绍
fpga开发
GateWorld1 天前
FPGA内部模块详解之四 算力引擎——数字信号处理单元(DSP Slice)深度解析
fpga开发·dsp
weiyvyy1 天前
嵌入式硬件接口开发的核心原则
驱动开发·单片机·嵌入式硬件·fpga开发·硬件架构·硬件工程
Kong_19941 天前
芯片开发学习笔记·二十一——primetime静态时序分析
fpga开发·芯片开发