7.7. i.MX7 影片捕獲驅動程式

7.7.1. 介紹

與 i.MX5/6 系列相反,i.MX7 不包含影像處理單元 (IPU);因此,執行捕獲幀的操作或操縱的能力的功能較少。

對於影像捕獲,i.MX7 有三個單元:- CMOS 感測器介面 (CSI) - 影片多路複用器 - MIPI CSI-2 接收器

MIPI Camera Input ---> MIPI CSI-2 --- > |\
                                        | \
                                        |  \
                                        | M |
                                        | U | ------>  CSI ---> Capture
                                        | X |
                                        |  /
Parallel Camera Input ----------------> | /
                                        |/

有關更多資訊,請參閱 i.MX7 參考手冊的最新版本 [1]

7.7.2. 實體

7.7.3. imx-mipi-csi2

這是 MIPI CSI-2 接收器實體。它有一個接收來自 MIPI CSI-2 攝像頭感測器的畫素資料的接收器焊盤。它有一個源焊盤,對應於虛擬通道 0。該模組符合以前版本的 Samsung D-phy,並支援兩個 D-PHY Rx 資料通道。

7.7.4. csi-mux

這是影片多路複用器。它有兩個接收器焊盤,可以從帶有並行介面的攝像頭感測器或來自 MIPI CSI-2 虛擬通道 0 的感測器中選擇。它有一個連線到 CSI 的單個源焊盤。

7.7.5. csi

CSI 使晶片能夠直接連線到外部 CMOS 影像感測器。 CSI 可以直接與並行和 MIPI CSI-2 匯流排介面。它具有 256 x 64 FIFO 來儲存接收到的影像畫素資料和嵌入式 DMA 控制器,以透過 AHB 匯流排傳輸來自 FIFO 的資料。

此實體有一個接收來自 csi-mux 實體的接收器焊盤和一個將影片幀直接路由到記憶體緩衝區的單個源焊盤。此焊盤被路由到捕獲裝置節點。

7.7.6. 使用說明

為了幫助配置以及向後相容僅從影片裝置節點訪問控制元件的 V4L2 應用程式,捕獲裝置介面從當前管道中的活動實體繼承控制元件,因此控制元件可以直接從子裝置或從活動捕獲裝置介面訪問。例如,感測器控制元件可以從感測器子裝置或從活動捕獲裝置獲得。

7.7.7. 帶有 OV2680 的 Warp7

在此平臺上,OV2680 MIPI CSI-2 模組連線到內部 MIPI CSI-2 接收器。以下示例配置了一個影片捕獲管道,輸出為 800x600,BGGR 10 位拜耳格式

# Setup links
media-ctl -l "'ov2680 1-0036':0 -> 'imx7-mipi-csis.0':0[1]"
media-ctl -l "'imx7-mipi-csis.0':1 -> 'csi-mux':1[1]"
media-ctl -l "'csi-mux':2 -> 'csi':0[1]"
media-ctl -l "'csi':1 -> 'csi capture':0[1]"

# Configure pads for pipeline
media-ctl -V "'ov2680 1-0036':0 [fmt:SBGGR10_1X10/800x600 field:none]"
media-ctl -V "'csi-mux':1 [fmt:SBGGR10_1X10/800x600 field:none]"
media-ctl -V "'csi-mux':2 [fmt:SBGGR10_1X10/800x600 field:none]"
media-ctl -V "'imx7-mipi-csis.0':0 [fmt:SBGGR10_1X10/800x600 field:none]"
media-ctl -V "'csi':0 [fmt:SBGGR10_1X10/800x600 field:none]"

之後可以開始流式傳輸。 v4l2-ctl 工具可用於選擇感測器支援的任何解析度。

# media-ctl -p
Media controller API version 5.2.0

Media device information
------------------------
driver          imx7-csi
model           imx-media
serial
bus info
hw revision     0x0
driver version  5.2.0

Device topology
- entity 1: csi (2 pads, 2 links)
            type V4L2 subdev subtype Unknown flags 0
            device node name /dev/v4l-subdev0
        pad0: Sink
                [fmt:SBGGR10_1X10/800x600 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
                <- "csi-mux":2 [ENABLED]
        pad1: Source
                [fmt:SBGGR10_1X10/800x600 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
                -> "csi capture":0 [ENABLED]

- entity 4: csi capture (1 pad, 1 link)
            type Node subtype V4L flags 0
            device node name /dev/video0
        pad0: Sink
                <- "csi":1 [ENABLED]

- entity 10: csi-mux (3 pads, 2 links)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev1
        pad0: Sink
                [fmt:Y8_1X8/1x1 field:none]
        pad1: Sink
               [fmt:SBGGR10_1X10/800x600 field:none]
                <- "imx7-mipi-csis.0":1 [ENABLED]
        pad2: Source
                [fmt:SBGGR10_1X10/800x600 field:none]
                -> "csi":0 [ENABLED]

- entity 14: imx7-mipi-csis.0 (2 pads, 2 links)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev2
        pad0: Sink
                [fmt:SBGGR10_1X10/800x600 field:none]
                <- "ov2680 1-0036":0 [ENABLED]
        pad1: Source
                [fmt:SBGGR10_1X10/800x600 field:none]
                -> "csi-mux":1 [ENABLED]

- entity 17: ov2680 1-0036 (1 pad, 1 link)
             type V4L2 subdev subtype Sensor flags 0
             device node name /dev/v4l-subdev3
        pad0: Source
                [fmt:SBGGR10_1X10/800x600@1/30 field:none colorspace:srgb]
                -> "imx7-mipi-csis.0":0 [ENABLED]

7.7.8. 帶有 OV5640 的 i.MX6ULL-EVK

在此平臺上,並行 OV5640 感測器連線到 CSI 埠。以下示例配置了一個影片捕獲管道,輸出為 640x480 和 UYVY8_2X8 格式

# Setup links
media-ctl -l "'ov5640 1-003c':0 -> 'csi':0[1]"
media-ctl -l "'csi':1 -> 'csi capture':0[1]"

# Configure pads for pipeline
media-ctl -v -V "'ov5640 1-003c':0 [fmt:UYVY8_2X8/640x480 field:none]"

之後可以開始流式傳輸

gst-launch-1.0 -v v4l2src device=/dev/video1 ! video/x-raw,format=UYVY,width=640,height=480 ! v4l2convert ! fbdevsink
# media-ctl -p
Media controller API version 5.14.0

Media device information
------------------------
driver          imx7-csi
model           imx-media
serial
bus info
hw revision     0x0
driver version  5.14.0

Device topology
- entity 1: csi (2 pads, 2 links)
            type V4L2 subdev subtype Unknown flags 0
            device node name /dev/v4l-subdev0
        pad0: Sink
                [fmt:UYVY8_2X8/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
                <- "ov5640 1-003c":0 [ENABLED,IMMUTABLE]
        pad1: Source
                [fmt:UYVY8_2X8/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
                -> "csi capture":0 [ENABLED,IMMUTABLE]

- entity 4: csi capture (1 pad, 1 link)
            type Node subtype V4L flags 0
            device node name /dev/video1
        pad0: Sink
                <- "csi":1 [ENABLED,IMMUTABLE]

- entity 10: ov5640 1-003c (1 pad, 1 link)
             type V4L2 subdev subtype Sensor flags 0
             device node name /dev/v4l-subdev1
        pad0: Source
                [fmt:UYVY8_2X8/640x480@1/30 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range]
                -> "csi":0 [ENABLED,IMMUTABLE]

7.7.9. 參考