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
目录
- 一句话结论
- 资料与目录
- 聊天记录技术摘要
- 硬件工作流(手册 + 原理图)
- 软件总体架构
- 从驱动注册到释放(逐步)
- 如何根据原理图与手册配置设备树
- 如何根据手册配置驱动代码
- 当前代码实际配置(以仓库为准)
/dev/media被占用 / 卡住的原因与处理- 常用调试命令
- 检查清单与踩坑
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 需示波器/厂商再确认后再改。