跳至主要内容

MIPI CSI-2 攝影機

camera.mipi 提供者會回報 Modalix ISP 後方的影像感測器。 它會在 media 與 video4linux uevent 發生時重新掃描。 探索功能以唯讀方式開啟裝置節點,且只發出查詢用的 ioctl; 它從不設定格式或連結,也從不串流。

simaai-v4l2-vid 驅動程式的每個 /dev/mediaN 都會以 MEDIA_IOC_G_TOPOLOGY 讀取,其圖中的每個 MEDIA_ENT_F_CAM_SENSOR 實體即為 一台攝影機。其他驅動程式的媒體裝置(例如 uvcvideo)會被忽略。

識別​

id 為 camera:<sensor entity name>,例如 camera:imx477 5-001a: 感測器驅動程式、I2C 匯流排與位址。 libcamera 使用相同的名稱,因此這也是 CameraInput 接受的名稱。 名稱相同的兩個感測器(例如位於兩個媒體裝置上)會共用同一個 id, 因此掃描會改為失敗,並回報一個同時列出兩個媒體裝置的錯誤。

欄位​

欄位出現時機意義
type、id一律camera,以及上述的識別碼
backend一律mipi
model名稱中含有時實體名稱的第一個單字,例如 imx477
availability一律{"state": "unknown", "reason": ...}:媒體控制器沒有可唯讀查詢的擁有權狀態
camera_name一律感測器實體名稱,用來傳給 CameraInput
media_device一律/dev/mediaN(僅用於路由;不作為識別)
bus_info有回報時來自 MEDIA_IOC_DEVICE_INFO 的媒體裝置匯流排,例如 platform:csi2video@1
isp一律{"state": "available", "device_path", "device_paths"},或 {"state": "unavailable", "reason"} 並搭配 modes: []
csi_receiver已連結時感測器來源 pad 所連結的實體,例如 csidev-40c3000.csi
sensor_timing可讀取時pixel_rate(像素/秒)、hblank_min、vblank_min、width、height,讀取自感測器的 /dev/v4l-subdevN
max_fps有 sensor_timing 時pixel_rate / ((width + hblank_min) * (height + vblank_min)),取到小數點後兩位

sensor_timing 來自感測器的子裝置介面(透過 /sys/dev/char/<major>:<minor> 命名):所連結來源 pad 的作用中格式 (VIDIOC_SUBDEV_G_FMT)、目前的 V4L2_CID_PIXEL_RATE,以及 V4L2_CID_HBLANK 與 V4L2_CID_VBLANK 的最小值。只要其中任一項缺少, 就會省略此欄位。

ISP 輸出節點是名稱為 isp_v4l2-vid-cap-out、card 為 arm-isp-out 的 video4linux 項目。若有多個, 只會回報它們共同支援的模式。

模式​

模式是 ISP 的輸出格式與離散尺寸,也就是 CameraInput 能擷取的內容。每個模式都有 format(FourCC)、width、height 與 isp_output: true。只有當 ISP 回報該尺寸的影格間隔時,模式才會帶有 frame_intervals, 其格式與 USB 攝影機相同。 DevKit 的 ISP 不會回報任何間隔,因此其模式沒有影格率;max_fps 與 sensor_timing 描述的是感測器的上限。

錯誤​

代碼發生時機
io.permission_denied無法開啟媒體裝置(EACCES、EPERM),或無法列出 /dev(EACCES)
io.open媒體裝置的任何其他開啟或查詢失敗
peripherals.discovery_failed未命名的感測器實體,或兩個名稱相同的感測器(其 id 會衝突)

掃描途中消失的裝置會被略過。ISP 失敗絕不會使掃描失敗; 而是會使 isp 變為無法使用,並附上原因。

範例​

Modalix DevKit 上的 IMX477,模式已節錄(共九個:三種格式、三種尺寸)。 圖與 ISP 尺寸抄錄自 DevKit; 感測器時序數值與 DevKit 回報的相同, 但僅由測試涵蓋。

{"type": "camera", "id": "camera:imx477 5-001a", "model": "imx477",
"availability": {"state": "unknown", "reason": "The media controller does not expose a reliable read-only ownership state; discovery does not acquire, configure, or stream from the camera."},
"modes": [{"format": "AR24", "width": 1920, "height": 1080, "isp_output": true},
{"format": "AR24", "width": 2048, "height": 1080, "isp_output": true}],
"backend": "mipi", "camera_name": "imx477 5-001a", "media_device": "/dev/media0",
"bus_info": "platform:csi2video@1",
"isp": {"state": "available", "device_path": "/dev/video1", "device_paths": ["/dev/video1"]},
"csi_receiver": "csidev-40c3000.csi",
"sensor_timing": {"pixel_rate": 840000000, "hblank_min": 9332, "vblank_min": 48,
"width": 1920, "height": 1080},
"max_fps": 66.18}