IMX93&IMX91在6.6.36版本下配置IMX296摄像头的问题
前言
我用的是6.6.36 2.10 版本的,新版本应该已经修复了这个问题。
国外客户适配 IMX296 (1-lane RAW10, 1188 Mbps) 出现问题的。
Camera: with the EVK device tree, the D-PHY receives our IMX296 (1-lane RAW10, 1188 Mbps) data with no errors (PKT_FATAL, CRC, ECC, sequence and boundary errors all 0). However, no pixels reach the ISI. The IPI FIFO overflows (INT_ST_IPI_FATAL = 0x2a), the gasket pixel counter (MEDIAMIX 0x40) stays 0, and the ISI never receives a frame.
To rule out the camera, we enabled the CSI controller's internal pattern generator (PPI_PG, status = active) with RAW10 and RGB888. The result is the same: no errors, but the gasket pixel counter stays 0 and no frames arrive. So the data stops between the CSI IPI and the ISI, inside the i.MX93.
解决
drivers/staging/media/imx/dwc-mipi-csi2.c:
dwc_mipi_csi2_param_init()(只在 probe() 里调用一次,第 1408 行)把 IPI 的 data type 写死了:
// dwc-mipi-csi2.c:1017-1031
} else { /* 非 PG 分支,真实 sensor == 永远走这里 */
ipi_cfg->data_type = DT_YUV422_8; /* 0x1E, 写死 */
ipi_cfg->hline_time = 0x500;
ipi_cfg->vactive_lines = 0x320; /* 1280x800,也是写死的 */
...
}
dwc_mipi_csi2_set_fmt() 协商完 sensor 格式后既不保存 csi2h->format、也不同步 ipi_cfg。
IPI 只处理与自己 DT 匹配的包,所以 RAW10 像素在 IPI 就停下了,gasket 一个像素都收不到(计数器 0x40 恒为 0),IPI FIFO 反向溢出(0x2a = FIFO_OVERFLOW|FIFO_NOT_EMPTY|IF_FIFO_OVERFLOW),ISI 拿不到帧。D-PHY/Packet 层完全正常,所以 CRC/ECC/SEQ/BNDRY 全 0。
之前适配的OV5640 走 UYVY8_2X8 格式,正好等于写死的值。所以是正常的。
社区有对应的patch:
https://lkml.iu.edu/hypermail/linux/kernel/2605.0/07263.html
https://lore-kernel.gnuweeb.org/linux-devicetree/20250827-isi_imx93-v1-4-83e6b4b50c4d@nxp.com/t/
有说将内核映像升级到 6.1.55 版解决了我的问题。
额外
PPI 码型发生器(PPI Pattern Generator,PPI_PG)是 Synopsys DWC MIPI CSI-2 Host 控制器内部自带的一个"假摄像头":
它在控制器内部直接合成 CSI-2 数据包流,不需要 sensor、不需要 MIPI 排线、也不需要 D-PHY 真的收到 HS 信号。它是用来把"sensor/线缆/PHY 的问题"和"SoC 内部通路的问题"分开的。
IMX296 ─ D-PHY(lane RX) ─┬─► 包处理器 / data-ID 过滤 ─► IPI ─► 像素总线 ─► gasket ─► ISI
│ (0x10/0x14, 0x30/0x34) (0x88) (MEDIAMIX)
PPI_PG 注入点
(寄存器 0x60~0x70)
PPI = PHY Protocol Interface,是 D-PHY 和控制器之间的并行接口。
PG 就挂在这个边界上,冒充 D-PHY 输出,所以它绕过 sensor + 线缆 + lane 接收器,但完整地走过:包处理 → data-ID 过滤 → IPI → gasket → ISI。
本文来自博客园,作者:杨旭0324,转载请注明原文链接:https://www.cnblogs.com/allalonewithyou/p/23249103,个人邮箱:yaonie4444@foxmail.com

浙公网安备 33010602011771号