发 帖  
原厂入驻New

[经验] DM368信号时序

2019-6-13 05:00:08  356 传感器 接口
分享
0
ti 通用数字信号处理系统技术支持

摘要 本文详细介绍了DM368 视频前端支持的输入数字信号格式。并以MT9D131 和PC VGA 信号为例,将两者的时序和 DM368 视频前端配置参数一一匹配。同时介绍了如何合理配置和使用 VD 中断,为 DM368 用户正确采集数据提供了参考。本文内容也可以给 DM8127、DM385 芯片的用户在使用视频摄像并行输入口采集时提供帮助。

1 前言

DM368 是TI 达芬奇系列芯片中的一颗,被广泛的使用在IPNC(IP net camera 网络摄像机)的应用领域里。对于IPNC 应用,首先就需要将视频信号送入DM368 里面,这就需要使用到DM368 的视频前端(VPFE - Video Processing Front End)。DM368 的视频前端主要包含了IPIPEIF(Image Pipe InteRFace图像管道接口),ISIF(Image Signal Interface图像信号接口),IPIPE (Image Pipe 图像管道),Resizer(缩放器)四个部分。IPIPEIF 功能是数据通路连接,以及把数据整合成后端模块接口可以接入的格式/大小。ISIF 是视频信号的输入口,可以支持Bayer 格式的RAW 数据(原始数据)或者是YUV 的数据的输入。IPIPE 主要是做ISP 的处理。Resizer 起到了对图像缩放和图像存储格式转换的作用。本文是基于IPIPEIF 将外部并口输入数据送入ISIF 处理的基础上展开讨论。



图 1. 视频处理前端[1]

如何将输入信号和DM368 视频前端参数一一对应?如何获取外部的RAW 数据以及RAW 转换成的对应的YUV 数据?如何只采集或者处理图像中的一部分区域?如何配置VD 中断触发的时机?在VD 中断里面我们应该处理什么?希望在阅读完本文后,你可以找到相应的答案。

2 DM368的前端信号输入

如果用户外接传感器(sensor)输出RAW 数据或者YUV 数据到DM368,为了采集到正确的数据,我们需要了解DM368 的视频前端是如何解读信号,以获得正确的数据。如果用户使用的是FPGA 输出信号到DM368,那就更需要了解DM368 视频前端支持的信号格式,正确输出DM368可以接收的信号。

2.1 输入信号的物理连接

DM368 视频前端支持并口的信号输入,包括PCLK(像素时钟),8 到16 位数据线,HD(行同步)信号,VD(场同步)信号。可以支持最多16 位的Bayer 格式的RAW 数据输入。也可以支持内嵌同步或者外部信号同步的8 位或者16 位的yuv422 信号输入。如果是内嵌同步,则不需要接入HD 信号和VD 信号。对于输入内嵌同步的信号,DM368 硬件可以自动解析出数据上嵌入的同步信息给芯片内部使用。DM368 的PCLK 最高可支持120MHz,可以支持720p60、1080p30 等分辨率的输入,也可以支持较大分辨率,例如五百万、八百万等分辨率,但帧率是非实时(小于30 帧)的。

DM368 的视频前端ISIF 可以支持master(主)模式或者slave (从)模式。所谓master 模式就是PCLK、VD 和HD 由DM368 向外发出。而slave 模式是外部设备提供PCLK、VD 和HD 信号给DM368。在实际的应用里面绝大部分的情况都使用采slave 模式。

2.2 DM368视频前端对输入信号的解析

2.2.1 ISIF对信号的解析

无论是master 模式还是slave 模式,DM368 的视频前端接口ISIF 对于信号的处理是一样的。



图 2.  帧图像格式[1]

图2 的时序通常认为水平同步和垂直同步信号都为高电平有效,需要配置ISIF 的MODESET. HDPOL=MODESET.VDPOL=0。在这种情况下,水平同步信号宽度为HDW (HD pulse width),以像素为单位。垂直同步信号宽度为 VDW (VD pulse width) ,以行数为单位。 PLLN(Pixels per line)是每行的像素个数,也就是相邻两个行同步信号间的像素个数。LPFR 是Lines per frame 的缩写,表示每帧数据有多少行,也是相邻两个场同步信号之间的行数。在slave 模式下,PLCK/HD/VD 都是外部输入的,ISIF 寄存器HDW/VDW/PLLN 是不需要配置的。图2 中的灰色区域我们叫做有效数据区域,也就是用户希望获得的有效数据。而斜线阴影区域就是消隐区域。消隐区域在视频前端处理中也是必不可少的部分,关于这点我们会在第3 节详细介绍。

如果你使用的是单次(one shot)模式,或者在连续(continuous)模式下,你需要保存RAW 数据,那你就需要配置 SPH( Start pixel horizontal 水平方向起始像素),SLV0/1 (Start line vertical - field 0/1 垂直方向奇偶场起始行),LNH( Number of pixels in line 每行像素个数),LNV (Number of lines vertical 垂直方向行数)。这是为了告诉DM368 你需要把输入的图像的哪部分写到DDR。也就是说你可以选择只输出有效数据里面的某一部分到DDR。

SPH 告诉硬件在同步信号有效以后从哪个像素开始写入DDR。请注意这里的HD 信号有效起始点是指同步信号有效的沿,不是从同步信号脉冲结束后作为计数像素的起点。例如,如果HD 信号高电平有效,就是HD 上升沿后开始计数,LNH 个PCLK(也就是像素)后将接收到的数据写入DDR。同样 SLV0/1 告诉硬件从哪行数据开始需要写入 DDR,LNV 决定了写多少行数据到 DDR。所以调整ISIF 的SPH,SLV0/1, LNH 和LNV 就可以调整保存到DDR 上的RAW 数据在原图中的位置,以及 RAW 数据段大小(长宽)。如果不需要写入 RAW 到DDR,那就不需要配置 SPH, SLV0/1 ,LNH 和LNV。

图2 的时序如果配置为同步信号低电平有效也是可以的。但是如果配置为低电平有效,相关的参数就发生了变化。例如水平同步信号宽度就变为 PPLN-HDW,垂直同步信号宽度为 LPFR-  VDW。SPH 和 SLV0/1 都变成了 0。所以在配置 ISIF 相关寄存器前首先需要把同步信号的极性确定下来。要采集到正确的数据,DM368 采样数据时机必须和传感器输出数据的时机匹配。在DM368 上默认是PCLK 的下降沿采样数据。用户可以通过修改SYSTEM module 寄存器VPSS_CLK_CTRL的PCLK_INV[2] 位来改变 PCLK 采样沿。

2.2.2 IPIPE和Resizer 对信号的解析和处理

如果ISIF 直接通过IPIPEIF 连接到IPIPE,那所有的图像数据,也就是图2 里的global frame 都会传输到IPIPE。在IPIPE 里面用户需要配置SRC_HPS (Horizontal Start Position ),SRC_VPS(Vertical Start Position),SRC_HSZ( Horizontal Processing Size)和SRC_VSZ( Vertical Processing Size),来确认global frame 里面的哪一部分需要IPIPE 来处理。

在resizer 的模块里面,也有SRC_HPS,SRC_VPS,SRC_HSZ 和SRC_VSZ 可以配置resizer处理的图像的区域。如果IPIPE 的输出到resizer 已经是需要处理的区域,那SRC_HPS,SRC_VPS 就可以配置为0,而resizer 的SRC_HSZ,SRC_VSZ 等于IPIPE 的SRC_HSZ,SRC_VSZ。如果ISIF 的输出是通过IPIPEIF 直接到resizer(没有经过IPIPE),resizer 的SRC_HPS,SRC_VPS 就不能配置为0 了,需要用户根据需要处理的图像合理的配置resizer 的SRC_HPS,SRC_VPS 寄存器。

2.2.3 RAW数据和YUV 数据的匹配

在连续模式下,用户同时获得resizer 输出的YUV 和ISIF 输出的RAW,时常有用户发现自己保存的RAW 数据和Resizer 输出的YUV 数据不匹配,有一定的偏移。这种问题的原因是IPIPE,Resizer 里面的SRC_HPS,SRC_VPS,SRC_HSZ 和SRC_VSZ 和ISIF 里面的写入DDR 时候配置的偏移和大小不匹配。IPIPE/Resizer 和ISIF 的寄存器本身是没有直接关系的,这就需要用户将它们一一对应,匹配起来。例如ISIF 输出的数据输入给IPIPE,为了让RAW 和YUV 匹配,需要ISIF 的SPH 等于IPIPE 的SRC_HPS,ISIF 的SLV0/1 等于IPIPE 的SRC_VPS,ISIF 的LNH 等于IPIPE 的SRC_ HSZ,ISIF 的LNV 等于IPIPE 的SRC_ VSZ。而Resizer 的SRC_HPS,SRC_VPS 需要配置为0,而resizer 的SRC_HSZ,SRC_VSZ 要等于IPIPE 的SRC_HSZ,SRC_VSZ。

在单次模式下,也就是数据通路ISIF->DDR->IPIPEIF->IPIPE(Resizer),由于IPIPE 的输入是DDR 上的RAW 数据,有效数据的获取已经在ISIF 输出到DDR 配置里面实现了,IPIPE 里面的处理数据的起始位置就可以是(0,0)了。

这样无论是在连续模式还是在单次模式下,RAW 数据和RAW 输出转换出的YUV 数据就可以完全匹配了。

2.3 DM368接入传感器输出

2.3.1 MT9D131同步信号极性



图 3. MT9D131 时序图 [3]

图3 是美光的MT9D131 传感器的时序图。图3 中FRAME_VALID 表示VD(垂直同步),

LINE_VALID 表示HD(水平同步)。

在DM368 IPNC v3.1 的软件(av_captureframeworkdrvusermodsrcimgs_mt9d131_2mpdrv_imgsIsifCfg_MT9D131_2MP.c)里面对于同步信号的极性有如下的配置,设定同步信号都是高有效。



图3 中的HD 信号宽度是比较宽的,不是个脉冲,而是一行数据的个数。所以HD 信号的宽度可长可短,可以是几个像素(如图2),或者是一行数据的个数(如图3)。VD 信号的宽度也是同理。无论同步信号是宽是窄,最重要的是先定义好同步型号的极性,因为ISIF 参数的配置都要以这点为基础。

2.3.2 MT9D131的一帧数据分析



图 4. MT9D131 像素阵列描述[3]

MT9D131 最大可以输出两百万像素的图像。从图4 可以看出MT9D131 的sensor 输出实际上是1688x1256 个像素(起始像素是0,0),是大于两百万的。原因是其中包含了黑色区域和无效区域,有效的图像大小是1632x1216,一般使用的两百万分辨率为1600x1200。

表 1. MT9D131 时序和DM368 的ISIF 参数对应表


表 1. MT9D131 时序和DM368 的ISIF 参数对应表(续)


所以,根据表1 可以得到对于MT9D131 的输出的RAW 数据:

PPLN =右侧black column 列数+水平方向有效像素点+左侧black column 列数=52+1632+4=1688  

LPFR=上部black row 行数+垂直方向有效像素点+下部上部black row 行数=20+1216+20=1256

但由于MT9D131 对外输出VD/HD,这两个参数在ISIF 里面无需配置。

如果需要采集图像正中间的1600x1200 数据,ISIF 需要如表2 的配置:

表 2. MT9D131 采集1600x1200 时DM368 的ISIF 参数对应表


如果数据通路是ISIF->IPIPEIF->IPIPE->Resizer, 要得到匹配的YUV 数据就需要配置:

IPIPE 相关寄存器:

SRC_HPS=SPH=68

SRC_VPS=SLVx=28

SRC_HSZ=LNH=1599

SRC_VSZ=LNV=1199

Resizer 相关寄存器:

SRC_HPS=0

SRC_VPS=0

ZHCA600

8 DM368视频前端信号采集详解

SRC_HSZ=LNH=1599

SRC_VSZ=LNV=1199

MT9D131 上电后默认会禁止dark 区域输出,也就是Show Dark Rows 和Show Dark Columns 寄存器位默认值为0,右侧black column 列数=0,上部black  row行数=0,这样传感器在同步信号有效后会立即输出有效数据,也就是图3 中 MT9D131 时序图显示的情况。这种情况下如果要获取中心1600x1200 的数据,就需要修改配置ISIF.SPH=16, ISIF. SLV0/1=8,IPIPE. SRC_HPS=16,IPIPE.SRC_VPS=8,其他参数配置不变。

2.4 DM368接入PC VGA 信号

DM368 的视频前端是数字接口,无法直接接入PC 的VGA 信号的,因为PC 的VGA 信号是模拟信号。这需要有像TVP7002 的视频AD 芯片将PC 的VGA 信号转换为YUV 的数字信号,再输入到DM368。

参考VESA 的标准,用户会看到一些术语,如Addr Time, front porch,back porch 等,下面我们把这些术语和DM368 的视频前端的输入时序来对应一下。



图 5. PC VGA 输出时序简图

对于图5,假设top/left border 和bottom/right border 为0(关于top/left border 和bottom/right border 请参考VESA 时序标准),设定HD 低有效,VD 高有效。

表 3. VGA 时序和DM368 的ISIF 参数对应表



表 3. VGA 时序和DM368 的ISIF 参数对应表(续)



有了表3 的对应,用户就可以很方便的根据VESA 标准,配置好ISIF 相关的寄存器了。

3 VD中断的配置和使用

在讨论这个问题前,用户需要分清楚外部VD 信号(或者由内嵌同步解析出来的VD 信号)和ISIF 内部的VD 中断的关系。



图 6. VD 中断重定位[1]

在DM368 中VD 中断和外部的VD 信号不一定是一致的。一般来说软件会根据外部的VD 信号,对内部使用的VD 中断进行重定位。下面的代码可以在DM36x IPNCV3.1 的软件(av_captureframeworkdrvusermodsrc  Drv_isif.c)里面找到。以DM368 采集RAW 数据为例,VD 中断重定位到传感器输出图像高度(包括有效数据和消隐期高度)减去64 行。也即是当VD中断产生的时候,认为当前帧的数据已经经Resizer 写入到DDR,目前处于消隐期,可以更新下一帧数据需要修改的寄存器例如IPIPE 寄存器,Resizer 输出和地址寄存器值等,这样在下一个外部 VD 信号到来的的时候,这些寄存器就可以真正更新到硬件里面,使得下一帧输出的数据正确,而用户也可以采集到正确的数据。这就是VD 中断需要处理的内容和触发的时机。



通常来说如果有效数据后(无论是每一行后面,或者是一帧数据结束后面)有较多的消隐期区域,这对于DM368 的ISP 处理和输出是有利的。这点对于设计FPGA 输出时序给DM368 的时候需要特别注意。

由于不同的传感器或者是FPGA 的输出时序有所不同,该值是需要根据实际应用来调整的。即使是同样的传感器,如果由于系统负荷的问题,使得DDR 占有率增加,导致Reszier输出DDR 变慢,这时候就需要增大 VDINT 的值,以保证当前帧数据完全写入。使能 Resizer 输出的 flip 功能,会增加DDR 的访问量,在垂直和水平方向flip 同时开启的时候就有可能导致图像右侧输出不正常而需要增大VDINT 的值。

4 结束语

了解输入 DM368 的信号的时序格式同时了解 DM368 如何解析输入的数据并且合理使用 VD 中断,就可以正确采集到需要的数据。由于DM8127、DM385 的并口和DM368 的类似,本文的内容可以作为参考。


相关经验

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发经验
关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表