跳转到内容

BCON for LVDS 接口说明#

本主题描述 Basler 专有的 BCON for LVDS 接口。

Basler BCON for LVDS 接口为连接基于 LVDS 的技术设备(如 FPGA 板和 SoC)提供了最高灵活性。

接口规格#

提示
数据通道 4 -
时钟线路 1 用于字时钟。
控制线路 3 I²C 接口线路(时钟、数据、ID)。
输入线路 1 -
输出线路 1 -
串化因子 7 -
数据总线宽度 28 位 -
保留用于图像数据的总线宽度 24 位 -
字时钟频率 12–84 MHz 可以 8 为增量设置。
字时钟占空比 4/7 -
位时钟频率 fWordClk * 7 -

BCON for LVDS 规范与 ChannelLink-I 规范相似,尤其是 Texas Instrument DS90CR28x 串并转换器的规范。这适用于以下情况:

  • 数据、时钟和控制线路的分离
  • 数据通道数
  • 串化因子
  • 总线宽度
  • 时钟频率
  • 字时钟占空比

有关 Channel Link 的更多信息,请参见 Channel Link 设计指南

信息

由于 Camera Link 接口也基于 Channel Link,它与 BCON for LVDS 接口相似。有关更多信息,请参见 Comparison of Basler BCON for LVDS and Camera Link Interfaces 应用说明。

数据输出#

四个数据通道(X0、X1、X2、X3)输出的数据包含以下信息:

  • 帧有效位 (FVal):指示正在传输有效帧。
  • 线路有效位 (LVal):指示正在传输有效线路。
  • 帧信息 (FrameInfo):包括有关像素格式和每时钟周期像素数的信息。在每帧传输之前发送。
  • 像素数据 (Line 1, Line 2, …, Line n):逐行显示像素数据。
  • 行校验和 (Cksum 1, Cksum 2, …, Cksum n):每行像素数据的校验和。每行传输后发送。
  • 输出位(输出 0 和输出 1):可用于传输输出信号的两个位,例如“闪烁窗口”或“曝光激活”。

帧信息、像素数据和行校验和在通用的 24 位图像数据通道(“数据”通道)上传输。

数据流#

BCON for LVDS 接口不提供数据流控制。另外,与 CameraLink 接口不同,该接口不提供数据有效位 (DVal)。仅 FVal 和 LVal 用作同步信号:

BCON for LVDS 数据流图

只要 FVal 较低且相机模块不发送 FrameInfo 或 Cksum 数据,就发送同步模式。这使您可以设置正确的字对齐方式。

数据串化和时序#

BCON for LVDS 串化和时序

如上所示,数据输出最多可在四个数据通道(X0 至 X3)上使用最多 28 位进行串化。

  • 保留两位用于输出信号(输出 0 和输出 1)。它们始终在数据通道 X0 的位置 0 和 1 上传输。
  • 保留另外两位用于同步信号(FVal 和 LVal)。它们始终在数据通道 X0 的位置 2 和 3 上传输。
  • 其余 24 位保留给图像数据通道使用,包括帧信息、像素数据和行校验和。

实际使用的位数和有效数据通道数取决于所传输的数据:

传输的数据 所用位 数据通道激活
帧信息
8 位像素数据
8 位校验和
位 0 –位 7 X0、X1
12 位像素数据
12 位校验和
位 0 –位 11 X0、X1、X2
16 位像素数据
16 位校验和
位 0 –位 15 X0、X1、X2
24 位像素数据
24 位校验和
位 0 –位 23 X0、X1、X2、X3

信息

如果仅使用 8 位像素格式(例如,由于使用单色相机模块),则 X2 和 X3 数据通道永远不会处于活动状态。相应地,如果仅使用 8 位或 12 位像素格式,则 X3 永远不会处于活动状态。

但 Basler 建议始终连接从 X0 到 X3 的所有 LVDS 数据通道。

帧有效位和行有效位#

帧有效位 (FVal) 和行有效位 (LVal) 表示正在发送有效帧或行。

LVal 和 FVal 在数据通道 X0 的位置 2 和 3 上传输。

帧信息#

数据流图所示,在每个帧传输之前发送一个“FrameInfo”块。

每个 FrameInfo 块均包含以下信息:

  • 适用于以下像素数据的像素格式。
  • 每个时钟周期的像素数。

帧信息始终在 24 位数据通道的位 0 到 7 上传输:

FrameInfo 传输期间的数据通道使用情况

相机模块在每个 FrameInfo 块中传输以下信息:

时钟周期 描述 位长 枚举    
n 命令字 8 - 0b10111101
n+1 “每时钟周期像素数”值 8 1
2
0b00000000
0b00000001
n+2

n+5
像素格式值
以 4 字节为单位发送,最低有效字节最先发送
遵守 GenICam 像素格式名称和值规范
32 Mono 8
Mono 12
Bayer GR 8a
Bayer RG 8a
Bayer GB 8a
Bayer BG 8a
Bayer GR 12a
Bayer RG 12a
Bayer GB 12a
Bayer BG 12a
YCbCr422
RGB 8
0x01080001
0x01100005
0x01080008
0x01080009
0x0108000A
0x0108000B
0x01100010
0x01100011
0x01100012
0x01100013
0x0210003B
0x02180014

  1. Basler dart BCON for LVDS 相机模块的适用标准拜耳滤波器组为 GB。如果支持,则可以使用 Reverse X and Reverse Y 功能设置其他对齐。

  2. 每时钟周期图像数据示例。

示例#

如果将相机模块配置为每个时钟周期两个像素和 Mono 12 像素数据,则相机模块在每次传输帧之前发送以下信息:

时钟周期 数据 提示
n 0b10111101 命令字
n+1 0b00000001 每个时钟周期两个像素
n+2 0b00000101 Mono 12 像素格式值
n+3 0b00000000 Mono 12 像素格式值
n+4 0b00010000 Mono 12 像素格式值
n+5 0b00000001 Mono 12 像素格式值

Mono 12 像素格式值 = 0x01100005 = 0b00000001 00010000 00000000 00000101(首先发送最低有效字节)

行校验和#

为了检测传输错误,Basler BCON for LVDS 接口使用偶校验。

对于每个图像行,计算校验和。校验和将添加到输出数据的每行末尾。校验和由许多奇偶校验位组成,具体取决于所选的像素格式。对于当前行的每个像素的每个位位置,系统都会计算一个偶校验位。

在图像行中最后一个像素的数据发送之后,立即发送校验和(请参阅数据流图)。

示例:假设相机模块设置为 Mono 8 像素数据,每个时钟周期一个像素。另外假设图像 ROI 宽度仅设置为 5 个像素。这意味着每个图像行由 5 x 8 位图像数据构成。下表显示了在这些条件下,一个图像行的示例数据。

数据通道位位置 nb n+1 n+2 n+3 n+4 1 位计数 校验和位(偶校验位)  
位 0 1 1 0 1 0 3 1 LSB
位 1 1 0 1 0 0 2 0  
位 2 1 0 0 0 0 1 1  
位 3 1 1 1 0 1 4 0  
位 4 1 0 1 0 0 2 0  
位 5 0 0 0 1 1 2 0  
位 6 0 0 0 0 0 0 0  
位 7 1 1 0 0 1 3 1 MSB

在上面的示例中,行校验和数据为 0b10000101。

同步模式#

只要帧有效位 (FVal) 较低并且相机模块未发送帧信息或行校验和数据,就会发送固定的同步模式。这使您可以设置正确的字对齐方式。

BCON for LVDS 同步模式

输出位#

BCON for LVDS 接口提供了两个位,可用于传输两个输出信号:输出 0 和输出 1。

输出 0 和输出 1 在数据通道 X0 的位置 0 和 1 传输。

根据您的相机型号,可以使用以下输出信号:

  • 闪烁窗口
  • 曝光激活
  • 用户输出 1
  • 用户输出 2

有关配置输出信号的更多信息,请参见 Line Source 功能。

像素数据#

像素格式#

Pixel Format 可用位置 位深
Mono 8 仅单色相机模块 8
Bayer 8 仅彩色相机模块 8
Mono 12 仅单色相机模块 12
Bayer 12 仅彩色相机模块 12
YCbCr422 仅彩色相机模块 16
RGB 8 仅彩色相机模块 24

对于图像数据传输,BCON for LVDS 接口无法区分各种 8 位像素格式(Mono 8/Bayer 8)。同样,该接口也无法区分各种 12 位像素格式(Mono 12/Bayer 12)。

但是,有关用于帧采集的特定像素格式的信息包含在数据流的 FrameInfo 部分中。

每时钟周期像素数#

在所有 Basler BCON for LVDS 相机模块上,您都可以设置每个时钟周期传输的像素数。

每个时钟周期一个像素#

此模式适用于所有可用的像素格式

在此模式下,相机模块按以下方式发送像素数据:

  • 在每个时钟周期中,通过 BCON for LVDS 接口传输一个像素的数据。
  • 在第一个时钟周期,相机模块传输第一行中第一个像素的数据。在第二个时钟周期,相机模块传输第一行中第二个像素的数据,依此类推,直到该行结束。
  • 第一行完成后,相机模块将发送该行的校验和。随后,第二行的传输开始并以类似的方式进行。数据传输逐行继续,直到所有帧数据都已传输。

在像素数据传输期间,将使用数据通道的 24 个位,如下所示:

数据通道使用情况(每个时钟周期一个像素)

每个时钟周期两个像素#

此模式仅适用于 8 位和 12 位像素格式(即,不适用于 YCbCr422 和 RGB 8 像素格式)。

在此模式下,相机模块按以下方式发送像素数据:

  • 在每个时钟周期中,通过 BCON for LVDS 接口传输两个像素的数据。
  • 在第一个时钟周期,相机模块传输第一行中前两个像素的数据。在第二个时钟周期,相机模块传输第一行中后续两个像素的数据,依此类推,直到该行结束。
  • 第一行完成后,相机模块将发送该行的校验和。随后,第二行的传输开始并以类似的方式进行。数据传输逐行继续,直到所有帧数据都已传输。

在像素数据传输期间,将使用数据通道的 24 个位,如下所示:

数据通道使用情况(每个时钟周期两个像素)

设置每个时钟周期的像素数#

要设置每个时钟周期的像素数,请将 BconPixelsPerClockCycle 参数设置为12

您可以在下面找到示例代码。

信息

pylon API 还提供了 PixelPerClockCycle 参数,该参数设置主机端每个时钟周期的像素。该参数应设置为与 BconPixelsPerClockCycle 参数相同的值。更改 BconPixelsPerClockCycle 参数时,PixelPerClockCycle 会自动调整,但反之则不然。

输出时钟#

BCON for LVDS 的基本时钟是字时钟 WordClk。它的频率范围可以从 12 MHz 到 84 MHz(可按照 8 为增量进行设置,即 12、20、28 等)。

字时钟占空比为 4/7,即,字时钟信号在每个周期的 4/7(约时间的 57.14%)内处于激活状态(高电平)。

字时钟在单独的输出时钟线路 XCLK 上传输。

系统不会传输位时钟频率 fBitClk,但可以计算得出此值。位时钟频率比字时钟频率快 7 倍:

fBitClk = fWordClk * 7

设置时钟速度#

要设置时钟速度,请将 BconClockFrequency 参数设置为以下值:

  • MHz_12
  • MHz_20
  • MHz_28
  • MHz_36
  • MHz_44
  • MHz_52
  • MHz_60
  • MHz_68
  • MHz_76
  • MHz_84

您可以在下面找到示例代码

信息

pylon API 还提供 ClockFrequency 参数,该参数设置流采集器端每时钟周期像素数。ClockFrequencyBconClockFrequency 参数自动同步。当您更改一个参数时,另一个将随之调整,反之亦然。

输入线路#

BCON for LVDS 输入线路可用于将触发信号或其他输入信号发送到相机模块。

输入状态可以通过相机模块的控制接口随时读取。

在 pylon API 中,输入线路是Line 3。

I²C 接口#

相机模块通过标准的 I²C 接口进行配置。有关详细说明,请参见 I²C 总线规范和用户手册

I²C 功能#

除了强制性的 I²C 功能,BCON for LVDS 使用可选的时钟拉伸功能,即,它可以使 I2C_SCL 保持低电平。

信息

设计系统时,请确保 I²C 主设备可以处理时钟拉伸。

有关这些功能的详细信息,请参见 I²C 总线规范和用户手册

Basler 特定设置#

以下各节提供有关偏离 I²C 总线规范的设置的信息。

一般信息#

BCON for LVDS 接口的控制通道设计为 I²C 总线接口。一种 BCON for LVDS 相机模块是 I²C 从设备,可以处理高达 400 kbit/s 的数据传输(根据 I²C,称为“快速模式”)。

快速模式 (Fm) 设备向下兼容,并且可以在 0-100 kbit/s 的 I²C 总线系统中与标准模式 (Sm) 设备进行通信。

但是,由于它们不向上兼容,因此不应将快速模式设备集成到为更快模式配置的 I²C 总线系统中,即快速模式增强 (Fm+) 或高速模式 (Hs)。快速模式设备无法跟上更快模式的更高传输速率。因此,可能会发生不可预测的状态。

设计 I²C 总线主机时必须遵守这些限制。

附加 I²C 控制线路 (I2C_ID)#

除了标准的 I²C 控制线路(I2C_SDA 数据线路、I2C_SCL 时钟线路)外,还有一条额外的 I²C 控制线路,即 I2C_ID 线路。

通常,I2C_ID 线路可让您定义相机模块应响应的从机地址。您最多可以将两个相机模块连接到一条 I²C 总线。I2C_ID 线路的逻辑电平决定使用哪个从机地址(即,相机模块应响应的地址)。

I2C_ID 线路的逻辑电平 从机地址 通信对象
0(低) 0x3c 相机模块 1
1(高) 0x3d 相机模块 2

通常,根据所需的从机地址,I2C_ID 线路永久性地固定至固定电平,即低电平 (0 V) 或高电平 (3.3 V)。

I2C_ID 线路也可用于重置相机模块。有关更多信息,请参见下文。

通过 I2C_ID 线路重置#

如果相机模块不再响应,则可以通过 I2C_ID 线路激活重置功能。

信息

接通电源时,请确保以下几点:

  • 根据所需的从机地址,I2C_ID 线路必须具有正确的逻辑电平。
  • 不得在运行期间更改系统启动时的逻辑电平,仅可在重置的情况下更改。

重置相机模块:

  1. 将 I2C_ID 线路设置为相反的逻辑电平至少 100 ms。
  2. 将 I2C_ID 线路设置回其原始逻辑电平。切换回此电平将触发微控制器的重置。FPGA 将被重新载入,但不会重置。

示例代码#

// Configure the camera to transmit two pixels per clock cycle
camera.BconPixelsPerClockCycle.SetValue(BconPixelsPerClockCycle_Two);
// Set the BCON output clock speed to 84 MHz
camera.BconClockFrequency.SetValue(BconClockFrequency_MHz_84);
INodeMap& nodemap = camera.GetNodeMap();
// Configure the camera to transmit two pixels per clock cycle
CEnumParameter(nodemap, "BconPixelsPerClockCycle").SetValue("Two");
// Set the BCON output clock speed to 84 MHz
CEnumParameter(nodemap, "BconClockFrequency").SetValue("MHz");
// Configure the camera to transmit two pixels per clock cycle
camera.Parameters[PLCamera.BconPixelsPerClockCycle].SetValue(PLCamera.BconPixelsPerClockCycle.Two);
// Set the BCON output clock speed to 84 MHz
camera.Parameters[PLCamera.BconClockFrequency].SetValue(PLCamera.BconClockFrequency.MHz);
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK;  /* Return value of pylon methods */
/* Configure the camera to transmit two pixels per clock cycle */
errRes = PylonDeviceFeatureFromString(hdev, "BconPixelsPerClockCycle", "Two");
CHECK(errRes);
/* Set the BCON output clock speed to 84 MHz */
errRes = PylonDeviceFeatureFromString(hdev, "BconClockFrequency", "MHz");
CHECK(errRes);