CN106034199B - 一种模拟数据源的图像采集装置和方法 - Google Patents
一种模拟数据源的图像采集装置和方法 Download PDFInfo
- Publication number
- CN106034199B CN106034199B CN201510119592.3A CN201510119592A CN106034199B CN 106034199 B CN106034199 B CN 106034199B CN 201510119592 A CN201510119592 A CN 201510119592A CN 106034199 B CN106034199 B CN 106034199B
- Authority
- CN
- China
- Prior art keywords
- module
- state
- data
- descriptor
- packet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Communication Control (AREA)
Abstract
本申请公开了一种模拟数据源的图像采集装置和方法,包括:相机和上位机、相机控制模块、模拟数据源模块、采集控制模块、数据包读写控制模块、数据包缓存fifo模块、DMA接口fifo模块、DMA控制器模块、PCIE协议模块。利用本发明技术方案既可以实现CameraLink接口的外接工业相机的高速数据采集,也可通过软件来配置采集卡内部的模拟数据源模块,实现FPGA内部数据源的采集。另外,实现了一种DMA传输管理的算法,提高了DMA传输的连续性,从而提高了传输带宽。借助于本发明的上述技术方案,可以将高速相机和片内模拟数据源产生的高速率数据实时采集到上位机中,win7环境下数据传输带宽达1000MB/S。
Description
技术领域
本申请属于图像采集领域,特别是涉及一种模拟数据源的图像采集装置和方法
背景技术
图像采集卡,一般是一种用于将数字相机的数字图像信号实时采集到上位机的电路板卡。为了满足高分辨率、高帧率图像的实时采集,采集卡一般通过内置的DMA控制器与上位机内存通过pcie进行高速数据传输。目前技术中,为了便于硬件升级和维护,图像采集卡的主控芯片大都采用FPGA实现,而工业相机的数据带宽一般在500MB/S以上,因此对FPGA的采集和传输的逻辑电路设计和对应的驱动程序要求很高。
为了提高数据传输带宽,硬件上,采集卡和上位机一般采用PCIE通信。如图1所示,其为一种典型的基于FPGA的图像采集卡结构框图。其中,FPGA内部一般包括前端采集控制模块、DMA控制器模块和PCIE协议模块。CMOS相机数据经过Camera Link接口进入FPGA的采集控制模块,然后DMA控制器将数据封装到PCIE事务包(TLP)中,根据PCIE规范,采集卡向PC机发送存储器写请求事务TLP,PC内存控制器收到后将TLP中的数据存入指定内存地址中。
软件上,采集卡作为PC系统的一种外设需要相应的驱动程序。由于采集卡与PC机的数据传输由DMA控制器控制,因此windows驱动程序对DMA引擎的控制和管理很关键。如图2所示,其为一种典型的基于微软WDF驱动开发模型的DMA驱动架构。阶段101中,创建并初始化驱动对象,然后申请公共缓冲;阶段102中,当上层发出IO请求后,驱动创建并初始化DMA事务对象并执行DMA事务,一次DMA传输事务表示应用程序缓冲区完成的一次接收,如果应用程序缓冲区比较大,而硬件支持的传输单位比较小,则一次DMA传输事务需要硬件上的多次传输才能完成;阶段103中,对设备DMA传输相关的寄存器如源地址、目的地址、传输长度等进行编程,再开启设备传输。每完成一次传输,向CPU提交一次中断,在中断DPC(延迟过程调用)中判断DMA事务是否结束。之后循环执行阶段103直到DMA事务结束。
上述现有技术存在三个问题:一、采集卡自身不带数据源,必须通过外部相机提供数据,不方便系统的采集传输测试;二、对于驱动程序,当用户缓冲区比较大时,由于设备与主机的每次传输的数据量大小是固定的,具体取决于windows内map寄存器的个数和应用层接收缓冲的大小。那么每完成一次DMA事务可能需要多次硬件传输,这意味着每完成一次用户缓冲区的接收,需要多次对DMA寄存器编程,设置新的目的地址,再次开启传输。这降低了DMA的传输带宽。三、每完成一次DMA传输事务,需等待应用程序处理完接收到的数据后,才重新编程DMA寄存器,开启下一次DMA传输事务,从而造成了DMA传输带宽的浪费。
发明内容
本发明的目的在于提供一种模拟数据源的图像采集装置和方法,以克服现有技术中的不足。
为实现上述目的,本发明提供如下技术方案:
本申请实施例公开了一种模拟数据源的图像采集装置,包括:
相机和上位机;
相机控制模块,通过Xilinx的Picoblaze嵌入式软核微控制器和Uart软核实现上位机和相机的串行通信,用来控制相机内部参数;
模拟数据源模块,在上位机软件的控制下可产生加1模式、竖条纹模式、横条纹模式和棋盘模式图像;
采集控制模块,在上位机软件的控制下采集指定的数据源的数据,同时根据用户指令决定是否加入图像帧头;
数据包读写控制模块,从采集控制模块的输出fifo中读出一个数据包,将其缓存到数据包缓存fifo模块中,再从数据包缓存fifo模块中把数据转化为DMA规定的格式输入到DMA接口fifo模块中;
数据包缓存fifo模块;
DMA接口fifo模块;
DMA控制器模块,把DMA接口fifo模块中的数据封装为存储器写请求事务TLP,然后通过PCIE协议模块发送给上位机,最终传输到指定的内存处;
PCIE协议模块。
优选的,在上述的模拟数据源的图像采集装置中,所述DMA控制器模块和PCIE协议模块分别采用了NorthWest和Xilinx的IP核。
优选的,在上述的模拟数据源的图像采集装置中,所述DMA控制器模块包括:
C2S传输通道:数据从设备传往host机;
S2C传输通道:数据从host机传往设备;
描述符处理逻辑:获取保存于host机中的描述符并根据描述符内部字段执行对应的数据传输;
控制寄存器:驱动程序通过控制寄存器控制DMA。
优选的,在上述的模拟数据源的图像采集装置中,所述上位机的驱动模块包括:
用户缓冲区映射模块,负责获得用户接收缓冲的物理页地址;
DMA描述符初始化模块,构建一个环形DMA描述符链表,并初始化每个描述符;
单packet接收模块和单packet接收DPC模块,负责处理上层发过来的单数据包接收请求。
优选的,在上述的模拟数据源的图像采集装置中,所述上位机的驱动模块还包括单packet接收模块,其工作流程包括:
步骤501中,判断当前请求是否第一个请求,如果是第一个请求,就进入步骤502,否则调用归还描述符过程,进入步骤504;
步骤502中,将请求插入链表,进入步骤503;
步骤503中,排队一次中断DPC函数,然后结束;
步骤504中,设内部变量Token:上次接收到的packet的第一个描述符号,判断Token是否和pTailDesc指向描述符的下一个描述符号相等,相等则进入步骤505,不等则进入步骤508;
步骤505中,标记上次packet对应描述符为Do,进入步骤506;
步骤506中,将紧邻的Uf标记的描述符标记为Do,进入步骤507;
步骤507中,移动pTailDesc指针,更新设备寄存器,然后返回主调函数;
步骤508中,标记上次packet对应描述符为Uf,然后返回主调函数。
优选的,在上述的模拟数据源的图像采集装置中,所述上位机的驱动模块还包括单packet接收DPC模块,其工作流程包括:
步骤601中,判断请求链表是否空,非空则进入步骤602,空则直接退出;
步骤602中,从pNextDesc处查找1个完成的packet,查找成功则进入步骤603,否则直接退出;
步骤603中,从请求链表取出表头请求,然后进入步骤604;
步骤604中,标记该packet为Uo,并且将本packet的长度、起始描述符号、结束描述符号和归还令牌号填入PacketReceive结构中,然后进入步骤605;
步骤605中,驱动完成该请求并且将PacketReceive结构返回应用层,然后结束。
本申请实施例还公开了一种模拟数据源模块的控制方法,包括:
状态201,模块加载特定模式的像素初值,等待若干周期结束后,进入状态202;
状态202,模块拉高帧有效输出信号,保持若干周期后,进入状态203;
状态203,模块拉高行有效输出信号,同时输出特定模式的数据,同时判断当前帧是否结束和当前行是否结束,若当前行结束,则进入状态204预置下一行特定模式的像素初值,然后回到状态203,若当前帧结束,则进入状态205预置下一帧特定模式的像素初值,然后回到状态201;
状态204,预置下一行特定模式的像素初值;
状态205,预置下一帧特定模式的像素初值。
本申请实施例还公开了一种采集控制模块的控制方法,包括:
复位后模块首先进入空闲状态301,然后等待上一帧结束信号和采集允许信号,当采集允许并且上一帧结束时,模块进入302状态;
状态302中,模块判断帧有效和帧头允许信号,当帧有效并允许帧头,则进入状态303;当帧有效不允许帧头,则进入状态304;
状态303中,模块产生帧头数据,并存入输出fifo中;
状态304中,将三路图像数据缓存入3个输入fifo中,然后判断输入fifo中是否积累到足够数据,当每一路fifo中都超过4个周期数据时,数据准备好,进入305状态;
305状态中,从3路输入fifo中连续读出4次数据,拼接数据,并存入输出fifo中,然后判断当前帧是否结束,若没结束,则回到状态305;若帧结束,则进入状态306;
状态306中,改变帧头信息,将当前帧号字段加1,然后回到状态302。
本申请实施例还公开了一种数据包读写控制模块的控制方法,包括:
复位后模块首先进入空闲状态501,当前端数据准备好时进入状态502;
状态502中,从前端的采集控制模块的输出fifo中读取16KB数据缓存到后端的缓存fifo中,当存完16KB时,进入状态503;
状态503中,读取缓存fifo中的数据并进行数据格式转化,当16KB数据传输完毕后,回到状态502中。
与现有技术相比,本发明的优点在于:利用本发明技术方案既可以实现CameraLink接口的外接工业相机的高速数据采集,也可通过软件来配置采集卡内部的模拟数据源模块,实现FPGA内部数据源的采集。另外,实现了一种DMA传输管理的算法,提高了DMA传输的连续性,从而提高了传输带宽。借助于本发明的上述技术方案,可以将高速相机和片内模拟数据源产生的高速率数据实时采集到上位机中,win7环境下数据传输带宽达1000MB/S。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是现有技术中一种典型的基于FPGA的图像采集卡结构框图;
图2是现有技术中一种典型的基于WDK的DMA驱动程序结构框图;
图3是本发明具体实施例中的采集装置硬件结构框图;
图4是本发明具体实施例中的采集卡驱动程序结构框图;
图5是本发明具体实施例中DMA控制器模块的内部结构图和描述符结构图;
图6是本发明具体实施例中的采集卡中模拟数据源的控制状态图;
图7是本发明具体实施例中的采集卡中采集控制模块的控制状态图;
图8是本发明具体实施例中的采集卡中采用的DMA控制器IP核所要求的数据接口时序图;
图9是本发明具体实施例中的采集卡中数据包读写控制模块的控制状态图;
图10是本发明具体实施例中的驱动程序中DMA描述符内存映射示意图;
图11是本发明具体实施例中的驱动程序中DMA传输过程中描述符管理算法示意图;
图12是本发明具体实施例中的驱动程序中PacketReceive结构的内部字段;
图13是本发明具体实施例中的驱动程序中单packet接收模块的流程图;
图14是本发明具体实施例中的驱动程序中单packet接收DPC的流程图;
图15是本发明具体实施例中通过模拟数据源所采集的棋盘模式图像;
图16是本发明具体实施例中连接CMOS工业相机所采集的打火机电弧光图像。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明的具体实施方式进行详细说明。这些优选实施方式的示例在附图中进行了例示。附图中所示和根据附图描述的本发明的实施方式仅仅是示例性的,并且本发明并不限于这些实施方式。
在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
本发明实施例提供基于PCIE接口的高速相机以及模拟数据源的图像采集装置和驱动方法,硬件结构如图3所示,包括相机控制模块101、模拟数据源模块102、采集控制模块103、数据包读写控制模块104、数据包缓存fifo模块105、DMA接口fifo模块106、DMA控制器模块107和pcie协议模块108组成。驱动程序结构如图4所示,包括用户缓冲区映射模块201、DMA描述符初始化模块202、单packet接收模块203、单packet接收DPC模块204以及其它功能模块组成。
硬件方面,所述的相机控制模块101通过Xilinx的Picoblaze嵌入式软核微控制器和Uart软核实现上位机和相机的串行通信,用来控制相机内部参数。
模拟数据源模块102在上位机软件的控制下可产生加1模式、竖条纹模式、横条纹模式和棋盘模式图像。同时可设置其图像分辨率、帧率、像素初值种子、帧间像素变化值等。
采集控制模块103在上位机软件的控制下采集指定的数据源的数据,同时根据用户指令决定是否加入图像帧头。
具体地,当用户启动相机或模拟数据源后,在状态机的控制下,首先,采集控制模块103会将CameraLink总线full模式下的3路信号还原为原始的3路信号;其次,采集控制模块103将还原后的三路信号中的有效数据缓存到3路fifo中;之后,将这3个fifo中的数据进行拼接,最后再缓存入输出fifo中。
数据包读写控制模块104从采集控制模块103的输出fifo中读出一个数据包,将其缓存到数据包缓存fifo模块105中,再从数据包缓存fifo模块105中把数据转化为DMA规定的格式输入到DMA接口fifo模块106中。
具体地,图8是DMA控制器的接口fifo模块的输入数据接口时序图。主要包括4个输出信号和一个输入信号,其中输出数据位宽为128位。Sop表示数据包开始信号,高电平期间data[127:0]输出数据包第一个有效数据;eop表示数据包结束信号,高电平期间data[127:0]输出数据包最后一个有效数据;Src_rdy表示输出数据准备好,Dst_rdy表示Dma输入接口fifo模块准备好接收数据,当Src_rdy和Dst_rdy都有效时,有效data将进入Dma输入接口fifo模块中。
DMA控制器模块107把DMA接口fifo模块106中的数据封装为存储器写请求事务TLP,然后通过PCIE协议模块108发送给上位机,最终传输到指定的内存处。其中DMA控制器模块107和PCIE协议模块108分别采用了NorthWest和Xilinx的IP核。
具体地,图5是DMA控制器模块的内部结构图和描述符结构图。其中DMA控制器模块主要部分的功能如下:
(1)C2S传输通道:数据从设备传往host机;
(2)S2C传输通道:数据从host机传往设备;
(3)描述符处理逻辑:获取保存于host机中的描述符并根据描述符内部字段执行对应的数据传输;
(4)控制寄存器:驱动程序通过控制寄存器控制DMA。重要的寄存器有下面几个,
NextDescriptorPtr:host中下一个要在DMA控制器中执行的描述符的地址;SoftwareDescriptorPtr:host中属于驱动程序的第一个描述符的地址;
DMA_Enable:启动DMA控制器。
描述符结构的内部字段的含义如下:
(1)StatFlag_BytesCpld:本描述符的状态和传输完成的字节数;
(2)UserStatus:DMA外围电路的工作状态;
(3)CtrlFlag_ByteCnt:本描述符的控制标志和携带的数据量;
(4)CardAddr:设备发送数据的地址;
(5)SystemAddr:host端接收数据的地址;
(6)NextDescPtr:host内存中下一个描述符的物理地址
启动DMA后,当NextDescriptorPtr!=SoftwareDescriptorPtr时,DMA控制器不断的从host内存中取出描述符,然后解析描述符信息,进行相应的从CardAddr到SystemAddr的数据传输。
采集卡上位机驱动方面,如图4所示,包括用户缓冲区映射模块201、DMA描述符初始化模块202、单packet接收模块203、单packet接收DPC模块204以及其它功能模块组成。
所述的用户缓冲区映射模块201负责获得用户接收缓冲的物理页地址。具体地,以MDL(存储描述符表)的方式获得应用层传给内核层的接收缓冲区,再通过APIMmGetMdlPfnArray(IN PMDL Mdl)获得MDL对应的物理内存页数组。
DMA描述符初始化模块202构建一个环形DMA描述符链表,并初始化每个描述符,主要包括描述符号、描述符标志、下一个描述符指针、描述符对应的系统内存接收地址等。
单packet接收模块203和单packet接收DPC模块204负责处理上层发过来的单数据包接收请求。
具体地,当完成用户缓冲区映射和DMA描述符初始化后,描述符内对应的内存数据接收缓冲布局如图10所示。图10中,假定有N个描述符,每个描述符除了自己私有的域(包括控制DMA设备传输的固定域及驱动用来管理的自定义的域),还关联了一个内存页用于接收具体数据。这N个描述符组成一个环形链表。
引入描述符标记:Do(DmaOwned),Uo(UserOwned),Uf(UserFreed)。同时引入2个指针pNextDesc:指向描述符环形链表中的驱动下一个要处理的描述符,pTailDesc:DMA设备可使用的最后一个描述符。单数据包接收时的流程图如图13所示。
单线程环境下的工作过程为:当接收到用户数据请求后,首先根据收到的当前用户请求归还上一次请求的描述符。归还时,根据上一次请求的第一个描述符号然后将上次packet的对应描述符标记为Do(DmaOwned),然后移动pTailDesc指针到上一个packet的最后一个描述符处,增加DMA可用的描述符。归还结束后再将当前请求插入请求链表。
传输完一个packet产生中断后,在DPC函数中,如图14所示,当请求链表非空时,取出一个数据请求,同时处理当前描述符链表中的完成的一个数据包所对应的若干描述符。根据描述符结构内的域信息,判断是否接收到一个完整的packet,如果接收到一个完整packet,则标记对应的描述符为Uo(UserOwned),移动pNextDesc指针,使其指向链表中驱动下一次要处理的描述符。分离出这个packet的内存地址和长度后,将地址、长度、描述符号等信息填入接收请求中,然后完成这次数据接收请求。应用程序根据驱动返回的接收请求,处理收到的数据。
其它功能模块包括多packet接收模块、多packet接收DPC模块和自由接收模块。其中多packet部分表示当应用程序设置为每次接收多个packet时的对应的处理;自由接收部分表示应用程序设置为测试硬件链路带宽时对应的处理。
图6是本发明实施例中的采集卡中模拟数据源的控制状态图。
状态201中,模块加载特定模式的像素初值,等待若干周期结束后,进入状态202;
状态202中,模块拉高帧有效输出信号,保持若干周期后,进入状态203;
状态203中,模块拉高行有效输出信号,同时输出特定模式的数据,同时判断当前帧是否结束和当前行是否结束。若当前行结束,则进入状态204预置下一行特定模式的像素初值,然后回到状态203。若当前帧结束,则进入状态205预置下一帧特定模式的像素初值,然后回到状态201。
图7是本发明实施例中的采集卡中采集控制模块的控制状态图。
复位后模块首先进入空闲状态301,然后等待上一帧结束信号和采集允许信号,当采集允许并且上一帧结束时,模块进入302状态;
状态302中,模块判断帧有效和帧头允许信号,当帧有效并允许帧头,则进入状态303;当帧有效不允许帧头,则进入状态304;
状态303中,模块产生帧头数据,并存入输出fifo中;
状态304中,将三路图像数据缓存入3个输入fifo中,然后判断输入fifo中是否积累到足够数据,当每一路fifo中都超过4个周期数据时,数据准备好,进入305状态;
305状态中,从3路输入fifo中连续读出4次数据,拼接数据,并存入输出fifo中。然后判断当前帧是否结束,若没结束,则回到状态305;若帧结束,则进入状态306;
状态306中,改变帧头信息,将当前帧号字段加1,然后回到状态302。
图9是本发明实施例中的采集卡中数据包读写控制模块的控制状态图。
复位后模块首先进入空闲状态501,当前端数据准备好时进入状态502;
状态502中,从前端的采集控制模块的输出fifo中读取16KB数据缓存到后端的缓存fifo中。当存完16KB时,进入状态503;
状态503中,读取缓存fifo中的数据并按照图8的时序进行数据格式转化,当16KB数据传输完毕后,回到状态502中。
图11是本发明实施例中的驱动程序中DMA传输过程中描述符管理算法示意图。
在多线程工作环境下,如前所述,引入描述符标记:Do(DmaOwned),Uo(UserOwned),Uf(UserFreed)。同时引入2个指针pNextDesc:指向描述符环形链表中的驱动下一个要处理的描述符,pTailDesc:DMA设备可使用的最后一个描述符。
具体地,设应用层数据接收线程T0,T1各自发送2个接收请求req0,req1。假定每个请求(或packet)需要2个描述符。首先,初始阶段N个描述符均标记为Do。之后执行过程中,假定驱动程序先处理T0的req0,然后处理T1的req0,之后处理T1的req1,最后处理T0的req1。那么描述符的标记及指针pNextDesc和pTailDesc的变化过程如图11所示。
具体地,初始阶段所有描述符均标记为Do。应用层线程T0、T1发送req0。假定驱动程序第一次处理T0的req0,第二次处理T1的req0。于是T0的req0首先插入请求链表,之后T1的req0再插入请求链表。当硬件完成2个packet的传输时,驱动的中断DPC先从请求链表中取出T0的req0,同时将0、1号描述符标记为Uo,将packet的具体信息返回给应用程序,然后结束T0的req0,再从请求链表中取出T1的req0,同时将2、3号描述符标记为Uo,将packet的具体信息返回给应用程序,然后结束T1的req0。
然后应用层线程T0、T1发送req1。假定驱动程序先处理T1的req1,此时,驱动先归还T1的req0所占用的描述符给DMA设备,由于T1的req0所占用的描述符号为2、3;而pTailDesc指向描述符的下一个为0号描述符,暂不把2、3描述符归还给DMA设备,只是将2、3描述符标记为Uf。之后T1的req1插入请求链表,当硬件传输完1个packet时,驱动的中断DPC从请求链表中取出T1的req1,同时将4、5号描述符标记为Uo,将packet的具体信息返回给应用程序,然后结束T1的req1。接着,驱动程序处理T0的req1,此时,驱动先归还T0的req0所占用的描述符给DMA设备,由于T0的req0所占用的描述符号为0、1;而pTailDesc指向描述符的下一个为0号描述符,于是将0、1号以及标记为Uf的2、3号描述符标记为Do。更新pTailDesc指针指向3号描述符,并更新DMA设备寄存器。
图12是本发明实施例中的驱动程序中PacketReceive结构的内部字段。
其中,Length字段为本次接收的packet的长度,由驱动填充并返回。startDescNum字段为本次接收的packet的第一个描述符号,由驱动填充并返回。endDescNum字段为本次接收的packet的最后一个描述符号,由驱动填充并返回。ReturnToken字段为本次接收的归还标志。
具体地,应用程序接收数据时,建立PacketReceive结构,第一次接收时填充本次接收的归还标志ReturnToken为-1,之后填充ReturnToken为上次收到的packet的第一个描述符号。其余字段均初始化为0。
图13是本发明实施例中的驱动程序中单packet接收模块的流程图。
步骤501中,判断当前请求是否第一个请求。如果是第一个请求,就进入步骤502,否则调用归还描述符过程,进入步骤504;
步骤502中,将请求插入链表,进入步骤503;
步骤503中,排队一次中断DPC函数,然后结束;
步骤504中,设内部变量Token(归还的Packet的令牌):上次接收到的packet的第一个描述符号。判断Token是否和pTailDesc指向描述符的下一个描述符号相等。相等则进入步骤505,不等则进入步骤508;
步骤505中,标记上次packet对应描述符为Do(DmaOwned),进入步骤506;
步骤506中,将紧邻的Uf(UserFreed)标记的描述符标记为Do,进入步骤507;
步骤507中,移动pTailDesc指针,更新设备寄存器,然后返回主调函数;
步骤508中,标记上次packet对应描述符为Uf,然后返回主调函数。
图14是本发明实施例中的驱动程序中单packet接收DPC的流程图。
步骤601中,判断请求链表是否空。非空则进入步骤602,空则直接退出;
步骤602中,从pNextDesc处查找1个完成的packet,查找成功则进入步骤603,否则直接退出;
步骤603中,从请求链表取出表头请求,然后进入步骤604;
步骤604中,标记该packet为Uo(UserOwned),并且将本packet的长度、起始描述符号、结束描述符号和归还令牌号填入PacketReceive结构中,然后进入步骤605;
步骤605中,驱动完成该请求并且将PacketReceive结构返回应用层,然后结束。
图15是本发明具体实施例中通过模拟数据源所采集的棋盘模式图像;
图16是本发明具体实施例中连接CMOS工业相机所采集的打火机电弧光图像。
最后,还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
Claims (9)
1.一种模拟数据源的图像采集装置,其特征在于,包括:
相机和上位机;
相机控制模块,通过Xilinx的Picoblaze嵌入式软核微控制器和Uart软核实现上位机和相机的串行通信,用来控制相机内部参数;
模拟数据源模块,在上位机软件的控制下可产生加1模式、竖条纹模式、横条纹模式和棋盘模式图像;
采集控制模块,在上位机软件的控制下采集指定的数据源的数据,同时根据用户指令决定是否加入图像帧头;
数据包读写控制模块,从采集控制模块的输出fifo中读出一个数据包,将其缓存到数据包缓存fifo模块中,再从数据包缓存fifo模块中把数据转化为DMA规定的格式输入到DMA接口fifo模块中;
数据包缓存fifo模块;
DMA接口fifo模块;
DMA控制器模块,把DMA接口fifo模块中的数据封装为存储器写请求事务TLP,然后通过PCIE协议模块发送给上位机,最终传输到指定的内存处;
PCIE协议模块。
2.根据权利要求1所述的模拟数据源的图像采集装置,其特征在于:所述DMA控制器模块和PCIE协议模块分别采用了NorthWest和Xilinx的IP核。
3.根据权利要求1所述的模拟数据源的图像采集装置,其特征在于:所述DMA控制器模块包括:
C2S传输通道:数据从设备传往host机;
S2C传输通道:数据从host机传往设备;
描述符处理逻辑:获取保存于host机中的描述符并根据描述符内部字段执行对应的数据传输;
控制寄存器:驱动程序通过控制寄存器控制DMA。
4.根据权利要求1所述的模拟数据源的图像采集装置,其特征在于:所述上位机的驱动模块包括:
用户缓冲区映射模块,负责获得用户接收缓冲的物理页地址;
DMA描述符初始化模块,构建一个环形DMA描述符链表,并初始化每个描述符;
单packet接收模块和单packet接收DPC模块,负责处理上层发过来的单数据包接收请求。
5.根据权利要求4所述的模拟数据源的图像采集装置,其特征在于:所述上位机的驱动模块还包括单packet接收模块,其工作流程包括:
步骤501中,判断当前请求是否第一个请求,如果是第一个请求,就进入步骤502,否则调用归还描述符过程,进入步骤504;
步骤502中,将请求插入链表,进入步骤503;
步骤503中,排队一次中断DPC函数,然后结束;
步骤504中,设内部变量Token:上次接收到的packet的第一个描述符号,判断Token是否和pTailDesc指向描述符的下一个描述符号相等,相等则进入步骤505,不等则进入步骤508;
步骤505中,标记上次packet对应描述符为Do,进入步骤506;
步骤506中,将紧邻的Uf标记的描述符标记为Do,进入步骤507;
步骤507中,移动pTailDesc指针,更新设备寄存器,然后返回主调函数;
步骤508中,标记上次packet对应描述符为Uf,然后返回主调函数。
6.根据权利要求4所述的模拟数据源的图像采集装置,其特征在于:所述上位机的驱动模块还包括单packet接收DPC模块,其工作流程包括:
步骤601中,判断请求链表是否空,非空则进入步骤602,空则直接退出;
步骤602中,从pNextDesc处查找1个完成的packet,查找成功则进入步骤603,否则直接退出;
步骤603中,从请求链表取出表头请求,然后进入步骤604;
步骤604中,标记该packet为Uo,并且将本packet的长度、起始描述符号、结束描述符号和归还令牌号填入PacketReceive结构中,然后进入步骤605;
步骤605中,驱动完成该请求并且将PacketReceive结构返回应用层,然后结束。
7.权利要求1至6中任一所述模拟数据源的图像采集装置的控制方法,其特征在于,包括:
状态201,模拟数据源模块加载特定模式的像素初值,等待若干周期结束后,进入状态202;
状态202,模拟数据源模块拉高帧有效输出信号,保持若干周期后,进入状态203;
状态203,模拟数据源模块拉高行有效输出信号,同时输出特定模式的数据,同时判断当前帧是否结束和当前行是否结束,若当前行结束,则进入状态204预置下一行特定模式的像素初值,然后回到状态203,若当前帧结束,则进入状态205预置下一帧特定模式的像素初值,然后回到状态201;
状态204,预置下一行特定模式的像素初值;
状态205,预置下一帧特定模式的像素初值。
8.权利要求1至6中任一所述模拟数据源的图像采集装置的控制方法,其特征在于,包括:
复位后采集控制模块首先进入空闲状态301,然后等待上一帧结束信号和采集允许信号,当采集允许并且上一帧结束时,模块进入302状态;
状态302中,采集控制模块判断帧有效和帧头允许信号,当帧有效并允许帧头,则进入状态303;当帧有效不允许帧头,则进入状态304;
状态303中,采集控制模块产生帧头数据,并存入输出fifo中;
状态304中,将三路图像数据缓存入3个输入fifo中,然后判断输入fifo中是否积累到足够数据,当每一路fifo中都超过4个周期数据时,数据准备好,进入305状态;
305状态中,从3路输入fifo中连续读出4次数据,拼接数据,并存入输出fifo中,然后判断当前帧是否结束,若没结束,则回到状态305;若帧结束,则进入状态306;
状态306中,改变帧头信息,将当前帧号字段加1,然后回到状态302。
9.权利要求1至6中任一所述模拟数据源的图像采集装置的控制方法,其特征在于,包括:
复位后数据包读写控制模块首先进入空闲状态501,当前端数据准备好时进入状态502;
状态502中,从前端的采集控制模块的输出fifo中读取16KB数据缓存到后端的缓存fifo中,当存完16KB时,进入状态503;
状态503中,读取缓存fifo中的数据并进行数据格式转化,当16KB数据传输完毕后,回到状态502中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510119592.3A CN106034199B (zh) | 2015-03-18 | 2015-03-18 | 一种模拟数据源的图像采集装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510119592.3A CN106034199B (zh) | 2015-03-18 | 2015-03-18 | 一种模拟数据源的图像采集装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106034199A CN106034199A (zh) | 2016-10-19 |
CN106034199B true CN106034199B (zh) | 2019-07-05 |
Family
ID=57148650
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510119592.3A Active CN106034199B (zh) | 2015-03-18 | 2015-03-18 | 一种模拟数据源的图像采集装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106034199B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106951388B (zh) * | 2017-03-16 | 2020-06-30 | 湖南博匠信息科技有限公司 | 一种基于PCIe的DMA数据传输方法及系统 |
CN107943726A (zh) * | 2017-11-16 | 2018-04-20 | 郑州云海信息技术有限公司 | 一种基于PCIe接口的数据传输系统及方法 |
CN108228490B (zh) * | 2018-01-26 | 2022-11-01 | 武汉精测电子集团股份有限公司 | 一种基于pcie卡高速数据传输的驱动方法 |
CN110672141B (zh) * | 2018-07-03 | 2021-11-30 | 中国科学院苏州纳米技术与纳米仿生研究所 | 自供电传感器的检测方法及其检测系统 |
CN109167994A (zh) * | 2018-09-12 | 2019-01-08 | 中国科学院西安光学精密机械研究所 | 一种图像采集系统 |
CN110545376B (zh) * | 2019-08-29 | 2021-06-25 | 上海商汤智能科技有限公司 | 通信方法及装置、电子设备和存储介质 |
CN111526317B (zh) * | 2020-04-20 | 2022-07-01 | 武汉卓目科技有限公司 | 一种低延时图像采集方法、装置及系统 |
CN114116572A (zh) * | 2021-09-14 | 2022-03-01 | 北京坤驰科技有限公司 | 一种基于PCIe总线的高速流盘系统及方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006023808A (ja) * | 2004-07-06 | 2006-01-26 | Sony Corp | データ転送装置及びデータ転送方法 |
US7383363B2 (en) * | 2004-11-20 | 2008-06-03 | Marvell International Technology Ltd. | Method and apparatus for interval DMA transfer access |
CN102945291A (zh) * | 2012-08-03 | 2013-02-27 | 南京理工大学 | 基于pci-e的高速图像采集存储卡 |
CN102903074B (zh) * | 2012-10-12 | 2014-09-10 | 湖南大学 | 一种基于fpga的图像处理装置 |
CN103747246B (zh) * | 2014-01-14 | 2016-01-20 | 昆山丘钛微电子科技有限公司 | 基于pci-e接口的摄像头图像传输装置及其传输控制方法 |
-
2015
- 2015-03-18 CN CN201510119592.3A patent/CN106034199B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN106034199A (zh) | 2016-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106034199B (zh) | 一种模拟数据源的图像采集装置和方法 | |
CN101634975B (zh) | 一种实现dma数据传输的方法及装置 | |
JP5922898B2 (ja) | 情報処理装置、通信方法およびプログラム | |
CN106951388A (zh) | 一种基于PCIe的DMA数据传输方法及系统 | |
CN1443322B (zh) | 存储器控制器中枢 | |
CN107577636A (zh) | 一种基于soc的axi总线接口数据传输系统及传输方法 | |
CN103221934A (zh) | 用于处理集群的控制节点 | |
CN102945291A (zh) | 基于pci-e的高速图像采集存储卡 | |
CN104461970B (zh) | Dma控制器、移动终端以及数据搬运方法 | |
CN103442180B (zh) | 基于sopc的双目视频拼装置及双目视频拼接方法 | |
US20080059669A1 (en) | Method and Apparatus for Enhancing Data Rate of Advanced Micro-Controller Bus Architecture | |
CN105208275A (zh) | 一种支持流数据片内实时处理的系统及设计方法 | |
CN105677598B (zh) | 基于i2c接口快速读取多个mems传感器数据的模块和方法 | |
CN104102160B (zh) | 一种can总线信号收发解析工具 | |
CN102739486B (zh) | 一种同步数据传输总线系统及方法 | |
CN112579508A (zh) | 一种数据处理方法、数据处理装置、设备及存储介质 | |
CN110188059A (zh) | 数据有效位统一配置的流控式fifo缓存结构及方法 | |
CN110445585A (zh) | 基于ppp数据帧组帧和解帧硬件加速器 | |
CN104394371A (zh) | 一种适合大量连续图像采集和快速存储的系统 | |
CN104378574B (zh) | 基于SoPC的VGA图像采集与压缩存储装置 | |
CN103838694B (zh) | 一种fpga高速读取usb接口数据的方法 | |
CN206431607U (zh) | 一种lcd驱动电路系统 | |
US20020078282A1 (en) | Target directed completion for bus transactions | |
CN105939238B (zh) | 一种基于SOC隔离Memory的10Gbps以太网实时数据采集方法 | |
CN110297612B (zh) | 一种mipi数据处理芯片及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |