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 采集板固件升级方法:

  1. 确保所有外部系统电源已关闭(AGX Orin™套件电源和GMSL板电源)

  2. 将FG96-8CH GMSL扩展板J509和 AGX Orin™ J509连接器进行连接

  3. 将GMSL相机通过FAKRA连接线 接到任意FAKRA接口连接器

  4. 将J1接入12V~24V直流电源,通过外部为GMSL相机供电

  5. 打开电源,等待系统启动,并参考Readme 进行软件固件的升级操作(将Image和dtb更新的/boot)

  6. 固件升级完成后,Reboot重启或断电重启机器

  7. 重启后可通过如下方式查看软件的一些信息

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