IO-H4xGMSL2

隐溪科技研发的IO-H4xGMSL2功能板实现GMSL2摄像头的接入。

H4xGMSL2分为两个版本:

  • v1.0 默认3G版本:解串芯片MAX96724R

  • v1.1 默认6G版本:解串芯片MAX96724

功能说明

完整的GMSL2视觉感知系统由三个核心组件构成:

  • GMSL2摄像头:sensor芯片,串行器

  • IO-H4xGMSL2转接板:解串器

  • NVIDIA Orin计算平台:CSI视频流输入处理

io-h4xgmsl2

关键特性

参数

规格

说明

解串芯片

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米

io-h4xgmsl2-matex-4

具体应用中若不需要同时连接使用4个GMSL2摄像头,可以灵活的去掉连接线,如下图的只使用1根连接线到摄像头:

io-h4xgmsl2-matex-1

  • GMSL2摄像头

IO-H4xGMSL2支持基于GMSL2的摄像头,由于GMSL2摄像头型号繁多,具体兼容性测试情况请同我司联系确认。

isx031-3G

标配为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

  • 整体连接图示例

gmsl-total

系统启动后进行jetson-io配置

注意

  • jetson-io只需要做一次配置。

sudo /opt/nvidia/jetson-io/jetson-io.py

选择H4xGMSL2对应的设备树,如下图所示(以3G摄像头支持)为例:

jetson-io

jetson-io

jetson-io

jetson-io

jetson-io

jetson-io

按照系统提示保留配置后系统重启

检查摄像头设备创建

小技巧

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接口位置

io-h4xgmsl2-C

  • 设置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接口位置

io-h4xgmsl2-A

  • 设置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

jetson-io

## 重启设备,摄像头已连接到单板
后续以摄像头连接到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电池是否有效;