# 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. 重启后可通过如下方式查看软件的一些信息 ```shell 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 配置可参考如下 ```bash #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 = ; label = "cam0-pwdn", "cam1-pwdn", "cam2-pwdn", "cam3-pwdn"; }; cam-poc-high { gpio-hog; output-high; gpios = ; 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 = ; 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输出视频流,图像获取与显示使用方法如下: ```bash #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](https://gitee.com/fangzhutech/jetson_cam_app.git) 包含两个C++ 应用案例如下: camera_v4l2_cuda :CUDA SDK Demo通过CUDA运行效率高(需预装JetPack SDK)。 camera_v4l2_opencv:OpenCV SDK Demo 直接使用V4L2和OpenCV来获取摄像头图像。 ### V4L2常用命令 ```shell #查看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 | |