RK3568启动之后一直在刷这个错误,如何一步一步排查是什么问题 [ 13.943423] rk...

Criado em: 26 de maio de 2025

Respondido usando O3 por Chat01

Pergunta

RK3568启动之后一直在刷这个错误,如何一步一步排查是什么问题
[ 13.943423] rkcif_dvp: dvp overflow err
[ 13.943433] rkcif_dvp: ERROR: DVP_ALL_ERROR_INTEN:0x20!!

Pensamento

Troubleshooting RK3568 error

The user is dealing with a “dvp overflow” error on the Rockchip RK3568 camera interface. To help, I’ll guide them step-by-step on debugging. First, check the DVP configuration, pinctrl, reset lines, and clocks. Then, I’ll have them look at the I2C camera sensor registers and verify the DTS for rkcif and DVP node settings. It’s also important to confirm the correct lens configuration and ensure the pixel clock is aligned—especially since a FIFO overflow can happen if there’s no vsync/href or mismatched pixel clock. This should help address the issue.

Thought for 17 seconds

Resposta

下面给你一个由易到难、由软到硬的排查路线,基本不需要额外工具就能一步步缩小范围。每一步都建议在完成后重启一次 RK3568,再观察 kernel log 里 rkcif_dvp 是否还会刷 “dvp overflow err”。


1. 确认 DVP 接口电气连接 & 供电

检查点说明典型现象
PCLK 是否存在用示波器量 PCLK(像素时钟)脚:应当有稳定方波,频率 = 分辨率 × 行数 × 帧率。无 PCLK 或频率异常会直接导致 FIFO 溢出。
VSYNC / HSYNC 波形VSYNC 为帧同步、HSYNC 为行同步。两路都应与 PCLK 同步出现,占空比近似固定。VSYNC/HSYNC 缺失、不规则,会产生 overflow。
供电时序传感器 AVDD/DVDD/I/O 电源需先后满足时序;上电过快、有抖动都可能导致输出异常。开机后 sensor register 读不出来,或前几秒一直溢出。

2. 核对 Device Tree 配置(*.dts

  1. port/endpoint 中的 rockchip,bus-typeremote-endpoint 要匹配。
  2. 并口 DVP 的 bus-width 需与板级硬连线一致(8/10/12/16 位)。
  3. pclk-sample 取值(rising/falling)要和 sensor 数据手册保持同相位。
  4. 如果用了外部专用时钟(如 CIF_CLKOUT),确认 assigned-clocksclock-frequency

修改后重新编译 DTB→烧录→重启。


3. 开启 driver debug,定位是哪一级 FIFO 溢出

在内核启动参数或动态调试中加入:

bash
echo 0x1f > /sys/module/rockchip_cif/parameters/debug /* or dmesg -n 8 */

重启后会看到 rkcif 打印更详细的寄存器值,比如:

rkcif_dvp: INT_STATUS=0x20, CIF_INT_FRAME_EN=0x3
  • 0x20 通常表示 RX FIFO 溢出:上游数据比 AXI 侧读取快。
  • 如果是 0x08 则是 FIFO 空:大概率 VSYNC/HSYNC 断续。

4. 验证带宽/时钟树

  1. AXI 总线频率
    clk_summary 里找到 aclk_isp0hclk_isp0 等,确认 ≥ 300 MHz。
    若过低,rockchip,clk_out 或 PM QoS 里把它调高后再试。

  2. DDR 带宽
    devfreqdmc 工具把 DDR 拉到性能档(LPDDR4 ≥ 1600 MHz),看溢出是否消失。


5. 检查 Sensor 配置

  • I²C 寄存器:确认输出分辨率、帧率、MIPI/DVP 模式设置正确。
  • 像素时钟:有的 sensor 支持分频/倍频,须与 RK3568 端配置一致。
  • Test pattern:把 sensor 拉到内建彩条模式,数据量稳定更易对比结果。

6. 环路截断法

如果板上挂了多颗摄像头,可在 Device Tree 里 只保留一颗 并注释掉其他 CIF 节点;或干脆把其他 sensor 的电源关掉 → 判断是否因总线冲突或带宽累加触发溢出。


7. 回退 / 更新 Kernel 驱动

  • Rockchip 官方 SDK(4.19/5.10/5.15)在 CIF 驱动上有数次 overflow 修复补丁。
  • git log drivers/media/platform/rockchip/cif 查看最近补丁,如果你在私有分支,拉一下 upstream 再试。
  • 注意匹配 PHY_RB_SAMPLING_EDGERX_FIFO_THRESHOLD 的改动。

8. 硬件极限验证

只在前面都无果时再做

  1. 把分辨率降到 640×480@15fps,看 overflow 是否立刻消失:

    • 消失 → 证明纯带宽问题,再回头调时钟/DDR;
    • 仍出现 → 多半是同步信号或 FIFO 门限问题。
  2. 用跳线把 HSYNC 或 VSYNC 暂时拉低,观察 log 变化,可判断哪个信号触发中断。


快速排查清单(可打印)

  • 量 PCLK / VSYNC / HSYNC 波形
  • 检查 Sensor 供电时序
  • 核对 DVP bus-width / pclk-sample / clock-frequency
  • 开启 rkcif debug 查看 INT_STATUS
  • 提升 aclk_isp0 / hclk_isp0 频率
  • 拉高 DDR devfreq
  • Sensor 拉彩条模式试跑
  • 只启用单个摄像头节点
  • 对比 Rockchip 官方最新驱动补丁
  • 降分辨率做极限测试

按照上面顺序,一般 前 3~4 步 就能锁定 80% 的问题;如果你卡在某一步找不到对应寄存器或工具命令,可以再告诉我当前显示的寄存器值或 device tree 配置,我帮你继续分析。祝调试顺利!

Compartilhar esta Q&A