一种图像数据传输方法及装置 【技术领域】
本发明涉及无驱视频设备技术,尤指一种符合USB视频类(UVC,USBVideo Class)协议的图像数据传输方法及装置。
背景技术
通用串行总线(USB,Universal Serial Bus)协议中,除了通用的软硬件电气接口规范等,还包含了各种各样的类(Class)协议,用来为不同的功能定义各自的标准接口,以及具体的总线上的数据交互格式和内容。这些Class协议的数量非常多,最常见的比如USB存储设备类(USB Mass StorageDevice)协议,USB人机交换界面(USB Human Interface Device)协议、USB音频类(UAC,USB Audio CLASS)协议、UVC协议等等。其中,支持UVC协议的视频设备类产品包括无驱摄像头。
本文以无驱摄像头为例进行说明。并称符合UVC协议的图像数据为Usb_Video_Class数据流。
根据UVC协议,Usb_Video_Class数据流采用同步(isochronous)传输方式。图1是UVC协议中规定的Usb_Video_Class数据流的格式示意图,如图1所示,在UVC协议中规定Usb_Video_Class数据流的格式为:微帧头(payload header)加图像数据(payload data),其中,payload header在UVC协议中宽度定义为16bit,用于封装图像数据。当选定高速高带宽模式传输模式时,一个USB微帧里有一个微帧头,而一个微帧头带三个数据包即三个payload data,其中每个数据包最大为1024字节。
为了实现Usb_Video_Class数据流的无驱传输,需要对图像数据加微帧头以形成Usb_Video_Class数据流。目前,关于如何加微帧头没有相关方案。
【发明内容】
有鉴于此,本发明的主要目的在于提供一种图像数据传输方法,能够实现Usb_Video_Class数据流的无驱传输。
本发明的另一目的在于提供一种图像数据传输装置,能够实现Usb_Video_Class数据流的无驱传输。
为达到上述目的,本发明的技术方案具体是这样实现的:
一种图像数据传输方法,该方法包括:
获取图像数据,在先进先出存储器FIFO的控制下,对接收到的图像数据加微帧头,以形成符合USB视频类UVC协议的图像数据Usb_Video_Class数据流,USB控制器从FIFO中读取Usb_Video_Class数据流。
所述在先进先出存储器FIFO的控制下,对接收到的图像数据加微帧头具体包括:
在检测出所述FIFO的空Empty信号有效时,对所述获得的图像数据加微帧头;
在检测出连续3070字节图像数据时,对所述获得的图像数据加微帧头;
在判断出所述获得的图像数据为新图像帧时,对获得的图像数据加微帧头。
所述判断是否为新图像帧的方法为:在所述FIFO的帧同步Vsync信号有效时,表示一幅新图像的开始,在所述FIFO的行同步Hsync信号标识最后一行有效时,表示一幅图像即将结束。
在所述检测出FIFO的空Empty信号有效之前,该方法还包括:
在检测出所述FIFO的快空AlomstEmpty信号有效时,缓存所述获得的图像数据。
在检测出所述FIFO的满Full信号有效时,将标识有错误的微帧头写入所述FIFO,且当前这一图像帧内不再写入图像数据。
该方法还包括:在检测出一幅图像帧里的最后一个微帧头时,在帧同步Vsync信号无效后再加最后一个微帧头。
一种图像数据传输装置,该图像数据传输装置包括:图像数据获取模块、图像数据处理模块和FIFO,其中,
图像数据获取模块,用于获取图像数据,并发送给图像数据处理模块;
图像数据处理模块,用于在FIFO的控制下,对接收到的图像数据加微帧头,以形成Usb_Video_Class数据流,并发送给FIFO;
FIFO,用于向图像数据处理模块发送控制信号,接收到的Usb_Video_Class数据流被USB控制器读取。
所述图像数据获取模块为感光设备Sensor。
所述Sensor发送给图像数据处理模块的信号有:Sensor输出的用作图像数据处理模块的工作时钟的时钟信号Pclk、用于表示一幅新图像是否开始的帧同步Vsync信号、用于表示一幅图像的最后一行是否开始的行同步Hsync信号、8位图像数据信号Data[7:0];
所述图像数据处理模块发送给FIFO的信号有:用于标识加有字节使能Byten[3:0]的Usb_Video_Class数据流DA[35:0]是否写入FIFO的写使能Wren、加有字节使能Byten[3:0]的Usb_Video_Class数据流DA[35:0];其中字节使能用于标识加了微帧头的数据即Usb_Video_Class数据流Data[31:0]中哪些字节有效;
所述FIFO发送给图像数据处理模块的信号有空Empty信号,在空Empty信号有效时,所述图像数据处理模块对获得的图像数据加微帧头。
所述FIFO发送给图像数据处理模块的信号还有快空AlmostEmpty信号,在快空AlomstEmpty信号有效时,所述图像数据处理模块缓存所述获得的图像数据。
所述FIFO发送给图像数据处理模块的信号还有满Full信号,在满Full信号有效时,所述图像数据处理模块将标识有错误的微帧头写入所述FIFO,且当前这一图像帧内不再写入图像数据。
在所述帧同步Vsync信号无效后,在图像数据结束后补加微帧头。
所述图像数据处理模块由选择器和缓存器Buf组成。
由上述技术方案可见,本发明通过FIFO的控制,对接收到的图像数据加微帧头,以形成Usb_Video_Class数据流,然后将Usb_Video_Class数据流经FIFO后被USB控制器(Usb core)读取,从而实现了Usb_Video_Class数据流地无驱传输。
【附图说明】
图1是UVC协议中规定的Usb_Video_Class数据流的格式示意图;
图2是本发明图像数据传输装置实施例的组成结构示意图;
图3是本发明图像数据传输装置实施例中图像数据处理模块的原理示意图。
【具体实施方式】
图2是本发明图像数据传输装置实施例的组成结构示意图,如图2所示,包括:图像数据获取模块、图像数据处理模块和先进先出存储器(FIFO)。
图像数据获取模块,用于获取图像数据,并发送给图像数据处理模块。对于无驱摄像头,图像数据获取模块为感光设备(Sensor)。
图像数据处理模块,用于在FIFO的控制下,对接收到的图像数据加微帧头,以形成Usb_Video_Class数据流,并发送给FIFO。
FIFO,用于向图像数据处理模块发送控制信号,接收到的Usb_Video_Class数据流被USB控制器(Usb core)读取。
本领域技术人员知道,最后图像数据经Usb core打包后,经由物理层(Phy)发给主机。
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
如果图像数据获取模块为感光设备Sensor,Sensor发送给图像数据处理模块的信号有:Sensor输出的用作图像数据处理模块的工作时钟的时钟信号(Pclk)、用于表示一幅新图像是否开始的帧同步信号(Vsync)、用于表示一幅图像的最后一行是否开始的行同步信号(Hsync)、8位图像数据信号(Data[7:0]);
图像数据处理模块发送给FIFO的信号有:写使能(Wren)、加有字节使能(Byten[3:0])的Usb_Video_Class数据流DA[35:0],其中Usb_Video_Class数据流为32bit(Data[31:0]),字节使能为4bit(Byten[3:0])并位于DA[35:0]的高4位即DA[35:32]=Byten[3:0]。
其中,Wren是图像数据处理模块内部产生的信号,在图像数据处理模块中,用于标识加了微帧头的图像数据与字节使能的数据合并后的36bits数据DA[35:0]={Byten[3:0],DATA[31:0]}是否写入FIFO,当Wren有效时,将DA[35:0]写入FIFO。
字节使能(Byten[3:0]):Byten[3:0]用于标识加了微帧头的数据即Usb_Video_Class数据流(Data[31:0])中哪些字节有效。例如Byten[3:0]=4’b0011,表示DATA[31:0]中的DATA[15:0]有效;另外,在主机接收到Byten[3:0]=4’b0011即DA[35:32]=4’b0011时,主机在当前微帧内不再请求,那这一微帧为空帧(只有微帧头,没有图象数据)。
Usb_Video_Class数据流(Data[31:0]):Data[31:0]为加好payload header的32bit宽的Usb_Video_Class数据流。
FIFO发送给图像数据处理模块的信号有:空(Empty)信号。在图像数据处理模块检测到Empty信号有效时,图像数据处理模块对图像数据加payload header。进一步地,FIFO发送给图像数据处理模块的信号还可以有:快空(AlmostEmpty)信号。在图像数据处理模块检测到AlmostEmpty信号有效时,图像数据处理模块对图像数据进行缓存操作。进一步地,FIFO发送给图像数据处理模块的信号还可以有:FIFO满(Full)信号。在图像数据处理模块检测到Full信号有效时,将标识有错误的payload header写入FIFO,这一图像帧内不再写入图像数据。
需要说明的是,图2所示的装置中,涉及各模块的信号仅示意出了与本发明相关的信号,其它信号如控制器如单片机发送给图像数据处理模块的控制其工作使能的复位(RST_n)信号、寄存器控制信号(Register control signal)等未在图2中示出,对于这些信号的使用,是本领域技术人员的惯用技术手段,这里不再详述。
图2所示本发明装置实施例的工作原理为:
图像数据处理模块根据接收到的Vsync信号和Hsync信号确定payloadheader的值。比如:当Vsync信号有效如由低变高时,表示一幅新图像的开始,假设微帧头的取值为0x0280,在Hsync信号标识最后一行有效时,表示一幅图像即将结束,微帧头的取值为0x0282;在Vsync信号从无效又变为有效时,表示另一幅新图像的开始,此时微帧头的取值翻转为0x0281,在Hsync信号标识最后一行有效时,表示这一幅图像即将结束,微帧头的取值为0x0283。上述确定payload header的值只是一种方法,还有其它很多方法,对于本领域技术人员来讲是容易实现的,这里只是举例说明,并不用于限定本发明。在微帧头的取值中,0x表示十六进制;0x02表示微帧头的尺寸,单位是字节。低字节的最高有效位为1,表示payload header只有一个字节头域(BFH,bits field head);低字节的最低有效位对应图像帧标识,对于新图像帧,该位翻转;低字节的次低有效位标识一幅图像帧里的最后一个微帧,当微帧为图像帧的最后一个微帧时次低有效位置“1”。
从payload header的值的确定方法可以看出,在同一幅图像中,最后一行之前,如果需要加payload header,其值与图像刚开始时的值是一致的。
本发明装置在以下三种情况需要对图像数据加payload header:
(1)在图像数据处理模块检测到Empty信号有效时,图像数据处理模块对图像数据加payload header。这里Empty信号有效是指FIFO的写指针变化读指针追上写指针或者写指针不动读指针追上写指针的情况;
(2)由于一个微帧头带三个数据包即三个payload data,其中每个数据包最大为1024字节,因此,在连续3070字节图像数据时需要加微帧头。当计数器对图象数据计数3070字节时,图像数据处理模块会产生一连续写3070字节信号,并在产生该连续写3070字节信号时,对图像数据加payload header。
(3)很明显,在新图像帧开始需要加微帧头。图像数据处理模块根据接收到的Vsync信号和Hsync信号,判断出为新图像时,对图像数据加payloadheader。
进一步地,由于FIFO自身为异步时钟读写,其中,读时钟为USB core的工作时钟,写时钟为图像数据处理模块的工作时钟,因此,当图像数据处理模块检测到FIFO的空信号Empty信号有效时,FIFO中可能还有图像数据。FIFO中,AlmostEmpty信号在Empty信号之前出现,为了保证FIFO在Empty信号出现时,FIFO中没有图像数据,当图像数据处理模块检测到AlmostEmpty信号有效时,先将图像数据存入缓存(buffer)中,待检测到Empty信号有效时,再将加了payload header的数据发送给FIFO。缓存可以采用8x8bit,或16 x8bit等的缓存,只要满足在Empty信号有效时,FIFO中为真空即可。
另外,很难判断何时出现最后一个微帧,而且UVC协议也没有明确规定,因此,本发明中,对于一幅图像帧里的最后一个微帧头,在图像数据结束后补加,即在Vsync变低即无效后再加最后一个微帧头。
进一步地,在图像数据处理模块检测到Full信号有效时,说明有错误的payload header写入FIFO,这一图像帧内不再写入图像数据。
图3是本发明图像数据传输装置实施例中图像数据处理模块的原理示意图,如图3所示,图像数据处理模块可以由选择器和缓存器(Buf)简单示意。
其中,假设Buf2是32bit的缓存器,Buf3是16bit缓存器,Buf4是32bit缓存器;选择器2、选择器3和选择器4均为二选一选择器,选择器1为五选一选择器。需要说明的是,此时,选择器2对输入信息处于直通工作方式。
来自Sensor的8bit宽的图像数据经选择器2后进入Buf2,叠加成32bit宽的图像数据;选择器1在Vsync信号、Hsync信号和Empty信号的控制下,选择微帧头,并经Buf3后成为16bit宽的微帧头;
32bit宽的图像数据和16bit宽的微帧头进入选择器3,在来自FIFO的Empty信号有效,或者连续写完3070字节信号有效时,选择器3选择微帧头输出给Buf4,其它情况下,选择图像数据输出给Buf4。
在Buf4中,32bit宽的图像数据和16bit宽的微帧头叠加成32bit宽的Usb_Video_Class数据流,并通过选择器4传送给FIFO。正常情况下,来自FIFO的Full信号时是无效的,选择器4选择来自Buf4的数据输出给FIFO;只有在出现异常如设计出错时,Full信号有效,这时,在Full信号的控制下,选择器1选择输出的标识有错误的0x02c0给Buf3,而选择器4选择来自Buf3的标识有错的微帧头输出给FIFO,并且在这一图像帧内不再写入图像数据。
进一步地,图像数据处理模块还可以包括Buf1,用于对来自Sensor的图像数据进行缓存,并在来自FIFO的AlomstEmpty信号有效时,选择器2选择输出来自Buf2的图像数据。Buf2可以是8×8bit的缓存器,或者16×8bit的缓存器。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应包含在本发明的保护范围之内。