一种实现无驱图像数据传输的装置、USB设备和方法
技术领域
本发明涉及USB图像视频设备数据传输技术,特别涉及一种实现无驱图像数据传输的装置、USB设备和方法。
背景技术
目前,数码摄像技术和网络视频技术越来越普及,这就使得连接于计算机的USB图像视频设备越来越多。USB图像视频设备的广泛应用,使得人们对其易用性提出了更高的要求。USB图像视频设备的核心处理芯片为带有USB单元的图像处理芯片,USB单元提供相应的USB接口,通过USB接口可以向计算机进行图像数据的传输。USB图像视频设备与计算机相连接时,通过安装相应的驱动程序可以实现该设备的图像传输与识别功能。但是,随着USB图像视频设备的日益增多,计算机经常与不同厂家品牌的USB图像设备相连,并且同一个USB图像视频设备可能被频繁的应用于不同的计算机,在这种情况下,为每一个图像视频设备分别安装驱动程序给设备的使用带来了较大麻烦,不利于USB图像视频设备的普及推广。
通用串行总线(USB,Universal Serial Bus)协议中,除了通用的软硬件电气接口规范等,还包含了各种各样的类(Class)协议,用来为不同的功能定义各自的标准接口,以及具体的总线上的数据交互格式和内容。其中USB视频类(UVC,USB Video Class)协议的提出给USB图像视频设备提供了一个统一的数据交换规范。应用UVC协议,可以使各个厂商生产的USB图像视频设备在连接计算机后,被计算机操作系统直接识别,无须驱动而直接使用。应用UVC协议进行图像数据传输需要计算机和图像视频设备均支持UVC协议。目前,在计算机一端,Windows XP SP2以上的操作系统已经能够支持UVC协议,计算机通过向符合UVC协议的USB图像视频设备发送请求获得该设备相应的属性配置,从而自动识别该设备,并且计算机能够对符合UVC协议的图像数据进行识别和处理,最终还原成图像。而在USB图像视频设备一端,还需要对其处理芯片进行改进,使其输出的图像数据符合UVC协议的规定,才能实现USB图像视频设备在连接计算机时可以无驱使用,而目前尚没有较好的实施方案能够令USB图像视频设备实现此功能。所以,要实现USB图像视频设备无驱传输,对USB图像视频设备进行改进是亟待解决的主要问题。
发明内容
有鉴于此,本发明的主要目的在于提供一种实现无驱图像数据传输的装置,应用该装置可以使USB图像视频设备在连接计算机时无驱使用。
本发明的另一目的在于提供一种实现无驱图像数据传输的USB设备和方法,应用该USB设备和方法可以使USB图像视频设备在连接计算机时无驱使用。
为达到上述目的,本发明的技术方案具体是这样实现的:
本发明公开了一种实现无驱图像数据传输的装置,该装置包括USB视频类(UVC)单元、USB单元和微处理器(MCU)单元;
所述MCU单元向UVC单元输送写控制信息;
所述UVC单元接收图像数据,在USB单元和所述写控制信息的控制下,根据UVC协议对图像数据进行加包头操作,并将加包头后的图像数据传送到USB单元;
所述USB单元将接收的所述加包头后的图像数据传送给计算机处理。
所述UVC单元中包括UVC加包头模块、转换传感器模块和寄存器模块;
所述寄存器模块存储来自MCU单元的写控制信息;
所述转换传感器模块在USB单元的控制下,读取寄存器模块内存储的写控制信息,接收图像数据,判断图像帧的使能、开始和结束信号,对图像数据进行位数转换,将转换后的图像数据与使能、开始和结束信号一起输出给UVC加包头模块;
所述UVC加包头模块读取寄存器模块存储的写控制信息,并根据来自转换传感器模块的使能、开始和结束信号提供的信息对转换传感器模块输出的图像数据进行加包头操作,并在USB单元的控制下将加包头后的图像数据写入USB单元。
所述USB单元中包括先入先出存储器(FIFO)模块,所述FIFO模块包括A、B两个缓冲区、输入缓冲控制器和输出缓冲控制器;
所述输入缓冲控制器受到USB单元内部信号的控制,当有新的微帧开始时,控制图像数据的写入存储操作在A缓冲区和B缓冲区之间切换,并且当A缓冲区和B缓冲区的其中一个缓冲区满时向UVC单元输出FIFO满信号;
输出缓冲控制器,受到USB单元内部信号的控制,当有新的微帧开始时,控制图像数据的读出操作在A缓冲区和B缓冲区之间切换,在向A缓冲区和B缓冲区的其中一个缓冲区写入图像数据时,控制另一个缓冲区中的图像数据被USB单元读出。
所述UVC加包头模块中包括缓存模块,当FIFO模块满时,将加包头后的图像数据暂时存入缓存模块,等待FIFO模块中的图像数据被读出后,再继续将缓存模块中的图像数据写入FIFO模块。
所述UVC单元中包括同步模块,同步模块从USB单元获得表示微帧开始的信号和表示USB单元内FIFO模块满的信号,经过同步之后将其提供给UVC加包头模块。
所述UVC单元中包括测试传感器模块,在对所述装置进行测试时模拟产生测试用图像数据,并将其输入给转换传感器模块。
本发明还公开了一种实现无驱图像数据传输的USB设备,包括图像传感器,该USB设备还包括无驱图像数据传输装置,所述无驱图像数据传输装置包括USB视频类(UVC)单元、USB单元和微处理器(MCU)单元;
所述图像传感器向UVC单元输送图像数据;
所述MCU单元向UVC单元输送写控制信息;
所述UVC单元接收图像数据,在USB单元和所述写控制信息的控制下,下,根据UVC协议对图像数据进行加包头操作,并将加包头后的图像数据传送到USB单元;
所述USB单元接收来自经UVC单元处理后的图像数据,并将其传送给计算机。
所述UVC单元中包括UVC加包头模块、转换传感器模块和寄存器模块;
所述寄存器模块存储来自MCU单元的写控制信息;
所述转换传感器模块在USB单元控制下,读取寄存器模块内存储的写控制信息,接收图像数据,判断图像帧的使能、开始和结束信号,对图像数据进行位数转换,将转换后的图像数据与使能、开始和结束信号一起输出给UVC加包头模块;
所述UVC加包头模块读取寄存器模块存储的写控制信息,并根据来自转换传感器模块的使能、开始和结束信号提供的信息对转换传感器模块输出的图像数据进行加包头操作,将加包头后的图像数据写入USB单元。
所述USB单元中包括先入先出存储器(FIFO)模块,所述FIFO模块包括A、B两个缓冲区、输入缓冲控制器和输出缓冲控制器;
所述输入缓冲控制器受到USB单元内部信号的控制,当有新的微帧开始时,控制图像数据的写入存储操作在A缓冲区和B缓冲区之间切换,并且当A缓冲区和B缓冲区的其中一个缓冲区满时向UVC单元输出FIFO满信号;
所述输出缓冲控制器受到USB单元内部信号的控制,当有新的微帧开始时,控制图像数据的读出操作在A缓冲区和B缓冲区之间切换,在向A缓冲区和B缓冲区的其中一个缓冲区写入图像数据时,控制另一个缓冲区中的图像数据被USB单元读出。
所述UVC加包头模块中包括缓存模块,当FIFO模块满时,将加包头后的图像数据暂时存入缓存模块,等待FIFO模块中的图像数据被读出后,再继续将缓存模块中的图像数据写入FIFO模块。
所述UVC单元中包括同步模块,同步模块从USB单元获得表示帧的开头的信号和表示USB单元内FIFO模块满的信号,经过同步之后将其提供给UVC加包头模块。
所述UVC单元中包括测试传感器模块,在对所述USB设备进行测试时模拟产生测试用图像数据,并将其输入给转换传感器模块。
本发明还公开了一种实现无驱图像数据传输的方法,该方法包括以下步骤:
A、接收图像数据;
B、按照USB视频类UVC协议的规定设计UVC包头,对接收到的图像数据进行加包头操作,将加包头后的图像数据写入USB单元;
C、USB单元将加包头后的图像数据读出给计算机。
为所述包头设定四个数据值,分别是第一数据值、第二数据值、第三数据值和第四数据值;
每当有新的微帧开始时其赋值在第一数据值和第二数据值之间变化一次;
每当有微帧结束时其赋值在第三数据值和第四数据值之间变化一次,第三数据值和第四数据值分别与对应第一数据值和第二数据值对应。
所述步骤B包括:
B1、计算机对USB设备进行枚举,判断枚举是否完成,如果是,执行步骤B2,否则继续执行枚举过程;
B2、如果USB单元的中最后一个微帧是只有包头数据而没有图像数据的空头数据,则先清除该空头数据,然后向USB单元依次写入包头数据和图像数据,如果USB单元中的最后一个微帧既有包头数据又有图像数据,则直接向USB单元依次写入包头数据和图像数据,如果写入的图像数据是一个微帧的开始或者是一个微帧的结束,包头数据中表示一个微帧开始或者是一个微帧结束的字节数值随之变化;
B3、判断是否有微帧开始到来,如果是,执行步骤B4,否则返回步骤B2;
B4、停止图像数据写入,延迟一定的时钟周期,等待上一个微帧写入的数据被读出;
B5、写入一个空头数据,该空头数据只包含包头数据而不包含图像数据的,然后返回步骤B2;
所述步骤C包括:
有微帧开始到来时,USB单元依次读出包头数据和图像数据,并传送给计算机。
所述步骤B4包括以下步骤:
在延迟期间把图像数据存入缓存模块。
步骤B所述将加包头后的图像数据输入USB单元的方法是:设置两个缓冲区存储加包头后的图像数据,向其中一个缓冲区写入加包头后的图像数据,同时读取另一个缓冲区中的数据,在每一个微帧开始时对进行写入和读取操作的两个缓冲区进行切换。
由上述的技术方案可见,本发明采用UVC加包头模块,根据目前已公布的UVC协议对图像数据进行加包头操作,然后再通过USB单元传送给计算机,因为在Windows XP SP2以上的操作系统支持UVC协议,所以计算机能够识别和处理加包头后的图像数据,最终还原成图像,从而实现USB图像视频设备无需驱动而直接使用。本发明还在USB单元中采用一个乒乓操作的FIFO模块,减小了芯片面积和制造成本,并且在UVC加包头模块中加入缓存模块,防止了乒乓操作过程中数据的丢失。
附图说明
图1为本发明的一个较佳实施例的组成结构图。
图2为图1所示实施例中FIFO模块的组成结构图。
图3为图1所示实施例中UVC协议微帧组成结构图。
图4为图1所示实施例中图像数据微帧时间关系图。
图5为图1所示实施例中UVC单元加包头的处理流程图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
本发明公开的装置采用UVC电路中的UVC加包头模块,根据目前已公布的UVC协议对图像数据进行加包头后再通过USB单元传送给计算机。具有该装置的USB设备通过图像传感器把图像转换成图像数据,将图像数据经过该装置进行加包头处理,输出的加包头后的图像数据符合UVC协议的规定,因为在Windows XP SP2以上的操作系统已经支持UVC协议,所以使得具有该装置的USB设备可以在连接计算机后无需驱动而直接使用。
图1为本发明无驱图像数据传输装置的一个较佳实施例的组成结构示意图。如图1所示,本发明图像数据传输装置包括:UVC单元11、USB单元12和微处理器(MCU)单元13。UVC单元11与图像传感器模块以及MCU单元13相连。图像传感器模块向UVC单元11提供图像数据,MCU单元13向UVC单元11输送写控制信息,UVC单元11接收图像数据,在USB单元12和写控制信息的控制下,根据UVC协议对图像数据进行加包头操作,并将加包头后的图像数据传送到USB单元12。USB单元12把来自UVC单元11的加包头后的图像数据传送给计算机。
在UVC单元11内部,包括:UVC加包头(uvc header)模块111、同步模块112、转换传感器模块113、寄存器模块114和测试传感器模块115。
MCU单元13对寄存器模块114进行初始化和配置,控制UVC单元11的复位、使能以及垂直同步信号取反等功能,并且通过mcu_wr、mcu_data[7:0]、mcu_addr[7:0]三个信号将写控制信息存入寄存器模块114。转换传感器模块113和UVC加包头模块111读取寄存器模块114存储的写控制信息。
图像传感器单元是UVC单元11的外部数据来源,通过sensor_test、sensor_vsync、sensor_hsync、sensor_data[7:0]四个信号与转换传感器模块113相连,为转换传感器模块113提供8位图像数据。其中sensor_vsync和sensor_hsync两个信号分别提供图像数据的垂直和水平同步信息。转换传感器模块113在USB单元12的控制下,通过enum_end信号获得枚举完成的信息后,接收图像传感器单元提供的图像数据,首先通过分析sensor_vsync和sensor_hsync两个信号提供的信息,对图像帧的使能(enable)、开始(start)和结束(end)等信号进行判断,然后将图像传感器单元的8位图像数据转换为16位图像数据。转换传感器模块113通过五个信号与UVC加包头模块111相连,分别是:frame_en、frame_start、frame_end、sensor_uvc_wr、sensor_uvc_data[15:0]。通过以上五个信号,转换传感器模块113将16位图像数据及其写信号和enable、start、end信号一起输出给UVC加包头模块111。UVC加包头模块111读取寄存器模块存储的写控制信息,并根据enable、start、end信号提供的信息对16位图像数据进行加包头操作。UVC加包头模块111通过uvc_wr、uvc_byten、uvc_data[31:0]三个信号与USB单元12相连,通过这三个信号将加包头后的图像数据写入USB单元12。USB单元12再将图像数据传送给计算机。
由于UVC单元11和USB单元12属于不同的时钟域,为使二者达到更好的同步效果,可以在UVC单元11中加入同步模块112。同步模块112从USB单元12获得表示微帧开始的sof_flag信号和表示FIFO模块121满的uvc_fifo_full信号,经过同步之后将其提供给UVC加包头模块111使用。
USB单元12内部包括先入先出存储器(FIFO)模块121,接收UVC加包头模块111输出的uvc_wr、uvc_byten和uvc_data[31:0]信号,存储加包头后的图像数据。USB单元12从FIFO模块121内读取加包头后的图像数据,并传送给计算机。
图2为图1所示实施例中FIFO模块的内部结构图。在本发明中FIFO模块采用乒乓操作,设置两个缓冲区,通过两者反复切换,分别与UVC单元11和USB单元12进行交替的数据传输。如图2所示,FIFO模块121包括:A缓冲区1211、B缓冲区1212、输入缓冲控制器1213和输出缓冲控制器1214。输入缓冲控制器1213通过uvc_wr、uvc_byten和uvc_data[31:0]三个信号接收UVC11单元输出的加包头后的图像数据,并受到USB单元12内部的sof_flag信号控制,控制加包头后的图像数据写入A缓冲区1211或B缓冲区1212。每一个微帧的时钟周期USB单元12产生一个sof_flag信号,同时输送给UVC单元11、输入缓冲控制1213和输出缓冲控制器1214,表示一个新的微帧开始。每当有新的微帧开始时,输入缓冲控制器1213即在A缓冲区1211和B缓冲区1212之间进行一次切换。同时,在A缓冲区1211或B缓冲区1212中的其中一个缓冲区满时,输入缓冲控制器1213向UVC单元11输出表示FIFO满的信号uvc_fifo_full,UVC单元11收到uvc_fifo_full信号后停止向FIFO模块写入图像数据的操作。输出缓冲控制器1214受到USB单元内部的sof_flag信号控制,控制加包头后的图像数据从A缓冲区1211或B缓冲区1212中读出。每当有新的微帧开始时,即控制图像数据的读出操作在A缓冲区1211或B缓冲区1212中进行一次切换。当输入缓冲控制器1213控制加包头后的图像数据向A缓冲区1211中写入时,输出缓冲控制器1214控制B缓冲区1212中的图像数据被USB单元12读出;反之,当图像数据向B缓冲区1212中写入时,输出缓冲控制器1214控制A缓冲区1211中的图像数据被USB单元12读出。
在现有技术中,FIFO模块只有一个缓冲区,当缓冲区满时输出FIFO满信号。由于在满信号输出过程中仍有数据写入FIFO,则会造成数据丢失。本发明采用乒乓操作的FIFO模块,设置两个缓冲区,通过两者反复切换,将图像数据没有停顿的送到USB单元,防止数据丢失。另一方面,由于本发明的A、B两个缓冲区同时工作,缓冲空间始终处于高利用率,因而可以减小缓冲区空间。本发明中FIFO模块的缓冲空间只需要现有技术中FIFO模块的一半,从而减小了芯片面积,并且降低了传输电路的制造成本。
参见图1,为了防止在乒乓操作中数据丢失,在UVC加包头模块111中加入缓存模块1111。当uvc_fifo_full信号显示FIFO模块121满时,将加包头后的图像数据暂时存入缓存模块1111,等待USB单元12将FIFO模块121中的图像数据读出后,再继续将缓存模块1111中的图像数据写入FIFO模块121中。
为了UVC单元11的测试方便,还可以在UVC单元11内部加入测试传感器模块115。测试传感器模块115通过三个信号与转换传感器模块113相连,分别是:mysensor_vsunc、mysensor_hsync和mysensor_data[7:0]。在对UVC单元11进行测试时,测试传感器模块115模拟一个真实图像传感器产生图像数据,而不需要连接图像传感器,测试传感器模块115通过以上三个信号将模拟图像数据输入给转换传感器模块113,为其提供测试用的图像数据。
在现有技术的USB协议中规定,当USB设备连接到计算机之后,为了让计算机了解USB设备特征,首先进行枚举过程。主机向USB设备发送查询命令,USB设备向计算机返回带有设备特征的描述符。根据现有技术的USB协议,本发明采用同步传输(isochronous transfer),并且描述符设置为:
接口数(interface number)为2。其中:接口0(interface 0)是视频控制(video control)相关接口;interface 1是视频流(video streaming)相关接口。
端点数(endpoint number)为2。其中:端点0(endpoint 0)是MCU单元对USB单元的控制端点;endpoint 1是数据传输相关端点。
配置(configure)信息为:视频格式(video format)配置为YUV422格式;图像帧大小(video frame)配置为640×480、352×288、320×240、176×144和160×120。
在应用图1所示装置进行数据传输时,获取图像数据之后,先根据UVC协议设计UVC包头,对图像数据加包头,再将加包头后的图像数据输入FIFO模块,USB单元从FIFO模块中读取加包头后的图像数据。
目前的UVC协议中规定,一副完整的图像是由若干个微帧(SOF Packet)组成。当计算机需要USB设备传送数据的时候,向USB设备发出IN请求。USB设备根据计算机的IN请求,以微帧的形式向计算机发送数据。现有技术中UVC协议规定的微帧组成结构如图3所示,IN表示IN请求,每个IN请求后面跟随一个IN包组成一组,IN包由UVC包头和数据包(DATA)组成,或者只由数据包构成。在每个微帧内包含一至三个上述IN请求加IN包组。每个IN包内的最大数据长度为1000字节。每个微帧内包含一个2字节宽的UVC包头,位于第一个IN包内。每个微帧的第一个IN包由UVC包头和数据包两部分组成,该微帧的其余IN包内部没有UVC包头,只由数据包组成。
根据UVC协议,本发明设定UVC包头的数据长度为2字节。为UVC包头设定四个数据值,分别是第一数据值、第二数据值、第三数据值和第四数据值,此处以0x0280、0x0281、0x0282或0x0283为例。每当有新的微帧开始时UVC包头的数据值在第一数据值和第二数据值之间变化一次,即0x0280与0x0281交替变化;每当微帧结束时UVC包头的数据值在第三数据值和第四数据值之间变化一次,即0x0282与0x0283交替变化,并且0x0282对应0x0280,0x0283对应0x0281。在UVC包头的数据值中,0x表示十六进制,02表示微帧的包头的尺寸,单位是字节。低字节的最高有效位为1,表示UVC包头数据只有一个头的位域(bits field head,BFH),即头尾数据在0280到0283之间;最低有效位对应图像帧标识,新微帧到来时该位翻转;次低有效位标识一幅图像帧里的最后一个微帧,当微帧为图像帧的最后一个微帧时次低有效位置“1”。
本发明传输图像数据的微帧时间关系如图4所示。根据UVC协议,每一个微帧开始(SOF)之间的发送间隔是125us。本发明的微帧时间关系设计如下:一个完整的微帧传输时间为56us。一个微帧的末尾到下一个微帧的SOF之间的时间为69us。在一个微帧内部,SOF开始到第一个IN请求到来之间的时间为500ns,IN请求和IN包之间的时间为210ns,IN包和下一个IN请求之间的时间为184ns。则一个完整的IN请求加IN包组的传输共需18000ns。
上述设计仅为图像数据微帧的一个较佳实施例,也可以选择其它不同的UVC包头数据值和微帧时间关系,只要符合UVC协议的规定,都可以实现无驱传输。
图5为图1所示实施例中UVC单元加包头的处理流程图。在UVC启动之后,以一个微帧开始(SOF)作为一次完整传输的标志,对图像数据进行加包头操作。如图5所示,加包头的处理流程包括以下步骤:
步骤501:当系统复位后,UVC单元处于空闲(IDLE)状态。
步骤502:计算机对USB设备进行枚举,通过向USB设备发送请求获得该设备的相应属性配置,枚举完成后frame_en=1。判断枚举是否完成,如果是,启动UVC单元,然后执行步骤503,否则继续执行枚举过程。
步骤503:在新的SOF到来之前,向FIFO模块中写入缓存模块中的数据和图像传感器输出的图像数据,写入图像数据前对其进行加包头操作。如果FIFO模块中的最后一个微帧是只有包头数据而没有图像数据的空头数据,首先令FIFO模块的写地址归0,清除该空头数据,然后向FIFO模块中依次写入2字节的包头数据和2字节的图像数据,共占用4字节;如果FIFO模块中的最后一个微帧既有包头数据又有图像数据,则直接向USB单元依次写入包头数据和图像数据。如果写入的图像数据是一个微帧的开始,则包头数据值要随之变化,即包头数据值在0x0280和0x0281之间轮换;如果写入的图像数据是一个微帧的结束,则包头数据值也要随之变化,即包头数据值在0x0282和0x0283之间轮换。
步骤504:判断是否有新的SOF到来,即判断是否sof_flag=1,如果是,执行步骤505,否则返回步骤503。
步骤505:停止对FIFO模块的图像数据写入操作,延迟一定的时钟周期,等待USB单元把FIFO模块内上一个微帧写入的数据读走。例如可以延迟32个时钟周期。
在步骤505中,为了防止图像数据的丢失,在写入操作延迟期间可以把图像数据存入UVC加包头模块的缓存模块中。
步骤506:延迟时间结束后,UVC单元向FIFO模块写入空头数据。该空头数据长度为2字节,只包含UVC包头数据而不包含图像数据。因为在当前的SOF可能处在空白时间(blank time),即当前没有图像数据,所以写入空头数据作为一个SOF开始的标志。
在步骤506之后,返回步骤503,此后加包头的流程在步骤503到步骤506之间循环执行。
当有帧的开始SOF到来时,FIFO的两个缓冲区进行一次读写切换,USB单元依次读出包头数据和图像数据,并传送给计算机。
由上述实施例可见,本发明根据目前已公布的UVC协议,采用UVC加包头模块对图像数据进行加包头操作,然后传送给计算机,因为WindowsXP SP2以上的操作系统支持UVC协议,所以计算机能够对加包头后的图像数据进行识别和处理,最终还原成图像,从而实现USB图像视频设备无需驱动,连接计算机后可以直接使用。本发明还在USB单元中采用一个乒乓操作的FIFO模块,减小了芯片面积和制造成本,并且在UVC加包头模块中加入缓存模块,防止乒乓操作过程中数据的丢失。
总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。