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 模式下获取挂起位或在触发的缓冲模式下获取电平位是没有意义的 - 在这种情况下,这些值不代表有效数据。