高通Camera 驱动调试要点(二)

本文聚焦于高通Camera驱动调试中的两大问题:bus overflow和sof freeze。bus overflow涉及VFE时钟设置,解决方法包括增大总线时钟频率和调整VFE突发长度。sof freeze可能是由于ISP未收到传感器帧数据,需检查CSID/CSIPHY/CAMIF。调试步骤包括验证VFE硬件配置、对比传感器与ISP的帧大小等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  这篇文章主要介绍数据流这边Camera ISP这块所遇到的问题,主要介绍bus overflow和sof freeze;


(一)bus overflow

  摄像头传感器时钟通道(即 MIPI DDR 时钟)的工作频率与激活的数据通道数决定摄像头传感器在指定操作模式下的总数据传输速率(吞吐量)。每个通道的数据传输速率是 MIPI DDR 时钟速度的两倍。例如,工作在 200 MHz MIPI DDR 时钟频率和 4 个激活通道下的摄像头传感器的总数据传输速率为 1600 Mbps(每个通道的数据传输速率为 200 * 2 = 400 Mbps)。

  每个帧的分辨率、额外/虚拟像素/线数、水平消隐、垂直消隐、MIPI 包开销、每像素位数、数据格式、内部是否存在多个交错数据流以及每个流的数据传输速率/开销等,都会影响数据传输速率。指定工作模式下初步摄像头调通,计算:X = 帧宽 * (帧高垂直消隐) 每像素位数 * 每秒帧数 * (MIPI 协议和其他数据流的开销)在 VFE 时钟优化中为给定的 MSM 找到大于 X 的最接近的值作为 VFE 时钟的初始值。

  在标称时钟模式下,比如MSM8909的VFE最大速度为266MHz每条MIPI通道的PHY限制为1.5 Gbps (1.5 * 109 bps),由于存在MIPI/空白开销(约15-25%,各传感器的具体数值有所不同),实际帧数据吞吐量略少于预期原图拍摄接口数据传输速率与VFE时钟无关在4通道PHY接口上,每条通道的最大数据为(266 x bpp)/通道数;bpp → 每像素的传感器输出位数对于每通道10位数据传输速率 - (266*10)/4 - 665 Mbps;

  当我们VFE 时钟设置为小于传感器输出MIPI的数据传输速率时,将出现溢出bus overflow;

502:        pr_err_ratelimited("%s: image master 0 bus overflow\n",
507:        pr_err_ratelimited("%s: image master 1 bus overflow\n",
512:        pr_err_ratelimited("%s: image master 2 bus overflow\n",
517:        pr_err_ratelimited("%s: image master 3 bus overflow\n",
522:        pr_err_ratelimited("%s: image master 4 bus overflow\n",
527:        pr_err_ratelimited("%s: image master 5 bus overflow\n",
532:        pr_err_ratelimited("%s: image master 6 bus overflow\n",

  增大VFE时钟可防止溢出发生。要更改VFE时钟,需打Vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensor_libs/xxxx/ xxxx_lib.c文并编辑 op_pixel_clk 参数。

  选择正确的 VFE 时钟非常重要。VFE 时钟频率应足够高以匹配传感器输出端的数据速率(即传感器输出帧 x 帧/s),否则可能会引起 ISPIF 溢出。不过也不应设置过高的频率。设置过高的 VFE 时钟频率会导致两类问题:
1. 由于可能填充内部 VFE 输出缓存(也称为统一缓存),总线溢出的几率增大。
2. 如果 VFE 时钟频率较高,会导致功耗增大。


A. 检查与 VFE 总线溢出相关的总线时钟

  当过多的 VFE 数据流量以超过可用总线带宽的速率产生时,会导致 VFE 总线溢出错误。解决该问题的一种可行方法是检查能否通过设置更高的总线时钟频率来增加总线带宽。例如在 MSM8916 芯片组中,VFE 生成处理后的输出帧到系统 NoC (SNoC) 总线。数据流随后被转发到总线集成内存控制器 (BIMC) 总线,暂时保存在 DDR 内存中。VFE 生成的数据流将在这两条总线形成的路径上运行。因此,SNoC 和 BMIC 总线都必须进行检查。adb shell 脚本每隔一秒会转储 SNoC 和 BIMC 时钟频率。

#adb shell "while true; do cat /d/clk/snoc_clk/measure; cat /d/clk/bimc_clk/measure; echo '-----'; sleep 1; done"

200001391
748805675
-----


B. 将时钟总线设为最大频率

  VFE 总线溢出分类的第一步是检查能否通过设置更高总线时钟频率来增加可用总线带宽。增加总线带宽后,查看 VFE 总线溢出问题是否得以解决。

adb root
adb shell sleep 1
adb shell mount -t debugfs none /d
adb shell echo "22 > /d/msm-bus-dbg/shell-client/mas"
adb shell echo "512 > /d/msm-bus-dbg/shell-client/slv"
adb shell echo 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值