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 - FPDL3
2 - GMSL(一個序列器,兩個菊花鏈式解串器)
3 - GMSL(一個序列器,兩個解串器)
4 - GMSL(兩個帶兩個菊花鏈輸出的解串器)
module_version (R)

模組版本號。如果缺少模組,則為零。

fw_type (R)

韌體型別。

1 - FPDL3
2 - 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/JEIDA
1 - 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 - 輸入 0
1 - 輸入 1
2 - v4l2 輸出 0
3 - 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/s
2 - 3Gb/s
3 - 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 模式下獲取掛起位或在觸發的緩衝模式下獲取電平位是沒有意義的 - 在這種情況下,這些值不代表有效資料。