RK3568启动之后一直在刷这个错误,如何一步一步排查是什么问题 [ 13.943423] rk...
Creato il: 26 maggio 2025
Creato il: 26 maggio 2025
RK3568启动之后一直在刷这个错误,如何一步一步排查是什么问题
[ 13.943423] rkcif_dvp: dvp overflow err
[ 13.943433] rkcif_dvp: ERROR: DVP_ALL_ERROR_INTEN:0x20!!
下面给你一个由易到难、由软到硬的排查路线,基本不需要额外工具就能一步步缩小范围。每一步都建议在完成后重启一次 RK3568,再观察 kernel log 里 rkcif_dvp 是否还会刷 “dvp overflow err”。
检查点 | 说明 | 典型现象 |
---|---|---|
PCLK 是否存在 | 用示波器量 PCLK(像素时钟)脚:应当有稳定方波,频率 = 分辨率 × 行数 × 帧率。 | 无 PCLK 或频率异常会直接导致 FIFO 溢出。 |
VSYNC / HSYNC 波形 | VSYNC 为帧同步、HSYNC 为行同步。两路都应与 PCLK 同步出现,占空比近似固定。 | VSYNC/HSYNC 缺失、不规则,会产生 overflow。 |
供电时序 | 传感器 AVDD/DVDD/I/O 电源需先后满足时序;上电过快、有抖动都可能导致输出异常。 | 开机后 sensor register 读不出来,或前几秒一直溢出。 |
*.dts
)port/endpoint
中的 rockchip,bus-type
、remote-endpoint
要匹配。bus-width
需与板级硬连线一致(8/10/12/16 位)。pclk-sample
取值(rising
/falling
)要和 sensor 数据手册保持同相位。assigned-clocks
和 clock-frequency
。修改后重新编译 DTB→烧录→重启。
在内核启动参数或动态调试中加入:
bashecho 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 断续。AXI 总线频率
在 clk_summary
里找到 aclk_isp0
、hclk_isp0
等,确认 ≥ 300 MHz。
若过低,rockchip,clk_out
或 PM QoS 里把它调高后再试。
DDR 带宽
用 devfreq
或 dmc
工具把 DDR 拉到性能档(LPDDR4 ≥ 1600 MHz),看溢出是否消失。
如果板上挂了多颗摄像头,可在 Device Tree 里 只保留一颗 并注释掉其他 CIF 节点;或干脆把其他 sensor 的电源关掉 → 判断是否因总线冲突或带宽累加触发溢出。
git log drivers/media/platform/rockchip/cif
查看最近补丁,如果你在私有分支,拉一下 upstream 再试。PHY_RB_SAMPLING_EDGE
和 RX_FIFO_THRESHOLD
的改动。只在前面都无果时再做
把分辨率降到 640×480@15fps,看 overflow 是否立刻消失:
用跳线把 HSYNC 或 VSYNC 暂时拉低,观察 log 变化,可判断哪个信号触发中断。
bus-width
/ pclk-sample
/ clock-frequency
aclk_isp0
/ hclk_isp0
频率按照上面顺序,一般 前 3~4 步 就能锁定 80% 的问题;如果你卡在某一步找不到对应寄存器或工具命令,可以再告诉我当前显示的寄存器值或 device tree 配置,我帮你继续分析。祝调试顺利!