7.9. Intel Image Processing Unit 6 (IPU6) 輸入系統驅動¶
版權所有 © 2023--2024 Intel Corporation
7.9.1. 簡介¶
本文件介紹位於 drivers/media/pci/intel/ipu6 下的 Intel IPU6(第六代影像處理單元)輸入系統(MIPI CSI2 接收器)驅動程式。
Intel IPU6 可以在某些 Intel SoC 中找到,但並非所有 SKU 都有
Tiger Lake
Jasper Lake
Alder Lake
Raptor Lake
Meteor Lake
Intel IPU6 由兩個元件組成 - 輸入系統 (ISYS) 和處理系統 (PSYS)。
輸入系統主要用作 MIPI CSI-2 接收器,接收和處理來自感測器的影像資料,並將幀輸出到記憶體。
有兩個驅動模組 - intel-ipu6 和 intel-ipu6-isys。 intel-ipu6 是一個 IPU6 通用驅動程式,用於執行 PCI 配置、韌體載入和解析、韌體身份驗證、DMA 對映和 IPU-MMU(內部記憶體對映單元)配置。 intel_ipu6_isys 實現了 V4L2、媒體控制器和 V4L2 子裝置介面。 IPU6 ISYS 驅動程式支援透過 V4L2 子裝置感測器驅動程式連線到 IPU6 ISYS 的攝像頭感測器。
注意
有關 IPU6 硬體的更多資訊,請參見 Intel IPU6 驅動。
7.9.2. 輸入系統驅動¶
輸入系統驅動程式主要配置 CSI-2 D-PHY,構建韌體流配置,向韌體傳送命令,從硬體和韌體獲取響應,然後將緩衝區返回給使用者。 ISYS 表示為多個 V4L2 子裝置以及影片節點。
支援多個流的 IPU6 ISYS 媒體圖¶
該圖已使用以下命令生成
fdp -Gsplines=true -Tsvg < dot > dot.svg
7.9.2.1. 使用 IPU6 ISYS 捕獲幀¶
IPU6 ISYS 用於從連線到 CSI2 埠的攝像頭感測器捕獲幀。 下表列出了 ISYS 支援的輸入格式
IPU6 ISYS 支援的輸入格式 |
|---|
RGB565, RGB888 |
UYVY8, YUYV8 |
RAW8, RAW10, RAW12 |
7.9.2.1.1. 示例¶
這是一個在 Dell XPS 9315 筆記型電腦上進行 IPU6 ISYS 原始捕獲的示例。 在此機器上,ov01a10 感測器連線到 IPU ISYS CSI-2 埠 2,它可以生成 sBGGR10 格式、解析度為 1280x800 的影像。
使用媒體控制器 API,我們可以透過 media-ctl [1] 和 yavta [2] 配置 ov01a10 感測器,以將幀傳輸到 IPU6 ISYS。
# Example 1 capture frame from ov01a10 camera sensor
# This example assumes /dev/media0 as the IPU ISYS media device
export MDEV=/dev/media0
# Establish the link for the media devices using media-ctl
media-ctl -d $MDEV -l "\"ov01a10 3-0036\":0 -> \"Intel IPU6 CSI2 2\":0[1]"
# Set the format for the media devices
media-ctl -d $MDEV -V "ov01a10:0 [fmt:SBGGR10/1280x800]"
media-ctl -d $MDEV -V "Intel IPU6 CSI2 2:0 [fmt:SBGGR10/1280x800]"
media-ctl -d $MDEV -V "Intel IPU6 CSI2 2:1 [fmt:SBGGR10/1280x800]"
一旦媒體管道配置完成,就可以使用 yavta 工具設定所需的感測器特定設定(例如曝光和增益設定)。
例如
# and that ov01a10 sensor is connected to i2c bus 3 with address 0x36
export SDEV=$(media-ctl -d $MDEV -e "ov01a10 3-0036")
yavta -w 0x009e0903 400 $SDEV
yavta -w 0x009e0913 1000 $SDEV
yavta -w 0x009e0911 2000 $SDEV
一旦設定了所需的感測器設定,就可以如下進行幀捕獲。
例如
yavta --data-prefix -u -c10 -n5 -I -s 1280x800 --file=/tmp/frame-#.bin \
-f SBGGR10 $(media-ctl -d $MDEV -e "Intel IPU6 ISYS Capture 0")
使用上述命令,以 1280x800 解析度、sBGGR10 格式捕獲 10 幀。 捕獲的幀作為 /tmp/frame-#.bin 檔案提供。
這是另一個來自 Lenovo X1 Yoga 筆記型電腦上的攝像頭感測器 ov2740 的 IPU6 ISYS RAW 和元資料捕獲示例。
media-ctl -l "\"ov2740 14-0036\":0 -> \"Intel IPU6 CSI2 1\":0[1]"
media-ctl -l "\"Intel IPU6 CSI2 1\":1 -> \"Intel IPU6 ISYS Capture 0\":0[1]"
media-ctl -l "\"Intel IPU6 CSI2 1\":2 -> \"Intel IPU6 ISYS Capture 1\":0[1]"
# set routing
media-ctl -R "\"Intel IPU6 CSI2 1\" [0/0->1/0[1],0/1->2/1[1]]"
media-ctl -V "\"Intel IPU6 CSI2 1\":0/0 [fmt:SGRBG10/1932x1092]"
media-ctl -V "\"Intel IPU6 CSI2 1\":0/1 [fmt:GENERIC_8/97x1]"
media-ctl -V "\"Intel IPU6 CSI2 1\":1/0 [fmt:SGRBG10/1932x1092]"
media-ctl -V "\"Intel IPU6 CSI2 1\":2/1 [fmt:GENERIC_8/97x1]"
CAPTURE_DEV=$(media-ctl -e "Intel IPU6 ISYS Capture 0")
./yavta --data-prefix -c100 -n5 -I -s1932x1092 --file=/tmp/frame-#.bin \
-f SGRBG10 ${CAPTURE_DEV}
CAPTURE_META=$(media-ctl -e "Intel IPU6 ISYS Capture 1")
./yavta --data-prefix -c100 -n5 -I -s97x1 -B meta-capture \
--file=/tmp/meta-#.bin -f GENERIC_8 ${CAPTURE_META}