SPRADH2A February   2024  – November 2024 AM62A3 , AM62A3-Q1 , AM62A7 , AM62A7-Q1 , AM62P , AM62P-Q1 , DS90UB953A-Q1 , DS90UB960-Q1 , TDES960 , TSER953

 

  1.   1
  2.   Abstract
  3.   Trademarks
  4. 1Introduction
  5. 2Connecting Multiple CSI-2 Cameras to the SoC
    1. 2.1 CSI-2 Aggregator Using SerDes
    2. 2.2 CSI-2 Aggregator without Using SerDes
    3. 2.3 Supported Camera Data Throughput
  6. 3Enabling Multiple Cameras in Software
    1. 3.1 Camera Subsystem Software Architecture
    2. 3.2 Image Pipeline Software Architecture
  7. 4Reference Design
    1. 4.1 Supported Cameras
    2. 4.2 Setting up Four IMX219 Cameras
    3. 4.3 Configuring Cameras and CSI-2 RX Interface
    4. 4.4 Streaming from Four Cameras
      1. 4.4.1 Streaming Camera Data to Display
      2. 4.4.2 Streaming Camera Data through Ethernet
      3. 4.4.3 Storing Camera Data to Files
    5. 4.5 Multicamera Deep Learning Inference
      1. 4.5.1 Model Selection
      2. 4.5.2 Pipeline Setup
  8. 5Performance Analysis
  9. 6Summary
  10. 7References
  11. 8Revision History

Configuring Cameras and CSI-2 RX Interface

The V3Link board is supported in the Processor SDK Linux for AM62A. To enable 4x IMX219 cameras, use the following dtbo files in the overlay at /run/media/BOOT-mmcblk1p1/uEnv.txt:

k3-am62x-sk-csi2-v3link-fusion.dtbo  
k3-v3link-imx219-0-0.dtbo  
k3-v3link-imx219-0-1.dtbo  
k3-v3link-imx219-0-2.dtbo  
k3-v3link-imx219-0-3.dtbo

To configure the cameras and CSI-2 Rx interface, run script /opt/edgeai-gst-apps/scripts/setup_cameras_v3link.sh. The result of running this script are shown below:

root@am62axx-evm:/opt/edgeai-gst-apps# ./scripts/setup_cameras_v3link.sh
IMX219 Camera 0 detected
    device = /dev/video-imx219-cam0
    name = imx219
    format = [fmt:SRGGB8_1X8/1920x1080 field: none]
    subdev_id = /dev/v4l-imx219-subdev0
    isp_required = yes
    ldc_required = yes
IMX219 Camera 1 detected
    device = /dev/video-imx219-cam1
    name = imx219
    format = [fmt:SRGGB8_1X8/1920x1080 field: none]
    subdev_id = /dev/v4l-imx219-subdev1
    isp_required = yes
    ldc_required = yes
IMX219 Camera 2 detected
    device = /dev/video-imx219-cam2
    name = imx219
    format = [fmt:SRGGB8_1X8/1920x1080 field: none]
    subdev_id = /dev/v4l-imx219-subdev2
    isp_required = yes
    ldc_required = yes
IMX219 Camera 3 detected
    device = /dev/video-imx219-cam3
    name = imx219
    format = [fmt:SRGGB8_1X8/1920x1080 field: none]
    subdev_id = /dev/v4l-imx219-subdev3
    isp_required = yes
    ldc_required = yes

After running this script, the camera format, the CSI-2 RX interface format, and the routes from each camera to the corresponding video node are configured properly. A total of 6 video nodes are created. Each video node corresponds to a DMA context allocated by the CSI2 RX driver. Out of the 6 video nodes, 4 are used for the 4 IMX219 cameras, as shown in the media pipe topology below:

root@am62axx-evm:~# media-ctl -p

Device topology
- entity 1: 30102000.ticsi2rx (7 pads, 7 links, 4 routes)
            type V4L2 subdev subtype Unknown flags 0
            device node name /dev/v4l-subdev0
        routes:
                0/0 -> 1/0 [ACTIVE]
                0/1 -> 2/0 [ACTIVE]
                0/2 -> 3/0 [ACTIVE]
                0/3 -> 4/0 [ACTIVE]
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                [stream:1 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                [stream:2 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                [stream:3 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                <- "cdns_csi2rx.30101000.csi-bridge":1 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                -> "30102000.ticsi2rx context 0":0 [ENABLED,IMMUTABLE]
        pad2: Source
                [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                -> "30102000.ticsi2rx context 1":0 [ENABLED,IMMUTABLE]
        pad3: Source
                [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                -> "30102000.ticsi2rx context 2":0 [ENABLED,IMMUTABLE]
        pad4: Source
                [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                -> "30102000.ticsi2rx context 3":0 [ENABLED,IMMUTABLE]
        pad5: Source
                -> "30102000.ticsi2rx context 4":0 [ENABLED,IMMUTABLE]
        pad6: Source
                -> "30102000.ticsi2rx context 5":0 [ENABLED,IMMUTABLE]

As shown above, media entity 30102000.ticsi2rx has 6 source pads, but only the first 4 are used, each for one IMX219. The media pipe topology can also be illustrated graphically. Run the following command to generate a dot file:

root@am62axx-evm:~# media-ctl --print-dot > media.dot

Then run the command below on a Linux host PC to generate a png file:

$ dot -Tpng media-top.dot -o media-top.png

Figure 4-2 is a picture generated using the commands given above. The components in the software architecture of Figure 3-1 can be found in this graph.

 Media Topology of a Multi-Camera SystemFigure 4-2 Media Topology of a Multi-Camera System