tag 标签: IMX421

相关博文
  • 热度 9
    2021-12-23 22:33
    5607 次阅读|
    1 个评论
    Sony图像传感器接口SLVS-EC开发分享第一部分:标准简要解读
    作者: Hello , Panda 前一阵子,熊猫君开发了一套 Sony SLVS-EC 的图像传感器接口数据接收 IP ,最近稍微闲了一些,码一点字儿分享一下。 SLVS-EC 是 Sony 推出的接口标准,目前版本已经发展到 v2.0 ,是他们家的一个私有标准,主要是为了满足大靶面、高速图像传感器对大带宽的要求,在 V2.0 版本下,单 lane 的带宽已经到了约 4.752Gbps ,这里说的“约”,是因为标准对速率并没有强制规定,不同型号的 Sensor 速率上可能会有一些小的差别。由于现在 Sony 的图像传感器靶面越来越大, 100M 像素以上的也很多;帧率也越来越高, 1000fps 以上的也不在少数,因此 SLVS-EC 接口在至少在 Sony 的 Sensor 上会用得越来越多。 这篇分享分为两部分,第一部分为“ SLVS-EC 标准解读”,第二部分为“ SLVS-EC 接口 FPGA 实现”。 第一部分: SLVS-EC 标准简要解读 1.1 电气特性 首先我们读它的电气特性, SLVS-EC 的电气特性见下表 1 ,它的发送端差分摆幅是 140mV~290mV 。一般情况下, Xilinx K7 系列 FPGA 的高速 Serdes GTX 可接收的差分摆幅范围 AC 耦合下为 150mV~1250mV ,如图 2 所示。 因此,并不是所有的 FPGA 都可以接收极端条件下的 SLVS-EC 电平,所以,在确定系统方案之前,需要仔细阅读电平是否匹配,一般的 sensor 里面可能会有寄存器可以调节差分输出的摆幅或者其最小输出摆幅比标准里面的要高一些。 那么,我们找一颗 Sensor ,看看实际情况如何。如下图 3 所示是 Sony IMX421 的 SLVS-EC 输出特性,从图中可知,其差分摆幅是 160mV~280mV ,在 xilinx K7 FPGA 的接收范围之内,可以用 K7 系列的 FPGA 来接收。 到这里,我们知道 SLVS-EC 对接收主控的电气特性有一定要求,需要匹配才行。 图 1 SLVS-EC TX 端电气特性 图 2 Xilinx K7 系列 FPGA GTX 电气特性 图 3 IMX421 输出电气特性 1.2 通道和编码 然后我们再看它支持的数据通道形式和所支持的编码格式。 1.2.1 SLVS-EC 通道结构 SLVS-EC 是一个单项高速数据接口,也就是说它的传输方向只能是从 TX 端到 RX 端,并没有反馈传输的功能。一般的,单个 TX 物理层支持的最大 Lane 数是 8Lane ,如果超过 8 Lane ,则使用多个物理层并行传输。配置、控制和状态数据通过 IIC 接口反馈。 1.2.2 编码格式 SLVS-EC 接口使用常规的 8B/10B 编码,使用符号 K28.5 作为对齐码。 1.3 工作模式 和所有其他的 Sony Sensor 一样, SLVS-EC 接口的 Sensor 可工作在主控 Master 模式和 Sensor Master 模式,区别是前者由主控产生 XVS 、 XHS 同步信号;后者由 Sensor 产生 XVS 和 XHS 信号。 Sensor 的输入时钟可由 Sensor 板本地提供或由主控端提供。 和 MIPI CSI 的分层类似, SLVS-EC 接口由上而下分为应用层、链路层和物理层。各个层级的分工如下: 1.2.1 应用层 ( 1 )按格式生成 RAW 数据; ( 2 )按格式生成 Embedded 数据; ( 3 )按格式产生数据帧; ( 4 )应用系统控制协议; ( 5 )产生帧同步、行同步数据; ( 6 )配置和应用 SLVS-EC 接口相关的寄存器(来自 IIC ); ( 7 )相机控制接口通信( IIC )。 1.2.2 链路层 ( 1 )将像素数据进行格式转换为字节数据; ( 2 )负载数据错误校正(选配); ( 3 )封装和插入数据包头; ( 4 )帧尾负载数据错误检测(选配); ( 5 ) Lane 管理; ( 6 )配置管理和产生帧头、帧尾。 1.2.3 物理层 ( 1 ) PHY 协议控制码的产生和提取; ( 2 )带宽控制; ( 3 ) skew 控制; ( 4 ) Comma 符号对齐; ( 5 )符号编解码; ( 6 )串行化和去串行化; ( 6 )时钟产生和恢复; ( 7 ) SLVS-EC 信号的传输和路由。 1.4 应用层协议 SLVS-EC 接口支持 RAW8/RAW10/RAW12/RAW14/RAW16 数据格式,对于每个 Lane 而言,传输的像素数必须是 4 的整数倍。 SLVS-EC 接口可以传输“ Embedded Data ”,用于传输自定义数据、寄存器值等等这些,在标准里面并未对“ Embedded Data ”的具体内容和格式进行定义。和像素数据不同的是,此类数据不能从发送错误中恢复,接收端通过帧尾效验确认接收数据是否出错,出错只能丢掉。 1.4.1 帧格式 SLVS-EC 支持“单流传输”和“多流传输”两种帧模式,多流模式下,多组 SLVS-EC 流可以传输不同的内容。下图 4 是一组流传输的格式,跟通用的 LVDS 图像格式一样,数据包发送以行为单位,包括 Blank 行、 Embedded Data 行、有效数据行等,每行有效数据包括帧头、帧尾和数据载荷。 图 4 单流传输帧格式 数据帧在传输的过程支持模式切换,切换的模式在下一帧开始时生效,模式切换以后接收端需要重新进行初始化流程。模式切换支持中断,配置好寄存器后,由主控给 Sensor 一个中断信号,新的一帧在收到中断信后强制开始。 1.4.2 寄存器 SLVS-EC 寄存器有接口属性寄存器和配置寄存器两种,通过 IIC 进行设置,前者主要配置物理层的一些电气参数,后者主要配置通道数、像素位等参数,一般的,这些参数在图像传感器中会根据 Sensor 参数自动设置为特定值,有极少数的可能需要用户通过 IIC 进行初始化配置。 1.5 链路层协议 链路层最主要的工作就是数据封包。 1.5.1 像素到字节的格式转换 跟 MIPI CSI-2 协议类似, SLVS-EC 的基本数据传输单位也是字节,就需要将 RAW8/10/12/14/16 像素转换为字节再进行传输,这里在恢复数据时仔细对照标准中的描述即可,也是最为重要的内容。 1.5.2 载荷数据 数据载荷的字节数需是 16 的整数倍,不足的字节必须填充为全零。 数据载荷支持 ECC 效验,也可以配置为不支持 ECC ,因此有三种模式,分别是不支持 ECC-0 、 ECC-1 和 ECC-2 ,为了便于描述,咱们把一个数据包又分为若干个数据块,每个数据块有效数据最多为 224 字节,最少为 16 字节。那么,在 ECC-1 模式时,每个块插入 2 字节的 ECC 多项式,此时一个数据块为 18~226 字节;在 ECC-2 模式时,需要插入 4 个字节的 ECC 多项式,此时一个数据块为 20~228 字节。效验字高字节在前。 在一个数据包里面,将每个整的数据块称之为“ Basic Block ”,一个数据包的结尾不足整数块字节数的块称之为“ Extra Block ”,如下图 5 所示是 ECC-1 模式下的块结构图,图中 TP1 为多项式的高字节, PT0 为多项式的低字节。 ECC 多项式的生成和计算参照标准文档计算即可。 图 5 ECC-Option1 时的数据块结构图 1.5.3 封包 封包就是在数据的基础上加上包头( packet headr )和包尾( packet footer )。包尾就是 CRC 效验,可以通过寄存器设置是否应用 CRC 效验特性。需要特别注意的是, packet footer ,也就是 CRC 特性和数据载荷 ECC 特性是互斥的,二者只可使用一种。 接收端恢复数据并检测到错误后,按照标准所述的错误处理方法进行处理。 1.5.4 通道管理 SLVS-EC 接口允许配置为 1 、 2 、 4 、 6 、 8 通道,未使用通道为高阻态。在实际传输过程中,每个 lane 传输的字节数需为一致,字节数不是 lane 数量的整数倍时,需补齐填充 0 。 在关闭 CRC 时, Footer 的长度为 0 ;当 CRC 使能时, Footer 的长度为 4 字节。在使能 ECC 功能时, CRC 功能必须关闭, Footer 的长度为 0 。 1.5.4 包头 包头( Packet Header )的长度固定为 24 字节, Packet Header 的数据结构见下表 1 所示,共 8 字节,连续发三次, H7 在 Lane0 的第一个字节, H6 在 Lane1 的第一个字节,以此类推, H7~H0 的顺序及定义如图 6 所示。 表 1 Packet Header 定义 图 6 Packet Header 位定义 CRC 为 CRC16 ,多项式为 X16+X15+X2+1 ,初始值为‘ 0 ’; 包尾( packet Footer )采用 CRC32 效验,多项式为 X32+X31+X4+X3+X+1 ,初始值为‘ 0 ’。 1.5.5 物理层 发送端物理层的作用是将发送一些列控制码和将数据载荷 8B/10B 编码后发送出去,接收端是发送端的逆过程。下表 2 是对控制码的定义。 表2 控制码定义 备注:上表中所述的任意符号,意为可通过配置属性寄存器( Attribute Register )来自定义。 Sync Code 和 Deskew Code 的长度可通过 Attribute Register 进行定义,用做训练序列来做 lane 内 bit 同步和 Lane 间的对齐,来保证收端恢复数据和对齐通道。 SLVS-EC 接口标准的主要内容大致就是这么多,其他的细节信息均可通过阅读手册来获取,由于熊猫君的水平有限,错误和疏漏之处在所难免,欢迎大家指正。大家可以通过 QQ 讨论群或微信公众号来一起讨论,学习,添加方式见下图,待熊猫君有空后,便码字分享 第二部分“ SLVS-EC 接口 FPGA 实现”。文章开局的那张图便是实现 SLVS-EC 接口的 FPGA 板, CMOS 图像传感器的型号为 Sony 的 IMX421 ,配置为 8 通道 SLVS-EC 模式,满画幅输出( 2/3 英寸、 2.86M 像素), 8bit/409.2fps 。