IO-H4xGMSL2
隐溪科技研发的IO-H4xGMSL2功能板实现GMSL2摄像头的接入。
H4xGMSL2分为两个版本:
v1.0 默认3G版本:解串芯片MAX96724R
v1.1 默认6G版本:解串芯片MAX96724
功能说明
完整的GMSL2视觉感知系统由三个核心组件构成:
GMSL2摄像头:sensor芯片,串行器
IO-H4xGMSL2转接板:解串器
NVIDIA Orin计算平台:CSI视频流输入处理
关键特性
参数 |
规格 |
说明 |
|---|---|---|
解串芯片 |
MAX96724/R |
6Gbps/3Gbps型号 |
支持通道数 |
4路独立输入 |
可同时连接4个GMSL2摄像头 |
最高分辨率 |
4K@30fps |
(每路)支持更高帧率的低分辨率模式 |
GMSL接口 |
GMSL2 6/3Gbps |
输入标准GMSL2信号,速率3Gbps |
CSI接口 |
MIPI CSI-2 |
输出标准CSI-2信号,兼容主流处理器 |
电源 |
12V DC, 2A |
可为连接的摄像头提供电源(PoC) |
反向通道 |
I2C通信、GPIO控制 |
支持摄像头配置和控制 |
帧同步 |
支持帧同步In和Out |
支持接收外部帧同步信号和对外输出 |
尺寸 |
30*52mm |
基于minipcie自定义信号线 |
使用说明
GMSL2摄像头连接
在使用GMSL2功能前,请确保GMSL2功能板和GMSL2线束已经完成连接
注意
系统在启动过程中从1开始检测GMSL2摄像头是否在线,第一个在位的GMSL2摄像头创建设备为
dev/video0不支持热拔插摄像头,每次GMSL2摄像头的接线调整,需在系统断电的情况下操作
GMSL2接头位号和链路对应表
对应的GMSL Link为:
接线位号 |
GMSL链路 |
|---|---|
1 |
Link A |
2 |
Link B |
3 |
Link C |
4 |
Link D |
GMSL2线束规格
TE Mate-AX四腔母头转Fakra Z直母,同轴线FDC402,默认1米
具体应用中若不需要同时连接使用4个GMSL2摄像头,可以灵活的去掉连接线,如下图的只使用1根连接线到摄像头:
GMSL2摄像头
IO-H4xGMSL2支持基于GMSL2的摄像头,由于GMSL2摄像头型号繁多,具体兼容性测试情况请同我司联系确认。
标配为ISX031-GMSL2-6G摄像头,规格如下:
参数 |
规格 |
|---|---|
Sensor |
ISX031 |
ISP |
集成 |
Image Size |
1/2.4″ |
Output Pixels |
1920*1536@30fps |
Pixel Size |
3.0um |
Frame Rate |
30fps |
HDR Range |
120dB |
Output data |
YUV422 8 bit (UYVY) |
Serializer |
MAX9295A(3Gbps mode) |
Camera Interface |
GMSL2 |
Power Supply |
8V~16V DC |
Current |
<200mA |
Connector |
FAKRA male type Z |
Operating temp. range |
-40~+85°C |
Waterproof |
IP69 |
Dimensions |
30mm*30mm |
Weight |
<100g |
整体连接图示例
系统启动后进行jetson-io配置
注意
jetson-io只需要做一次配置。
sudo /opt/nvidia/jetson-io/jetson-io.py
选择H4xGMSL2对应的设备树,如下图所示(以3G摄像头支持)为例:






按照系统提示保留配置后系统重启
检查摄像头设备创建
小技巧
IO-H4xGMSL2支持4路摄像头,套件中的minifakra的四合一线束,支持4路GMSL2摄像头的同时接入
如果只接入了一路摄像头,该摄像头为
/dev/video0如果接入了两路摄像头,则摄像头设备依次为
/dev/video0 /dev/video1,依次类推。
root@tegra-ubuntu:~# ls /dev/video*
/dev/video0 /dev/video1 /dev/video2 /dev/video3
显示4路摄像头设备已经创建。
检查V4L2层工作状态
安装v4l2
sudo apt update
sudo apt install v4l-utils
查看所有V4l设备
root@tegra-ubuntu:~# v4l2-ctl --list-devices
NVIDIA Tegra Video Input Device (platform:tegra-camrtc-ca):
/dev/media0
vi-output, nv_cam 15-001a (platform:tegra-capture-vi:2):
/dev/video0
/dev/video1
/dev/video2
/dev/video3
确定摄像头设备的解串器和串行器
小技巧
IO-H4xGMSL2支持4路摄像头,套件中的minifakra的四合一线束,如果连接了多个摄像头,需要通过如下命令确定当前解串/串行器通道和摄像头的对应关系。
root@tegra-ubuntu:/home/nvidia# media-ctl -p | grep des
<- "des_1_ch_0":0 [ENABLED]
<- "des_1_ch_1":0 [ENABLED]
<- "des_1_ch_2":0 [ENABLED]
<- "des_1_ch_3":0 [ENABLED]
- entity 25: des_1_ch_3 (2 pads, 2 links)
- entity 28: des_1_ch_2 (2 pads, 2 links)
- entity 31: des_1_ch_1 (2 pads, 2 links)
- entity 34: des_1_ch_0 (2 pads, 2 links)
-> "des_1_ch_0":1 [ENABLED]
-> "des_1_ch_1":1 [ENABLED]
-> "des_1_ch_2":1 [ENABLED]
-> "des_1_ch_3":1 [ENABLED]
root@tegra-ubuntu:/home/nvidia# media-ctl -p | grep ser_
<- "ser_7_ch_0":0 [ENABLED]
<- "ser_6_ch_0":0 [ENABLED]
<- "ser_5_ch_0":0 [ENABLED]
<- "ser_4_ch_0":0 [ENABLED]
- entity 37: ser_4_ch_0 (2 pads, 2 links)
- entity 40: ser_5_ch_0 (2 pads, 2 links)
- entity 43: ser_6_ch_0 (2 pads, 2 links)
- entity 46: ser_7_ch_0 (2 pads, 2 links)
-> "ser_4_ch_0":1 [ENABLED]
-> "ser_5_ch_0":1 [ENABLED]
-> "ser_6_ch_0":1 [ENABLED]
-> "ser_7_ch_0":1 [ENABLED]
面板GMSL2接口设置摄像头采集格式(A口/J20/CAM0)
面板的GMSL2接口位置
设置4路解串器
media-ctl -d /dev/media0 --set-v4l2 '"des_0_ch_0":0[fmt:YUYV8_1X16/1920x1536]'
media-ctl -d /dev/media0 --set-v4l2 '"des_0_ch_1":0[fmt:YUYV8_1X16/1920x1536]'
media-ctl -d /dev/media0 --set-v4l2 '"des_0_ch_2":0[fmt:YUYV8_1X16/1920x1536]'
media-ctl -d /dev/media0 --set-v4l2 '"des_0_ch_3":0[fmt:YUYV8_1X16/1920x1536]'
设置4路串行器
media-ctl -d /dev/media0 --set-v4l2 '"ser_0_ch_0":1[fmt:YUYV8_1X16/1920x1536]'
media-ctl -d /dev/media0 --set-v4l2 '"ser_1_ch_0":1[fmt:YUYV8_1X16/1920x1536]'
media-ctl -d /dev/media0 --set-v4l2 '"ser_2_ch_0":1[fmt:YUYV8_1X16/1920x1536]'
media-ctl -d /dev/media0 --set-v4l2 '"ser_3_ch_0":1[fmt:YUYV8_1X16/1920x1536]'
面板GMSL1接口设置摄像头采集格式(C口/J21/CAM1)
面板的GMSL2接口位置
设置4路解串器
media-ctl -d /dev/media0 --set-v4l2 '"des_1_ch_0":0[fmt:YUYV8_1X16/1920x1536]'
media-ctl -d /dev/media0 --set-v4l2 '"des_1_ch_1":0[fmt:YUYV8_1X16/1920x1536]'
media-ctl -d /dev/media0 --set-v4l2 '"des_1_ch_2":0[fmt:YUYV8_1X16/1920x1536]'
media-ctl -d /dev/media0 --set-v4l2 '"des_1_ch_3":0[fmt:YUYV8_1X16/1920x1536]'
设置4路串行器
media-ctl -d /dev/media0 --set-v4l2 '"ser_4_ch_0":1[fmt:YUYV8_1X16/1920x1536]'
media-ctl -d /dev/media0 --set-v4l2 '"ser_5_ch_0":1[fmt:YUYV8_1X16/1920x1536]'
media-ctl -d /dev/media0 --set-v4l2 '"ser_6_ch_0":1[fmt:YUYV8_1X16/1920x1536]'
media-ctl -d /dev/media0 --set-v4l2 '"ser_7_ch_0":1[fmt:YUYV8_1X16/1920x1536]'
打开摄像头进行视频采集
打开摄像头video0
gst-launch-1.0 v4l2src device=/dev/video0 ! \
'video/x-raw,width=1920,height=1536,framerate=30/1,format=UYVY' ! \
videoconvert ! xvimagesink -ev
打开摄像头video1
gst-launch-1.0 v4l2src device=/dev/video1 ! \
'video/x-raw,width=1920,height=1536,framerate=30/1,format=UYVY' ! \
videoconvert ! xvimagesink -ev
打开摄像头video2
gst-launch-1.0 v4l2src device=/dev/video2 ! \
'video/x-raw,width=1920,height=1536,framerate=30/1,format=UYVY' ! \
videoconvert ! xvimagesink -ev
打开摄像头video3
gst-launch-1.0 v4l2src device=/dev/video3 ! \
'video/x-raw,width=1920,height=1536,framerate=30/1,format=UYVY' ! \
videoconvert ! xvimagesink -ev
常见问题
Q1 H4xGMSL2转接板的安装槽位
MI-12x4的AI载板支持安装两个H4xGMSL2转接板的安装,同时支持最多8路摄像头。
Q2 v4l2常见命令的使用
### 安装v4l2命令
sudo apt update
sudo apt install v4l-utils
### 查看所有V4l设备
v4l2-ctl --list-devices
### 查看指定V4l设备
v4l2-ctl -d /dev/video0 --all
### 查看设备的v4l规范支持情况
v4l2-compliance -d /dev/video0
#### 查看所有支持的格式详情
v4l2-ctl -d /dev/video0 --list-formats
v4l2-ctl -d /dev/video0 --list-formats-ext
### 查看设备当前video的格式
v4l2-ctl -d /dev/video0 --get-fmt-video
### 测试视频流(注意如下命令中的参数需要根据实际使用进行调整)
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=RG12
v4l2-ctl --stream-mmap --stream-count=1 --stream-to=test_frame.raw
Q3 H4xGMSL2支持3G和6G的解串器芯片识别
H4xGMSL2分为两个版本:
v1.0 默认3G版本:解串芯片MAX96724R (软硬件默认设置)
v1.1 默认6G版本:解串芯片MAX96724
如何判断当前设备中内置的H4xGMSL2单板上的芯片是MAX96724R,还是MAX96724
sudo i2ctransfer -f -y 2 w2@0x27 0x00 0x0D r1
0xa2: MAX96724
0xa4: MAX96724R
注意
由于摄像头型号繁多,需与我司联系确认是否支持以及如何支持
## H4xGMSL2对应的设备树为:
tegra234-p3767-camera-p3768-h4xgmsl2-AC-6G-c1202.dtbo
## 将6G设备树拷贝的系统的/boot目录下
root@tegra-ubuntu:/boot# pwd
/boot
root@tegra-ubuntu:/boot# ll | grep AC
-rw-r--r-- 1 root root 68487 Nov 27 04:49 tegra234-p3767-camera-p3768-h4xgmsl2-AC-3G-c1202.dtbo
-rw-r--r-- 1 nvidia nvidia 68487 Nov 27 05:43 tegra234-p3767-camera-p3768-h4xgmsl2-AC-6G-c1202.dtbo
## Jetson-IO配置公司6Gpbs设备树
sudo /opt/nvidia/jetson-io/jetson-io.py

## 重启设备,摄像头已连接到单板
后续以摄像头连接到GMSL-LINK-D进行说明
## 确保当前显示终端为0
nvidia@tegra-ubuntu:~$ echo $DISPLAY
:0
## 检查V4l2设备创建
root@tegra-ubuntu:/home/nvidia# v4l2-ctl --list-devices
NVIDIA Tegra Video Input Device (platform:tegra-camrtc-ca):
/dev/media0
vi-output, nv_cam 16-001a (platform:tegra-capture-vi:2):
/dev/video0
## 确定摄像头设备的解串器和串行器的关系
root@tegra-ubuntu:/home/nvidia# media-ctl -p | grep des
<- "des_1_ch_3":0 [ENABLED]
- entity 25: des_1_ch_3 (2 pads, 2 links)
- entity 28: des_1_ch_2 (2 pads, 0 link)
- entity 31: des_1_ch_1 (2 pads, 0 link)
- entity 34: des_1_ch_0 (2 pads, 0 link)
-> "des_1_ch_3":1 [ENABLED]
root@tegra-ubuntu:/home/nvidia# media-ctl -p | grep ser_
<- "ser_7_ch_0":0 [ENABLED]
- entity 37: ser_7_ch_0 (2 pads, 2 links)
-> "ser_7_ch_0":1 [ENABLED]
## 串行器的格式设置动态下发(必须)
media-ctl -d /dev/media0 --set-v4l2 '"ser_7_ch_0":1[fmt:YUYV8_1X16/1920x1080]'
## 解串器的格式设置动态下发(必须)
media-ctl -d /dev/media0 --set-v4l2 '"des_1_ch_3":0[fmt:YUYV8_1X16/1920x1080]'
## 设置摄摄像头的解析模式(必须)
注意需要选择模式1
v4l2-ctl -V --set-fmt-video=width=1920,height=1080 -d /dev/video0
## 开启摄像头
gst-launch-1.0 v4l2src device=/dev/video0 ! \
'video/x-raw,width=1920,height=1080,framerate=30/1,format=UYVY' ! \
videoconvert ! xvimagesink -ev
Q4 如何配置支持摄像头的其他模式
小技巧
GMSL2摄像头往往可以支持多种像素模式以适配不同的镜头,需要正确的设置摄像头的采集格式和工作模式
以ISX031-GMSL2-3G-H60摄像头为例,该摄像头像素格式为1920*1080,通过GMSL-LinkD链路连接到H4xGMSL2转接板
## 确保当前显示终端为0
nvidia@tegra-ubuntu:~$ echo $DISPLAY
:0
## 检查V4l2设备创建
root@tegra-ubuntu:/home/nvidia# v4l2-ctl --list-devices
NVIDIA Tegra Video Input Device (platform:tegra-camrtc-ca):
/dev/media0
vi-output, nv_cam 16-001a (platform:tegra-capture-vi:2):
/dev/video0
## 确定摄像头设备的解串器和串行器的关系
root@tegra-ubuntu:/home/nvidia# media-ctl -p | grep des
<- "des_1_ch_3":0 [ENABLED]
- entity 25: des_1_ch_3 (2 pads, 2 links)
- entity 28: des_1_ch_2 (2 pads, 0 link)
- entity 31: des_1_ch_1 (2 pads, 0 link)
- entity 34: des_1_ch_0 (2 pads, 0 link)
-> "des_1_ch_3":1 [ENABLED]
root@tegra-ubuntu:/home/nvidia# media-ctl -p | grep ser_
<- "ser_7_ch_0":0 [ENABLED]
- entity 37: ser_7_ch_0 (2 pads, 2 links)
-> "ser_7_ch_0":1 [ENABLED]
## 串行器的格式设置动态下发(必须)
media-ctl -d /dev/media0 --set-v4l2 '"ser_7_ch_0":1[fmt:YUYV8_1X16/1920x1080]'
## 解串器的格式设置动态下发(必须)
media-ctl -d /dev/media0 --set-v4l2 '"des_1_ch_3":0[fmt:YUYV8_1X16/1920x1080]'
## 设置摄摄像头的解析模式(必须,设置模式为1)
v4l2-ctl -V --set-fmt-video=width=1920,height=1080 -d /dev/video0
## 开启摄像头
gst-launch-1.0 v4l2src device=/dev/video0 ! \
'video/x-raw,width=1920,height=1080,framerate=30/1,format=UYVY' ! \
videoconvert ! xvimagesink -ev
Q5 GMSL2摄像头显示画面卡顿
通过gst-launch-1.0命令打开摄像头后,如果出现如下提示,且显示的视频画面卡顿:
Additional debug info:,./libs/gst/base/gstbasesink.c(3143):
gst base_sink_is too_late (): /Gstpipeline:pipeline0/GstXvImagesink:xvimagesinko:
There may be a timestamping problem, or this computer is too slow.
请检查设备的当前系统时间是否准确:
一般通过联网对时后,视频画面能够正常恢复刷新率;
如果设备内置RTC电池,请检查RTC电池连接是否可靠,以及RTC电池是否有效;