喜悦星宇 Liang Junxing

TWIN612 + NanoPC-T6 MIPI 接入完整说明

TWIN612G2 + NanoPC-T6(RK3588)MIPI 接入完整说明

文档目的:把「机芯手册 / MIPI 扩展板手册 / 主机原理图 / 现有内核代码 / 历史调试聊天」收成一份可回看的说明书。
代码树:/home/keqikeji/sd-fuse_rk35882/kernel-rk3588(友善 nanopi6-v6.1.y)
机芯手册:TWIN612 G2&TWIN412G2-用户手册V1.4-20250422.pdf
MIPI 板手册:/home/keqikeji/MIPI扩展板用户手册V2.6_20250427.pdf


目录

  1. 一句话结论
  2. 资料与目录
  3. 聊天记录技术摘要
  4. 硬件工作流(手册 + 原理图)
  5. 软件总体架构
  6. 从驱动注册到释放(逐步)
  7. 如何根据原理图与手册配置设备树
  8. 如何根据手册配置驱动代码
  9. 当前代码实际配置(以仓库为准)
  10. /dev/media 被占用 / 卡住的原因与处理
  11. 常用调试命令
  12. 检查清单与踩坑

1. 一句话结论

TWIN612G2 自己出 640×512 YUV422 → 厂商 MIPI 板打成 2-lane CSI → 接到 NanoPC CON9(CAM1)→ 内核用「假 IMX415」驱动把 Rockchip 采集链路拉起来 → 应用从 /dev/video* 取图。

  • 真机芯:不靠 I2C 配寄存器,靠 UART TTL 3.3V / 115200 控参数。
  • 假 IMX415:只为满足 RK3588 V4L2 / CSI / media graph 的 sensor 节点要求。
  • 仓库现状:bus_fmt=UYVY8_2X8,640×512,bpp=8,mipi_freq_idx=1 → link_freq≈297M(不是文档口头的 360M)。

2. 资料与目录

类型 路径 / 说明
内核 /home/keqikeji/sd-fuse_rk35882/kernel-rk3588
假 sensor 驱动 drivers/media/i2c/imx415.c(另有备份 imx415bak.c)
旁路试验驱动 drivers/media/i2c/imx378.c / imx378.c_back
设备树入口 arch/arm64/boot/dts/rockchip/rk3588-nanopi6-rev01.dts
CSI0 相机 DTSI arch/arm64/boot/dts/rockchip/rk3588-nanopi6-csi0-imx415s.dtsi
官方 imx415 DTSI rk3588-nanopi6-csi0-imx415.dtsi(rev01 已改 include 为 imx415s)
机芯手册 同目录 TWIN612 G2&TWIN412G2-用户手册V1.4-20250422.pdf
MIPI 扩展板手册 /home/keqikeji/MIPI扩展板用户手册V2.6_20250427.pdf
主机座子原理图 NanoPC 侧 CON9 = MIPI_CAM1、CON15 = MIPI_CAM2(30pin FPC 0.5mm)

对比干净树:/data1/kernel-rockchip、/data2/nanopc6_v6.1 的 imx415.c 无内容修改(仅权限脏);定制在 ~/sd-fuse_rk35882/kernel-rk3588。


3. 聊天记录技术摘要

以下为与厂商 / 同事 / 外援调试聊天的归纳(按问题域,不按时间流水账)。

3.1 机芯型号与接口

  • 确认机芯是 TWIN612(640×512),不是 TWIN1212(1280×1024)。
  • 机芯本体数字口:DVP/CMOS/USB/LVDS/BT656 等;接 RK3588 时用 MIPI 扩展板。
  • MIPI 扩展板:CSI 2-lane + 1 对时钟;把机芯 DVP/CMOS 转成 MIPI。
  • 客户自做小板:多数情况是 点对点延长,不做 2lane→4lane。

3.2 串口(控制面)

  • 机芯串口是 TTL 3.3V,不要用 RS232 电平移位硬怼。
  • 推荐 USB 转 TTL;TX/RX 勿反;与机芯 共地。
  • 波特率 115200。
  • 现象「发得出、收不到」:优先查接线、共地、电平、座子通断。
  • 厂商建议:先拆客户转接板,用厂商 USB3.0/上位机验证机芯本身;再查客户硬件。
  • 对外资料 UART(pin1/2)与 UART2(pin5/6)定义以手册/丝印为准。

3.3 视频参数(厂商多次确认后的口径)

项 厂商说法
分辨率 / 帧率 640×512 @ 50fps(单传 YUV422)
内容格式 YUV422,序列 UYVY,每像素 16bit
MIPI lane 2-lane
时钟 差分时钟约 360M,非连续(也出现过口头 200M)
DATA TYPE 常标 RAW8;payload 里是 YUV
I2C MIPI 口不需要上电 I2C 配置
字节视角 「按字节可看成 1280×512」——因每像素 16bit

说明:聊天前半曾混淆 1280×1024 / 720×576 / 是否带参数行;最终对齐为 612 + 单 YUV422 + 640×512。
「MIPI/LVDS 开关」对 twin 的 MIPI 出图基本无用(主要管 LVDS 时序)。

3.4 软件侧走过的弯路(聊天)

  • 借用 imx378 / imx415 驱动当壳;设备树仍挂 I2C 节点(架构需要)。
  • kernel 6.1:设备树冲突、错误驱动可导致 无法启动 或 media 卡死。
  • /dev/media0 被 gstreamer / gst-plugin-scanner / lightdm 占用 → media-ctl、v4l2-ctl 卡住。
  • 改驱动后出现过「改动未进镜像 / 拷贝错 kernel」;删 .o 强制重编才生效。
  • 格式试验过:UYVY / YUYV / GREY / RGGB / RAW8 / 1X8 / 1_5X8 / 1X16、bpp 8↔16、宽 640↔1280 等。
  • 能采到数据后,图像解读、算法、跟踪由应用侧继续;底层链路被认为基本打通。

3.5 与「当前仓库代码」的差异(重要)

聊天后期厂商强调 360M + RAW8 DT 语义;
当前落盘的 imx415.c 却是:UYVY + 640×512 + bpp=8 + link≈297M。
回看配置时以代码为准,360M 需示波器/厂商再确认后再改。