核心说明:RK3588 原生 MIPI CSI 通道数量有限;PCIe 扩展是用来外挂采集卡 / PCIe Switch / USB3 PCIe 卡 / FPGA 采集子卡,实现超过原生 MIPI 路数的多路相机,不能直接用 PCIe 总线跑 MIPI CSI 信号。RK3588 PCIe 3.0 支持 x4 / 2×2 / 4×1 模式,带宽是整个方案的瓶颈优先评估项。

适用场景:工业多目、环视、机器人、多相机同步采集、NVR、视觉检测。
1. 方案选型
1.1 三种主流 PCIe 扩展多路相机架构对比
方案 | 方案 A:PCIe 转 USB3.0 + UVC 相机 | 方案 B:FPGA PCIe 采集子卡(MIPI/HDMI) | 方案 C:PCIe Switch 多卡级联 |
优点 | 开发最简单、驱动成熟、即插即用、成本低 | 多路 MIPI 原生采集、硬件同步、可硬件触发、低延迟、带宽可控 | 灵活扩展多张采集卡,单卡负载低 |
缺点 | USB 带宽瓶颈、多机同步差、CPU 占用偏高、4K 多路易丢帧 | 需 FPGA 固件开发、驱动开发、成本高、周期长 | Switch 引入转发延迟,多路高码流时带宽争抢明显 |
推荐规模 | ≤4 路 1080P@30fps | 4~16 路,工业检测 / 机器人多目 / 全局快门相机 | 多张采集卡并行,需独立 PCIe 链路 |
同步能力 | 软同步,±ms 级 | 硬件 Trigger,微秒级 | 取决于单卡方案本身 |
方案选型建议:工业场景首选方案 B(FPGA PCIe 采集子卡);快速原型或低成本场景用方案 A;需要多卡并行扩展时用方案 C。
1.2 与原生 MIPI 的区别
RK3588 原生最多 6 路 MIPI CSI(2×DCPHY + 4×2L DPHY),由 VICAP / RKCIF + ISP 链路处理。
PCIe 扩展相机不走 RK 内置 VICAP/ISP,图像数据送到 DDR 后,再送 RK3588 ISP 做 3A、降噪、HDR,或者直接 NPU 推理。
2. 硬件资源与带宽计算
2.1 RK3588 PCIe 带宽参数
PCIe 3.0 x4 理论带宽:8 GB/s
实际有效 DMA 带宽:约 5~6 GB/s
支持链路模式:x4 / 2×2 / 4×1 可配置
2.2 带宽计算公式
单路带宽 = 分辨率 × fps × bit 深度 × 通道数
示例:
1080P (1920×1080)、RGB888、30fps:1920×1080×3×30 ≈ 186 MB/s
4K@30 YUV12:≈ 370 MB/s
2.3 设计约束
1. 多路相机总带宽不能超过 PCIe 链路有效带宽,预留 20% 余量
2. FPGA 采集卡优先 YUV420 / YUV422 传输,减少 PCIe 吞吐
3. USB 方案严禁单 Hub 挂多路 4K 相机
4. PCIe 扩展板 + 多路相机功耗大,需独立供电,避免掉帧、相机复位
3. 硬件设计与接线要点
3.1 PCIe 链路配置
单卡大数据:x4 模式
多卡并行:拆成 2×2 或 4×1,给不同采集卡分配独立链路
在设备树中配置 pcie 的 link-width
3.2 同步方案(多路相机最关键)
同步方式 | 实现方式 | 精度与适用场景 |
软同步 | 软件时间戳对齐,UVC 相机常用 | ±ms 级,适合低要求场景 |
硬件同步 | FPGA 采集卡输出全局 Trigger 信号给所有 Sensor,硬件同帧 | 微秒级,工业多目必须选这个 |
时钟同步 | 采集卡提供外部 MCLK 给 Sensor | 避免 Sensor 晶振漂移 |
1.3 信号完整性
PCIe 走线阻抗控制 100Ω 差分
MIPI 采集子卡的 CSI 信号严格等长
长距离 MIPI 建议带 Retimer
扩展板外设:I2C/SPI 用于 Sensor 寄存器配置、GPIO 做相机复位、触发输出
2. 内核与设备树(DTS)开发
2.1 内核配置
CONFIG_PCIE_ROCKCHIP=y
CONFIG_PCIE_DMA=y
CONFIG_V4L2=y
CONFIG_VIDEO_DEV=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_DMA_ENGINE=y
# 自定义 FPGA 采集卡:打开 PCIe 字符设备、DMA 缓冲区支持
CONFIG_UIO=y
CONFIG_UIO_PCI_GENERIC=y
注意区分:原生 MIPI 是 rkcif / dw-mipi-csi2rx 驱动;PCIe 采集卡是自定义 V4L2 子设备驱动或者 UIO DMA 驱动,不属于 RK 内置 VICAP 链路。
1.4 PCIe DTS 关键片段
pcie@3c000000 {
status = "okay";
rockchip,pcie-link-width = <4>; /* 2/4 可选 */
max-link-speed = <3>; /* PCIe 3.0 */
};
1.5 链路验证
# 查看 PCIe 设备是否识别
lspci
# 查看链路协商速率、宽度
dmesg | grep pcie
排查:如果链路降到 Gen1 / x1,检查供电、走线、复位信号、设备树配置。
1.6 驱动开发两种路线
路线 1:标准 V4L2 采集驱动(推荐上层统一)
采集卡驱动注册 V4L2 subdev + video node,/dev/videoX,和原生 MIPI、UVC 相机使用同一套 GStreamer、OpenCV 接口。
数据流:Sensor → FPGA CSI 接收 → FPGA 帧缓存 → PCIe DMA → RK3588 DDR → V4L2 buffer → ISP/NPU/编码
路线 2:UIO + DMA(快速原型,适合 FPGA 调试)
不做完整 V4L2,用户态直接操作 PCIe BAR 寄存器,DMA 映射物理地址,适合前期验证;量产建议封装 V4L2。
注意:PCIe 扩展相机不自动走 RK 的 ISP;需要软件把图像 buffer 送入 rkisp 驱动的输入队列,才能调用硬件 3A、降噪、HDR。
2. 软件采集链路与测试工具
2.1 软件栈整体架构
Sensor → FPGA / PCIe 采集卡 → PCIe DMA → V4L2 / UVC → GStreamer / OpenCV / MIPI Camera HAL → RKISP → RKNN 推理 / VPU 编码
2.2 基础测试命令
1. 查看 PCIe 设备
lspci
dmesg | grep pcie
2. V4L2 设备枚举
v4l2-ctl --list-devices
v4l2-ctl -d /dev/video0 --list-formats
3. GStreamer 多路采集示例
gst-launch-1.0 v4l2src device=/dev/video0 \
! video/x-raw,width=1920,height=1080,framerate=30/1 \
! autovideosink
# 第一路
gst-launch-1.0 v4l2src device=/dev/video0 \
! video/x-raw ! mpph264enc ! h264parse \
! filesink location=cam0.h264 &
# 第二路
gst-launch-1.0 v4l2src device=/dev/video1 \
! video/x-raw ! mpph264enc ! h264parse \
! filesink location=cam1.h264 &
mpph264enc 是 RK 硬件编码器,多路并行编码优先使用 MPP,降低 CPU 负载。
1.6 同步采集软件层处理
硬件触发卡:每一帧携带 FPGA 打上的 64bit 硬件时间戳,应用层按时间戳对齐帧
UVC 软同步:clock_gettime 捕获帧到达时间,做帧插值对齐,适合低要求场景
2. 性能调优与瓶颈排查
2.1 Buffer 管理
使用 DMA-BUF,避免用户态拷贝
V4L2 采用 MMAP / USERPTR 模式,减少内存拷贝
多路采集禁止频繁 malloc / free
2.2 CPU 亲和性
采集线程绑定到大核 A76,编码 / 推理线程隔离,避免抢占:
taskset -c 4-7 ./multi_capture_app
1.6 带宽与丢帧定位
看 dmesg:DMA 超时、PCIe retry、buffer overflow
工具:自定义 DMA 计数、v4l2-ctl 统计丢帧计数
现象:单路正常、多路丢帧 → PCIe 带宽不足,降分辨率 / 帧率、改用 YUV 压缩格式
1.7 ISP 复用
RK3588 双 ISP,多路相机分时复用 ISP 或者部分走软件 ISP;多路 4K 同时 ISP 预处理压力很大,提前规划。
1.8 电源与复位
相机供电不稳会随机丢帧、I2C 寄存器读失败;扩展板增加独立电源使能、硬件复位电路。
2. 典型工程落地清单
阶段 | 工作项 |
需求评估 | 相机路数、分辨率、帧率、同步精度、曝光模式(全局 / 卷帘)、总带宽 |
硬件选型 | PCIe 卡类型(USB / FPGA 采集卡 / Switch)、供电、触发同步方案 |
SDK 基线 | 确认 RK SDK 版本(推荐最新 RK3588 Linux SDK,MPP、RKCIF、PCIe 驱动稳定) |
DTS & 内核 | PCIe 链路配置、DMA、V4L2 驱动适配 |
FPGA 固件 | CSI 接收、帧缓存、触发同步、PCIe DMA 控制器、寄存器接口 |
应用开发 | 多路采集、帧同步、时间戳、MPP 编码、RKNN 推理、存储 / 推流 |
压力测试 | 72h 长时间拷机、带宽压测、高低温、电源波动测试 |
2. 常见问题与 FAQ
Q1:能不能直接 PCIe 接 MIPI 摄像头?
A:不行。PCIe 和 MIPI CSI 协议完全不同;必须中间加 FPGA / 桥接采集卡做协议转换。
Q2:PCIe 扩展相机能不能用 rkcif 驱动?
A:不能。rkcif 是 RK 内置 MIPI CSI 接收器;PCIe 过来的图像是外部采集,走 V4L2 通用链路。
Q3:多路相机同步做不到怎么办?
A:放弃 USB 方案,改用带硬件 Trigger 的 FPGA PCIe 采集卡,硬件同步是唯一可靠方案。
Q4:lspci 识别到卡,但 video 节点出不来?
A:检查驱动 probe 是否成功、dts status 是否 okay、BAR 空间映射、I2C / Sensor 供电复位。
Q5:RK3588 PCIe 多卡,其中一张卡速率降速?
A:排查 PCIe 带宽分配、电源、走线,或者 Switch 的端口协商问题,逐张单独测试。
3. 扩展参考
原生 MIPI 多路:适合 ≤6 路,使用 RKCIF / VICAP + RK ISP,开发参考瑞芯官方 Camera 适配文档
NVR 录像:多路采集后送入 RK MPP 编码,再接入 rtsp / rtmp 推流
AI 推理:DMA-BUF 直接传给 RKNN,减少 CPU 图像拷贝,提升多路实时性
需求留言: