FG96-8CH 软件
节点映射
(单目RGB相机,双目如D457 参考D457页面)
| FAKRA接口 | 设备节点 |
|---|---|
| CAM0 | /dev/video0 |
| CAM1 | /dev/video1 |
| CAM2 | /dev/video2 |
| CAM3 | /dev/video3 |
| CAM4 | /dev/video4 |
| CAM5 | /dev/video5 |
| CAM6 | /dev/video6 |
| CAM7 | /dev/video7 |
固件升级
请先在NVIDIA Jetson® AGX Orin™模块上安装了正确的软件,通过升级BSP固件可支持不同相机。 GMSL1和GMSL2 相机需要使用适当的软件和固件配置才可以正常使用(对应固件需联系销售人员获取)。
FG96-8CH 采集板固件升级方法:
确保所有外部系统电源已关闭(AGX Orin™套件电源和GMSL板电源)
将FG96-8CH GMSL扩展板J509和 AGX Orin™ J509连接器进行连接
将GMSL相机通过FAKRA连接线 接到任意FAKRA接口连接器
将J1接入12V~24V直流电源,通过外部为GMSL相机供电
打开电源,等待系统启动,并参考Readme 进行软件固件的升级操作(将Image和dtb更新的/boot)
固件升级完成后,Reboot重启或断电重启机器
重启后可通过如下方式查看软件的一些信息
nvidia@nvidia-desktop:~$ sudo dmesg | grep connected
serdes 30-0048: /dev/video0 is connected!
serdes 30-0048: /dev/video1 is connected!
serdes 31-0048: /dev/video2 is connected!
serdes 31-0048: /dev/video3 is connected!
serdes 32-0048: /dev/video4 is connected!
serdes 32-0048: /dev/video5 is connected!
serdes 33-0048: /dev/video6 is connected!
serdes 33-0048: /dev/video7 is connected!
FG96-8CH客户可自行进行Serdes参数调试,相关参数配置可联系业务人员获取,软件开发可以参考BSP包自带的IMX390 Driver
DTSI 配置可参考如下
#define CAM0_PWDN TEGRA234_MAIN_GPIO(H, 6) //Pin93 --- UART4_CTS L49/397 - MAX9296_1 PWDN
#define CAM1_PWDN TEGRA234_MAIN_GPIO(H, 3) //Pin95 --- UART4_TX L5/394 - MAX9296_2 PWDN
#define CAM2_PWDN TEGRA234_MAIN_GPIO(AC, 0) //Pin90 --- GPIO15 F10/486 - MAX9296_3 PWDN
#define CAM3_PWDN TEGRA234_MAIN_GPIO(AC, 1) //Pin92 --- GPIO16 E9/487 - MAX9296_4 PWDN
#define CAM12V_POC TEGRA234_MAIN_GPIO(AC, 7) //Pin119 --- GPIO12 E10 CAM_VDD_SYS_EN/493 Low enable
#define CAM_SYNCALL TEGRA234_AON_GPIO(CC, 0) //E61/SPI2_CLK CAM_INT1/328 -- MAX9296x4 MFP6
#DTSI 配置MAX9296 PWDN、POC供电
gpio@2200000 {
cam-pwdn-high {
gpio-hog;
output-high;
gpios = <CAM0_PWDN 0 CAM1_PWDN 0
CAM2_PWDN 0 CAM3_PWDN 0>;
label = "cam0-pwdn", "cam1-pwdn",
"cam2-pwdn", "cam3-pwdn";
};
cam-poc-high {
gpio-hog;
output-high;
gpios = <CAM12V_POC 0>;
label = "cam12-poc";
};
};
#DTSI 配置相机
i2c@3180000 {
tca9546@70 {
compatible = "nxp,pca9546";
reg = <0x70>;
#address-cells = <1>;
#size-cells = <0>;
skip_mux_detect = "yes";
vcc-supply = <&p3737_vdd_1v8_sys>;
vcc-pullup-supply = <&battery_reg>;
force_bus_start = <CAMERA_I2C_MUX_BUS(0)>;
i2c@0 { //CSI0-1 4Lanes 或 配置为2Lanes
reg = <0>;
i2c-mux,deselect-on-exit;
#address-cells = <1>;
#size-cells = <0>;
serdes@48 {
compatible = "nvidia,serdes";
reg = <0x48>;
pwdn-gpios = <&tegra_main_gpio CAM0_PWDN GPIO_ACTIVE_HIGH>;
};
fzcam_a@2a {
/* Define any required hw resources needed by driver */
/* ie. clocks, io pins, power sources */
clocks = <&bpmp_clks TEGRA234_CLK_EXTPERIPH1>,
<&bpmp_clks TEGRA234_CLK_EXTPERIPH1>;
clock-names = "extperiph1", "pllp_grtba";
mclk = "extperiph1";
};
fzcam_b@2b {
/* Define any required hw resources needed by driver */
/* ie. clocks, io pins, power sources */
clocks = <&bpmp_clks TEGRA234_CLK_EXTPERIPH1>,
<&bpmp_clks TEGRA234_CLK_EXTPERIPH1>;
clock-names = "extperiph1", "pllp_grtba";
mclk = "extperiph1";
};
};
i2c@1 { //CSI2-3 4Lanes 或 配置为2Lanes
reg = <1>;
i2c-mux,deselect-on-exit;
#address-cells = <1>;
#size-cells = <0>;
serdes@48 {
compatible = "nvidia,serdes";
reg = <0x48>;
pwdn-gpios = <&tegra_main_gpio CAM1_PWDN GPIO_ACTIVE_HIGH>;
};
fzcam_a@2a {
/* Define any required hw resources needed by driver */
/* ie. clocks, io pins, power sources */
clocks = <&bpmp_clks TEGRA234_CLK_EXTPERIPH1>,
<&bpmp_clks TEGRA234_CLK_EXTPERIPH1>;
clock-names = "extperiph1", "pllp_grtba";
mclk = "extperiph1";
};
fzcam_b@2b {
/* Define any required hw resources needed by driver */
/* ie. clocks, io pins, power sources */
clocks = <&bpmp_clks TEGRA234_CLK_EXTPERIPH1>,
<&bpmp_clks TEGRA234_CLK_EXTPERIPH1>;
clock-names = "extperiph1", "pllp_grtba";
mclk = "extperiph1";
};
};
i2c@2 { //CSI4-5 4Lanes 或 配置为2Lanes
reg = <2>;
i2c-mux,deselect-on-exit;
#address-cells = <1>;
#size-cells = <0>;
serdes@48 {
compatible = "nvidia,serdes";
reg = <0x48>;
pwdn-gpios = <&tegra_main_gpio CAM2_PWDN GPIO_ACTIVE_HIGH>;
};
fzcam_a@2a {
/* Define any required hw resources needed by driver */
/* ie. clocks, io pins, power sources */
clocks = <&bpmp_clks TEGRA234_CLK_EXTPERIPH1>,
<&bpmp_clks TEGRA234_CLK_EXTPERIPH1>;
clock-names = "extperiph1", "pllp_grtba";
mclk = "extperiph1";
};
fzcam_b@2b {
/* Define any required hw resources needed by driver */
/* ie. clocks, io pins, power sources */
clocks = <&bpmp_clks TEGRA234_CLK_EXTPERIPH1>,
<&bpmp_clks TEGRA234_CLK_EXTPERIPH1>;
clock-names = "extperiph1", "pllp_grtba";
mclk = "extperiph1";
};
};
i2c@3 { //CSI6-7 4Lanes 或 配置为2Lanes
reg = <3>;
i2c-mux,deselect-on-exit;
#address-cells = <1>;
#size-cells = <0>;
serdes@48 {
compatible = "nvidia,serdes";
reg = <0x48>;
pwdn-gpios = <&tegra_main_gpio CAM3_PWDN GPIO_ACTIVE_HIGH>;
};
fzcam_a@2a {
/* Define any required hw resources needed by driver */
/* ie. clocks, io pins, power sources */
clocks = <&bpmp_clks TEGRA234_CLK_EXTPERIPH1>,
<&bpmp_clks TEGRA234_CLK_EXTPERIPH1>;
clock-names = "extperiph1", "pllp_grtba";
mclk = "extperiph1";
};
fzcam_b@2b {
/* Define any required hw resources needed by driver */
/* ie. clocks, io pins, power sources */
clocks = <&bpmp_clks TEGRA234_CLK_EXTPERIPH1>,
<&bpmp_clks TEGRA234_CLK_EXTPERIPH1>;
clock-names = "extperiph1", "pllp_grtba";
mclk = "extperiph1";
};
};
};
};
GMSL快速验证
设备支持使用Gstreamer输出视频流,图像获取与显示使用方法如下:
#8M相机:(3840x2160)
gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw, format=(string)UYVY, width=(int)3840, height=(int)2160" ! videoconvert ! fpsdisplaysink video-sink=xvimagesink sync=false
#5M相机:(2880x1860)
gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw, format=(string)UYVY, width=(int)2880, height=(int)1860" ! videoconvert ! fpsdisplaysink video-sink=xvimagesink sync=false
#2M 相机:(1920x1080)
gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw, format=(string)UYVY, width=(int)1920, height=(int)1080" ! fpsdisplaysink video-sink=xvimagesink sync=false
#1M相机:(1280x720)
gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw, format=(string)UYVY, width=(int)1280, height=(int)720" ! fpsdisplaysink video-sink=xvimagesink sync=false
#其他分辨率相机根据具体相机参数进行设置即可
Camera应用代码参考
jetson_cam_app 包含两个C++ 应用案例如下:
camera_v4l2_cuda :CUDA SDK Demo通过CUDA运行效率高(需预装JetPack SDK)。
camera_v4l2_opencv:OpenCV SDK Demo 直接使用V4L2和OpenCV来获取摄像头图像。
V4L2常用命令
#查看Camera设备列表
nvidia@nvidia-desktop:~$ v4l2-ctl --list-devices -d /dev/video0
NVIDIA Tegra Video Input Device (platform:tegra-camrtc-ca):
/dev/media0
vi-output, fzcam 9-001a (platform:tegra-capture-vi:0):
/dev/video0
/dev/video1
vi-output, fzcam 10-001c (platform:tegra-capture-vi:2):
/dev/video2
/dev/video3
#查看Camera输出格式
nvidia@nvidia-desktop:~/fz.wks$ v4l2-ctl --list-formats -d /dev/video0
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
[0]: 'UYVY' (UYVY 4:2:2)
[1]: 'NV16' (Y/CbCr 4:2:2)
[2]: 'UYVY' (UYVY 4:2:2)
#V4L2 捕获100帧以查看其输出是否可以正常
v4l2-ctl --set-fmt-video=width=3840,height=2160 --stream-mmap --stream-count=1000 -d /dev/videoX
nvidia@nvidia-desktop:~$ v4l2-ctl --set-fmt-video=width=3840,height=2160 --stream-mmap --stream-count=100 -d /dev/video0
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<
#其他V4L2 命令可参考
v4l2-ctl -d /dev/video0 --all
v4l2-compliance -d /dev/video0
FG96-8CH已验证兼容过的相机包括但不限于森云、猎豹、艾睿红外、丽景、Intel D457、Stereolabs ZEDX等,相机分辨率也可支持到从640x514到3840x2160(8M).
已验证过的相机(以下指YUV相机)包括但不限于
| 品牌 | Sensor型号(YUV) | 备注 |
|---|---|---|
| 奥比中光Orbbec | RGBD:G335Lg/G345Lg | |
| 竹影智能 | 3M/2M: ISX031[6G/3G] | |
| 8M: OX08B | ||
| DMS: OV2311 | ||
| 舜宇Sunny | 8M: OX08B40 | |
| 3M: ISX031 | ||
| 艾睿光电 | 红外: M6 | |
| 红外: Pilot640 | ||
| 红外: Pilot640 | ||
| 高德红外 | 红外: IR | |
| 森云智能 | 1M: AR0147/AR0144 | |
| OX01FC | ||
| 2M: AR0231 | ||
| OX03C | ||
| IMX390 | ||
| 3M: ISX031 | ||
| 5M: OX05B[OMS/DMS] | ||
| IMX490 | ||
| 8M: AR0820 | ||
| OX08BC | ||
| Intel英特尔 | RGBD: D457 | |
| Stereolabs | RGBD: ZED X/mini | |
| Leopard猎豹 | 5M: IMX490 | |
| 2M: ISX021 | ||
| 3M: ISX031 | ||
| 广州晶华精密 | 8M: OX08BC | |
| 2M: IMX390 | ||
| 1M: OX01FC | ||
| 沈阳丽景科技 | 2M: IMX390 | |
| 3M: ISX031 | ||
| 8M: OX08B | ||
| 经纬恒润 | DMS: OV2311 | |
| 辉创Whetron | 1M: OSX019 | |
| 德赛 | 1M: OX01FC | |
| OSX019 |