DSP

基于TMS320C6657双核DSP的图像处理系统开发(3):Cameralink图像采集

2019-07-13 14:52发布

1 Cameralink概述

CameraLink是从Channel link技术上发展而来的,基于视频应用发展而来的通信接口,在机器视觉系统中广泛应用。2000年10月美国NI、摄像头供应商和其他图像采集公司联合推出了CameraLink协议,CameraLink协议是一个工业高速串口数据和连接标准,旨简化图像采集接口,方便高速数字相机和数据采集卡的连接。

2 采集接口与信号说明

Camelink采集基本接口单元
基本采集单元如上图所示。一条Cameralink电缆可以连接至一个MDR26连接器,其中包含了数据信号x0~x3,时钟信号xclk,CC控制信号、相机通信信号TC、TFG等。

2.1 图像数据

如果仅仅接收工业相机的图像,则只需要连接288A芯片即可。经过288A芯片的解码后,输出为28bits的并行数据信号、四个使能信号以及一个源同步时钟信号。其中四个使能信号的定义如下:
  • FVAL—Frame Valid (FVAL) is defined HIGH for valid lines.
  • LVAL—Line Valid (LVAL) is defined HIGH for valid pixels.
  • DVAL—Data Valid (DVAL) is defined HIGH when data is valid.
  • Spare— A spare has been defined for future use.

2.2 控制数据

保留的4路LVDS pairs用于相机控制,由camera厂商自己定义,具体功能需查询所用相机的数据手册。包括;
  • Camera Control 1 (CC1)
  • Camera Control 2 (CC2)
  • Camera Control 3 (CC3)
  • Camera Control 4 (CC4)

2.3 通信

一般来讲,相机厂家会预留通信协议,用于相机功能参数的设置,因此在Cameralink中,存在两个LVDS pairs用于camera和grabber的通信。
  • SerTFG—Differential pair with serial communications to the frame grabber.
  • SerTC—Differential pair with serial communications to the camera.
    要求:一个起始位、一个停止位、无奇偶校验位。波特率需查询相机手册。

3 关于Taps配置的示意图

不同的相机采用不同的传输数据的方式,关于一些Cameralink协议上的术语可参考下图理解:single、interlaced、adjacent等。最常见数据传输顺序为图1和图3的方式。
在这里插入图片描述

4 FPGA实现Camlink数据的采集

4.1 数据位映射关系

首先,在《Cameralink标准协议》的4.1章节,找到Bit Allocation,也就是DS90CR288A芯片的管脚分配与数据bit的对应关系:
Cameralink Base Bit Allocation wire [7:0] portA = { CR288_TX[5], CR288_TX[27], CR288_TX[6], CR288_TX[4:0]}; wire [7:0] portB = { CR288_TX[11], CR288_TX[10], CR288_TX[14:13], CR288_TX[12], CR288_TX[9:7]}; wire [7:0] portC = { CR288_TX[17:16], CR288_TX[22:18], CR288_TX[15]}; wire fval = CR288_TX[25]; wire lval = CR288_TX[24]; wire dval = CR288_TX[26];

4.2 数据位分配

在《Cameralink标准协议》的5.1章节,找到位分配关系表:
bit assignment
以8bit 2Taps的相机配置为例: reg cam_fval; reg cam_lval; reg [15:0] cam_data; // always @ (posedge cam_clk) begin cam_fval <= fval; cam_lval <= lval; //cam_dval <= dval; //参考具体相机是否需要DVAL信号 cam_data[15:0] <= {portB[7:0],portA[7:0]}; end assign fifo_wren = cam_fval & cam_lval; assign fifo_wrdata[15:0] = cam_data[15:0]; 经过FIFO之后,可将时钟转换为系统时钟,再根据FPGA系统的总体规划,将图像数据传递至DDR读写模块或直接发送给C6657 DSP的内存空间中。