7.11. mgb4 驅動程式¶
- 版權所有 © 2023 - 2025 Digiteq Automotive
作者:Martin Tůma <martin.tuma@digiteqautomotive.com>
這是 Digiteq Automotive FrameGrabber 4 的 v4l2 裝置驅動程式,它是一塊 PCIe 卡,能夠捕獲和生成汽車行業中使用的 FPD-Link III 和 GMSL2/3 影片流。
7.11.1. sysfs 介面¶
mgb4 驅動程式提供了一個 sysfs 介面,用於配置與影片流相關的引數(其中一些引數必須在開啟 v4l2 裝置之前正確設定)並獲取影片裝置/流狀態。
有兩種型別的引數 - 全域性/PCI 卡相關引數,位於 /sys/class/video4linux/videoX/device 下,以及模組特定引數,位於 /sys/class/video4linux/videoX 下。
7.11.1.1. 全域性(PCI 卡)引數¶
- module_type (R)
模組型別。
0 - 無模組存在1 - FPDL32 - GMSL(一個序列器,兩個菊花鏈式解串器)3 - GMSL(一個序列器,兩個解串器)4 - GMSL(兩個帶兩個菊花鏈輸出的解串器)- module_version (R)
模組版本號。如果缺少模組,則為零。
- fw_type (R)
韌體型別。
1 - FPDL32 - GMSL- fw_version (R)
韌體版本號。
- serial_number (R)
卡序列號。格式為
PRODUCT-REVISION-SERIES-SERIAL
其中每個元件都是一個 8 位數字。
7.11.1.2. 通用 FPDL3/GMSL 輸入引數¶
- input_id (R)
輸入編號 ID,從零開始。
- oldi_lane_width (RW)
解串器輸出通道數。
0 - 單通道1 - 雙通道(預設)- color_mapping (RW)
訊號中傳入位到畫素顏色位的對映。
0 - OLDI/JEIDA1 - SPWG/VESA(預設)- link_status (R)
影片連結狀態。如果連結已鎖定,則晶片已正確連線並在相同的速度和協議下進行通訊。 連結可以在沒有活動影片流的情況下被鎖定。
值為 0 等同於 V4L2 VIDIOC_ENUMINPUT 狀態位的 V4L2_IN_ST_NO_SYNC 標誌。
0 - 未鎖定1 - 已鎖定- stream_status (R)
影片流狀態。 如果連結已鎖定,輸入畫素時鐘正在執行並且 DE 訊號正在移動,則檢測到流。
值為 0 等同於 V4L2 VIDIOC_ENUMINPUT 狀態位的 V4L2_IN_ST_NO_SIGNAL 標誌。
0 - 未檢測到1 - 已檢測到- video_width (R)
影片流寬度。 這是硬體檢測到的實際寬度。
該值與 VIDIOC_QUERY_DV_TIMINGS 在 v4l2_bt_timings 結構的 width 欄位中返回的值相同。
- video_height (R)
影片流高度。 這是硬體檢測到的實際高度。
該值與 VIDIOC_QUERY_DV_TIMINGS 在 v4l2_bt_timings 結構的 height 欄位中返回的值相同。
- vsync_status (R)
影片格式檢測器檢測到的 VSYNC 脈衝型別。
該值等同於 VIDIOC_QUERY_DV_TIMINGS 在 v4l2_bt_timings 結構的 polarities 欄位中返回的標誌。
0 - 低電平有效1 - 高電平有效2 - 不可用- hsync_status (R)
影片格式檢測器檢測到的 HSYNC 脈衝型別。
該值等同於 VIDIOC_QUERY_DV_TIMINGS 在 v4l2_bt_timings 結構的 polarities 欄位中返回的標誌。
0 - 低電平有效1 - 高電平有效2 - 不可用- vsync_gap_length (RW)
如果傳入的影片訊號不包含同步 VSYNC 和 HSYNC 脈衝,則必須在 FPGA 內部生成這些脈衝才能實現正確的幀排序。 該值指示生成內部 VSYNC 脈衝需要多少“空”畫素(取消宣告資料使能訊號的畫素)。
- hsync_gap_length (RW)
如果傳入的影片訊號不包含同步 VSYNC 和 HSYNC 脈衝,則必須在 FPGA 內部生成這些脈衝才能實現正確的幀排序。 該值指示生成內部 HSYNC 脈衝需要多少“空”畫素(取消宣告資料使能訊號的畫素)。 該值必須大於 1 且小於 vsync_gap_length。
- pclk_frequency (R)
輸入畫素時鐘頻率,單位為 kHz。
該值與 VIDIOC_QUERY_DV_TIMINGS 在 v4l2_bt_timings 結構的 pixelclock 欄位中返回的值相同。
注意:必須先正確設定 frequency_range 引數,才能在此處獲得有效頻率。
- hsync_width (R)
HSYNC 訊號的寬度,以 PCLK 時鐘週期為單位。
該值與 VIDIOC_QUERY_DV_TIMINGS 在 v4l2_bt_timings 結構的 hsync 欄位中返回的值相同。
- vsync_width (R)
VSYNC 訊號的寬度,以 PCLK 時鐘週期為單位。
該值與 VIDIOC_QUERY_DV_TIMINGS 在 v4l2_bt_timings 結構的 vsync 欄位中返回的值相同。
- hback_porch (R)
取消宣告 HSYNC 訊號與影片行中的第一個有效畫素(以 DE=1 標記)之間的 PCLK 脈衝數。
該值與 VIDIOC_QUERY_DV_TIMINGS 在 v4l2_bt_timings 結構的 hbackporch 欄位中返回的值相同。
- hfront_porch (R)
影片行中的最後一個有效畫素(以 DE=1 標記)結束與宣告 HSYNC 訊號之間的 PCLK 脈衝數。
該值與 VIDIOC_QUERY_DV_TIMINGS 在 v4l2_bt_timings 結構的 hfrontporch 欄位中返回的值相同。
- vback_porch (R)
取消宣告 VSYNC 訊號與具有第一個有效畫素的影片行(以 DE=1 標記)之間的影片行數。
該值與 VIDIOC_QUERY_DV_TIMINGS 在 v4l2_bt_timings 結構的 vbackporch 欄位中返回的值相同。
- vfront_porch (R)
最後一個有效畫素行(以 DE=1 標記)的末尾與宣告 VSYNC 訊號之間的影片行數。
該值與 VIDIOC_QUERY_DV_TIMINGS 在 v4l2_bt_timings 結構的 vfrontporch 欄位中返回的值相同。
- frequency_range (RW)
OLDI 輸入時鐘發生器的 PLL 頻率範圍。 PLL 頻率來自畫素時鐘頻率 (PCLK),如果 oldi_lane_width 設定為“single”,則等於 PCLK,如果 oldi_lane_width 設定為“dual”,則等於 PCLK/2。
0 - PLL < 50MHz(預設)1 - PLL >= 50MHz注意:當輸入 v4l2 裝置開啟時,無法更改此引數。
7.11.1.3. 通用 FPDL3/GMSL 輸出引數¶
- output_id (R)
輸出編號 ID,從零開始。
- video_source (RW)
輸出影片源。 如果設定為 0 或 1,則源是相應的卡輸入,並且 v4l2 輸出裝置被停用。 如果設定為 2 或 3,則源是相應的 v4l2 影片輸出裝置。 預設值為相應的 v4l2 輸出,即 OUT1 為 2,OUT2 為 3。
0 - 輸入 01 - 輸入 12 - v4l2 輸出 03 - v4l2 輸出 1注意:在開啟任何輸入/輸出 v4l2 裝置時,無法更改此引數。
- display_width (RW)
顯示寬度。 沒有連線顯示器的自動檢測,因此必須在開始流式傳輸之前設定正確的值。 預設寬度為 1280。
注意:當輸出 v4l2 裝置開啟時,無法更改此引數。
- display_height (RW)
顯示高度。 沒有連線顯示器的自動檢測,因此必須在開始流式傳輸之前設定正確的值。 預設高度為 640。
注意:當輸出 v4l2 裝置開啟時,無法更改此引數。
- frame_rate (RW)
輸出影片訊號幀速率限制,以每秒幀數為單位。 由於輸出畫素時鐘步進有限,因此卡無法始終生成與連線顯示器所需的完美匹配的幀速率。 使用此引數可以透過“削弱”訊號來限制幀速率,以便線條不相等(最後一條線的前後沿不同),但該訊號看起來像是具有連線顯示器所需的精確幀速率。 預設幀速率限制為 60Hz。
- hsync_polarity (RW)
HSYNC 訊號極性。
0 - 低電平有效(預設)1 - 高電平有效- vsync_polarity (RW)
VSYNC 訊號極性。
0 - 低電平有效(預設)1 - 高電平有效- de_polarity (RW)
DE 訊號極性。
0 - 低電平有效1 - 高電平有效(預設)- pclk_frequency (RW)
輸出畫素時鐘頻率。 允許的值介於 25000-190000 (kHz) 之間,並且兩個連續的允許頻率之間存在非線性步進。 驅動程式找到最接近給定值的允許頻率並設定它。 讀取此屬性時,您會獲得驅動程式設定的精確頻率。 預設頻率為 61150kHz。
注意:當輸出 v4l2 裝置開啟時,無法更改此引數。
- hsync_width (RW)
HSYNC 訊號的寬度,以畫素為單位。 預設值為 40。
- vsync_width (RW)
VSYNC 訊號的寬度,以影片行為單位。 預設值為 20。
- hback_porch (RW)
取消宣告 HSYNC 訊號與影片行中的第一個有效畫素(以 DE=1 標記)之間的 PCLK 脈衝數。 預設值為 50。
- hfront_porch (RW)
影片行中的最後一個有效畫素(以 DE=1 標記)結束與宣告 HSYNC 訊號之間的 PCLK 脈衝數。 預設值為 50。
- vback_porch (RW)
取消宣告 VSYNC 訊號與具有第一個有效畫素的影片行(以 DE=1 標記)之間的影片行數。 預設值為 31。
- vfront_porch (RW)
最後一個有效畫素行(以 DE=1 標記)的末尾與宣告 VSYNC 訊號之間的影片行數。 預設值為 30。
7.11.1.4. FPDL3 特定輸入引數¶
- fpdl3_input_width (RW)
解串器輸入線路數。
0 - 自動(預設)1 - 單路2 - 雙路
7.11.1.5. FPDL3 特定輸出引數¶
- fpdl3_output_width (RW)
序列器輸出線路數。
0 - 自動(預設)1 - 單路2 - 雙路
7.11.1.6. GMSL 特定輸入引數¶
- gmsl_mode (RW)
GMSL 速度模式。
0 - 12Gb/s(預設)1 - 6Gb/s2 - 3Gb/s3 - 1.5Gb/s- gmsl_stream_id (RW)
GMSL 多流包含最多四個影片流。 此引數選擇影片輸入捕獲哪個流。 該值是流的從零開始的索引。 預設流 ID 為 0。
注意:當輸入 v4l2 裝置開啟時,無法更改此引數。
- gmsl_fec (RW)
GMSL 前向糾錯 (FEC)。
0 - 停用1 - 啟用(預設)
7.11.2. MTD 分割槽¶
- mgb4 驅動程式建立一個帶有兩個分割槽的 MTD 裝置
mgb4-fw.X - FPGA 韌體。
mgb4-data.X - 工廠設定,例如卡序列號。
附加到分割槽名稱的 X 表示卡號。 根據 CONFIG_MTD_PARTITIONED_MASTER 核心配置,您可能還在系統中使用一個名為 mgb4-flash 的第三個分割槽。 此分割槽表示整個未分割槽的卡的 FLASH 儲存器,不應隨意使用它...
7.11.3. IIO(觸發器)¶
mgb4 驅動程式建立一個工業 I/O (IIO) 裝置,該裝置提供觸發器和訊號電平狀態功能。 以下掃描元素可用
- activity:
觸發電平和掛起狀態。
位 1 - 觸發器 1 掛起位 2 - 觸發器 2 掛起位 5 - 觸發器 1 電平位 6 - 觸發器 2 電平- timestamp:
觸發事件時間戳。
iio 裝置可以在“raw”模式下執行,您可以使用 sysfs 訪問來獲取訊號電平(活動位 5 和 6),或者在觸發的緩衝模式下執行。 在觸發的緩衝模式下,您可以使用 /dev 中的 iio 裝置來跟蹤訊號電平變化(活動位 1 和 2)。 如果您啟用時間戳,您還將獲得可以與影片幀匹配的精確觸發事件時間(每個 mgb4 影片幀都有一個具有相同時鐘源的時間戳)。
注意:雖然活動樣本始終包含所有狀態位,但在 raw 模式下獲取掛起位或在觸發的緩衝模式下獲取電平位是沒有意義的 - 在這種情況下,這些值不代表有效資料。