CN108228490B - 一种基于pcie卡高速数据传输的驱动方法 - Google Patents
一种基于pcie卡高速数据传输的驱动方法 Download PDFInfo
- Publication number
- CN108228490B CN108228490B CN201810076107.2A CN201810076107A CN108228490B CN 108228490 B CN108228490 B CN 108228490B CN 201810076107 A CN201810076107 A CN 201810076107A CN 108228490 B CN108228490 B CN 108228490B
- Authority
- CN
- China
- Prior art keywords
- data
- dma
- address
- buffer area
- temporary buffer
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/102—Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/28—DMA
- G06F2213/2806—Space or buffer allocation for DMA transfers
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Image Input (AREA)
- Bus Control (AREA)
Abstract
本发明涉及数据传输技术领域,特别是一种基于PCIE卡高速数据传输的驱动方法。在初始化的过程中将DMA通道的地址和长度分别写入至平台系统中,并分配临时缓冲区;当相机采集到数据后,自动进行DMA传输,并在传输完成后反馈DMA中断至驱动;当驱动收到DMA中断后,将图像数据从DMA地址搬移到临时缓冲区中;在上层软件下发取像指令至驱动后,对上层软件下发的数据长度和存放地址进行解析;拷贝临时缓冲区的数据至指定地址,完成图像数据从相机到上层软件的传输。在驱动中采用了多块虚拟地址交替使用的环形内存数据块和采用固定DMA通道地址与长度进行数据传输,减少与硬件的交互次数,使数据传输的逻辑更简洁,数据传输效率更高。
Description
技术领域
本发明涉及数据传输技术领域,特别是一种基于PCIE卡高速数据传输的驱动方法。
背景技术
在现有的PCIE数据传输中大多基于Windriver的用户层开发,该类型的驱动具有一定的局限性,1、要依赖于第三方的工具库(Windriver),对于后期的维护不方便;2、DMA通道(大数据专用传输通道)的大小的局限性比较大,该类型的驱动分配大空间通道容易失败,从而造成数据进行传输时效率会受到影响;3、流程控制方面,由于在用户层开发,灵活性、快捷性都会受到影响,比如某一个事件在内核层已经可以处理掉,但基于用户层开发时必须要与上层交互才能处理。
发明内容
为解决上述技术问题,本发明的目的在于提供一种DMA的带宽局限性小、数据传输效率高的基于PCIE卡高速数据传输的驱动方法。
本发明一种基于PCIE卡高速数据传输的驱动方法的技术方案为:
在初始化的过程中将DMA通道的地址和长度分别写入至平台系统中,并分配临时缓冲区;
当相机采集到数据后,自动进行DMA传输,并在传输完成后反馈DMA中断至驱动;
当驱动收到DMA中断后,将图像数据从DMA地址搬移到临时缓冲区中;
在上层软件下发取像指令至驱动后,对上层软件下发的数据长度和存放地址进行解析;
拷贝临时缓冲区的数据至指定地址,完成图像数据从相机到上层软件的传输。
进一步的,在将DMA通道的地址和长度分别写入至平台系统之前,判断DMA通道带宽和要分配的带宽是否一致,若一致则将DMA通道的地址和长度分别写入至平台系统中,若不一致则重新分配DMA通道后再将DMA通道的地址和长度分别写入至平台系统中。
进一步的,所述相机将采集的数据传输至驱动的过程与从驱动中将数据传输至上层软件的过程并行进行。
进一步的,所述拷贝临时缓冲区的数据至指定地址前,判断临时缓冲区中是否存在没有传输到上层软件的数据,如果有则拷贝临时缓冲区的数据至指定地址,如果无则进行连续判断,当连续多次判断仍然没有数据存在时,则反馈数据传输失败信号至上层软件。
进一步的,所述相机将采集的数据传输至驱动的过程如下:
当A>B且A=an+Length2AB时;
若B=a1,则相机数据经过DMA搬移需要等待到B不小于a2的值后再进行数据搬移,搬移完成后A值为a2,
若B>=a2,则直接进行数据搬移,搬移完成后A值为a2,
当A>B且A!=an+Length2AB时,直接进行数据搬移,搬移完成后A值为A+Length2AB;
当A==B时,若C>0,则等待上层软件取走一块数据后再次进行搬移,否则直接进行数据搬,移搬移完成后A值为A+Length2AB;
当A<B时,直接进行数据搬移,搬移完成后A值为A+Length2AB;
每次数据搬移完成后,C+1;
其中,A为临时缓冲区保存数据后的结束地址值,B为上层软件每次数据获取完成后在临时缓冲区的结束地址值,C为缓冲区中存放的图像数据块数,an为将临时缓冲区平均分为n段后,第n段的起始地址,a1和a2分别为将临时缓冲区平均分为n段后,第一段的起始地址和第二段的起始地址,所述临时缓冲区内存长度为DMA长度n倍,Length2AB为DMA长度。
进一步的,所述从驱动中将数据传输至上层软件的过程如下:
当A>B时,直接进行数据拷贝,拷贝完成后B=B+Length2AB;
当A==B时,若C>0,则直接进行数据拷贝,否则等待C>0时再进行数据拷贝,拷贝完成后B=B+Length2AB;
当A!=B时,直接进行数据拷贝,拷贝完成后B=B+Length2AB;
每次数据拷贝完成后,C-1;
其中,A为临时缓冲区保存数据后的结束地址值,B为上层软件每次数据获取完成后在临时缓冲区的结束地址值,C为缓冲区中存放的图像数据块数,Length2AB为DMA长度。
本发明的有益效果是:在驱动中采用了多块虚拟地址交替使用的环形内存数据块和采用固定DMA通道地址与长度进行数据传输,减少与硬件的交互次数,使数据传输的逻辑更简洁,数据传输效率更高,增强数据传输的稳定性,减少取像时间为工业生产时节省了生产作业时。
附图说明
图1为驱动在运用中的结构图;
图2为取像驱动流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
如图1所示,该驱动是上层应用软件(PPC)和二代硬件平台的衔接部分,起到承上启下的作用。
1、首先根据硬件ID关联硬件设备与驱动,PCIE驱动根据(自动光学检测系统)硬件平台PCIE取像卡的硬件标示识别硬件平台,PCIE驱动会在安装时根据硬件设备的唯一表示ID和硬件进行关联,其中硬件的ID可以根据不同版本的硬件自行协商定义;
2、承接应用软件信息并分析处理,PCIE驱动接收上层应用软件(PPC软件)的信息,并对该信息进行解析,然后根据解析的信息对硬件做相应的操作(比如:a、PPC要获取第几个相机的什么类型的图像,驱动解析出信息后,通知硬件平台进行第几个相机的同类型图像的数据拍摄;b、PPC要配置某一个相机的参数,驱动解析出对应的地址和参数后把参数写入硬件平台,并通知硬件平台开始参数配置);
3、直接与硬件进行交握,PCIE驱动获取硬件发送过来的中断信息,根据中断信息的不能,对数据做不同的处理,然后反馈到上层应用(PPC)软件(比如:收到数据传输完成的中断,驱动把对应的物理内存的数据搬到临时环形缓冲区内,并通知PPC软体把对应的图像数据取走)。
如图2所示,取像驱动流程主要包括初始化、相机数据到驱动和驱动数据到上层PPC软件三大块,其中相机数据到驱动和驱动数据到上层PPC软件并行运行。
初始化过程如下:
程序初始化时,需要对DMA通道进行分配。在通道DMA重新分配之前,会对当前已经有的通道进行判断,判断的依据是当前已经存在的DMA通道带宽和要分配的带宽是否一致。如果一致就不用重新分配,而在实际工业生产应用中,一条生产线中的驱动程序所要使用的DMA通道的大小是固定不变的,因此,只要在PC电脑开机时分配一次DMA通道即可(DMA内存空间和长度分别为adress2AB,length2AB),此时的PC电脑的内存空洞非常小,不会出现分配失败的现象。经过验证,基本4GB的内存可以保证71M的DMA通道带宽分配成功,由于约定的每次传输数据的长度是不变的,且DMA通道地址有事固定的,因此会把DMA通道的地址和长度(adress2AB,length2AB)分别写入到平台系统中;其次,需要分配临时缓冲区(使用ExAllocatePool函数分配,缓冲区记为BufferAdress)作为从硬件平台获取图像数据后临时存放内存,大小相当于是n倍(n大小根据具体情况设定)的DMA带宽。
相机数据到驱动过程如下:
1、驱动中设有中断监测进程,凡是平台系统发过来的中断,在该进程里面都可以监测到,由于DMA通道的地址和长度在初始化时已经传输到硬件平台,因此当相机采集到数据后,平台系统会自动进行DMA传输,当传输完成后平台系统会发送中断到驱动;
2、当驱动收到平台系统发送的DMA中断后,会进行数据搬移,把图像数据从DMA地址adress2AB搬移到临时缓冲区BufferAdress中,可以采用内核函数RtlCopyBytes来实现;
3、DMA通道数据搬移完成后,通知平台系统可以进行下一轮的DMA数据传输了,驱动中断进程继续监测。
驱动数据到上层PPC软件的过程如下:
4、PPC取图指令通过驱动接口传给驱动程序,并把图像的数据长度(LengthA)和图像存放的最终地址(adressA)传输给驱动;
5、当驱动收到取像指令后,会获取PPC传下来的数据长度LengthA和地址adressA,内核函数映射为驱动中可用的地址(adressAA)和长度(LengthAA);
6、判断环形缓冲区中的是否还存在没有传输到上层PPC的数据(判断方法在环形缓冲区的使用时介绍),如果有,则直接拷贝对应的缓冲区数据到指定的地址adressAA中,拷贝完成代通知PPC本次数据传输完成;如果环形缓冲区中没有要传输的数据,会等待一定时间然后重新判断,若是最终连续多次(次数自己设定)判断缓冲区中都没有数据存在,则通知上层本次图像数据传输失败。
以下列举一个具体实施例对临时缓冲区(即环形缓冲区)进行解释说明:
缓冲区的内存为BufferAdress,长度假定设为5倍的DMA长度,则有缓冲区的内存长度为5*length2AB=length10AB,平均分配为5段,每段的起始地址为a1,a2,a3,a4,a5,每段地址的长度为length2AB。缓冲区保存数据后的结束的地址值为A,上层PPC每次数据获取完成后,在缓冲区的结束地址值为B,缓冲区中存放的图像数据块数位C,填充一块缓冲区C+1,取走一块缓冲区C-1。
相机数据到缓冲区的过程中:
当A>B且A=a5+Length2AB时,
若B=a1,则相机数据经过DMA搬移需要等待到B=a2或是其他大于a2的值后再进行数据搬移,搬移完成后A值为a2,
若B>=a2,则直接进行数据搬移,搬移完成后A值为a2;
当A>B且A!=a5+Length2AB时,则直接进行数据搬移,搬移完成后A值为A+Length2AB;
当A==B时,如果C>0,则等待PPC取走一块数据后再次进行搬移,否则直接进行数据搬,移搬移完成后A值为A+Length2AB;
当A<B时,直接进行数据搬移,搬移完成后A值为A+Length2AB;
每次数据搬移完成后,C+1。
缓冲区数据到PPC上层的过程中:
当A>B时,直接进行数据拷贝,拷贝完成后B=B+Length2AB;
当A==B时,若C>0,直接进行数据拷贝,否则,等待C>0时再进行数据拷贝,拷贝完成后B=B+Length2AB;
当A!=B时,直接进行数据拷贝,拷贝完成后B=B+Length2AB;
每次数据拷贝完成后,C-1。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (4)
1.一种基于PCIE卡高速数据传输的驱动方法,其特征在于:
在初始化的过程中将DMA通道的地址和长度分别写入至平台系统中,并分配临时缓冲区;
当相机采集到数据后,自动进行DMA传输,并在传输完成后反馈DMA中断至驱动;
当驱动收到DMA中断后,将图像数据从DMA地址搬移到临时缓冲区中;
在上层软件下发取像指令至驱动后,对上层软件下发的数据长度和存放地址进行解析;
拷贝临时缓冲区的数据至指定地址,完成图像数据从相机到上层软件的传输;
在驱动中采用多块虚拟地址交替使用的环形内存数据块和采用固定DMA通道地址与长度进行数据传输;
所述相机将采集的数据传输至驱动的过程与从驱动中将数据传输至上层软件的过程并行进行;
所述相机将采集的数据传输至驱动的过程如下:
当A>B且A= an +Length2AB时;
若B=a1,则相机数据经过DMA搬移需要等待到B不小于a2的值后再进行数据搬移,搬移完成后A值为a2,
若B>=a2,则直接进行数据搬移,搬移完成后A值为a2,
当A>B且A!=an+Length2AB时,直接进行数据搬移,搬移完成后A值为A+ Length2AB;
当A==B时,若C>0,则等待上层软件取走一块数据后再次进行搬移,否则直接进行数据搬,移搬移完成后A值为A+ Length2AB;
当A<B时,直接进行数据搬移,搬移完成后A值为A+ Length2AB;
每次数据搬移完成后,C+1;
其中,A为临时缓冲区保存数据后的结束地址值,B为上层软件每次数据获取完成后在临时缓冲区的结束地址值,C为缓冲区中存放的图像数据块数,an为将临时缓冲区平均分为n段后,第n段的起始地址,a1和a2分别为将临时缓冲区平均分为n段后,第一段的起始地址和第二段的起始地址,所述临时缓冲区内存长度为DMA长度n倍,Length2AB为DMA长度。
2.如权利要求1所述基于PCIE卡高速数据传输的驱动方法,其特征在于:在将DMA通道的地址和长度分别写入至平台系统之前,判断DMA通道带宽和要分配的带宽是否一致;
若一致则将DMA通道的地址和长度分别写入至平台系统中;
若不一致则重新分配DMA通道后再将DMA通道的地址和长度分别写入至平台系统中。
3.如权利要求1所述基于PCIE卡高速数据传输的驱动方法,其特征在于:所述拷贝临时缓冲区的数据至指定地址前,判断临时缓冲区中是否存在没有传输到上层软件的数据;
如果有则拷贝临时缓冲区的数据至指定地址;
如果无则进行连续判断,当连续多次判断仍然没有数据存在时,则反馈数据传输失败信号至上层软件。
4.如权利要求1所述基于PCIE卡高速数据传输的驱动方法,其特征在于,所述从驱动中将数据传输至上层软件的过程如下:
当A>B时,直接进行数据拷贝,拷贝完成后B=B+Length2AB;
当A==B时,若C >0,则直接进行数据拷贝,否则等待C>0时再进行数据拷贝,拷贝完成后B=B+Length2AB;
当A!=B时,直接进行数据拷贝,拷贝完成后B=B+Length2AB;
每次数据拷贝完成后,C-1;
其中,A为临时缓冲区保存数据后的结束地址值,B为上层软件每次数据获取完成后在临时缓冲区的结束地址值,C为缓冲区中存放的图像数据块数,Length2AB为DMA长度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810076107.2A CN108228490B (zh) | 2018-01-26 | 2018-01-26 | 一种基于pcie卡高速数据传输的驱动方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810076107.2A CN108228490B (zh) | 2018-01-26 | 2018-01-26 | 一种基于pcie卡高速数据传输的驱动方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108228490A CN108228490A (zh) | 2018-06-29 |
CN108228490B true CN108228490B (zh) | 2022-11-01 |
Family
ID=62668978
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810076107.2A Active CN108228490B (zh) | 2018-01-26 | 2018-01-26 | 一种基于pcie卡高速数据传输的驱动方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108228490B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109522140B (zh) * | 2018-11-23 | 2023-10-20 | 江西洪都航空工业集团有限责任公司 | 通讯板卡接收数据方法 |
CN110865953B (zh) * | 2019-10-08 | 2021-01-26 | 华南师范大学 | 异步拷贝方法和装置 |
CN113259540B (zh) * | 2020-12-18 | 2024-04-02 | 深圳怡化电脑股份有限公司 | 扫描图像数据的处理方法、装置、设备及存储介质 |
CN113741987A (zh) * | 2021-08-24 | 2021-12-03 | 重庆金美通信有限责任公司 | 一种Linux系统下FPGA数据低延时接收方法 |
CN115757222B (zh) * | 2022-09-28 | 2023-06-20 | 航天恒星科技有限公司 | 基于pl和ps的数据传输方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102467473A (zh) * | 2010-11-03 | 2012-05-23 | Tcl集团股份有限公司 | 一种在用户空间和内核之间传输数据的方法和装置 |
CN102495817A (zh) * | 2011-12-08 | 2012-06-13 | 成都林海电子有限责任公司 | 一种基于pci总线的高速数据传输方法 |
CN104506379A (zh) * | 2014-12-12 | 2015-04-08 | 北京锐安科技有限公司 | 网络数据捕获方法和系统 |
CN106034199A (zh) * | 2015-03-18 | 2016-10-19 | 中国科学院苏州纳米技术与纳米仿生研究所 | 一种模拟数据源的图像采集装置和方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100517284C (zh) * | 2007-11-19 | 2009-07-22 | 中兴通讯股份有限公司 | 一种外部控制dma控制器的方法及其装置 |
CN107527317B (zh) * | 2017-07-18 | 2020-11-10 | 西安电子科技大学 | 基于图像处理的数据传输系统 |
-
2018
- 2018-01-26 CN CN201810076107.2A patent/CN108228490B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102467473A (zh) * | 2010-11-03 | 2012-05-23 | Tcl集团股份有限公司 | 一种在用户空间和内核之间传输数据的方法和装置 |
CN102495817A (zh) * | 2011-12-08 | 2012-06-13 | 成都林海电子有限责任公司 | 一种基于pci总线的高速数据传输方法 |
CN104506379A (zh) * | 2014-12-12 | 2015-04-08 | 北京锐安科技有限公司 | 网络数据捕获方法和系统 |
CN106034199A (zh) * | 2015-03-18 | 2016-10-19 | 中国科学院苏州纳米技术与纳米仿生研究所 | 一种模拟数据源的图像采集装置和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108228490A (zh) | 2018-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108228490B (zh) | 一种基于pcie卡高速数据传输的驱动方法 | |
CN110489213B (zh) | 一种任务处理方法及处理装置、计算机系统 | |
US8392635B2 (en) | Selectively enabling a host transfer interrupt | |
KR101553649B1 (ko) | 멀티 코어 장치 및 멀티 코어 장치의 작업 스케줄링 방법 | |
CN107515786B (zh) | 资源分配方法、主装置、从装置和分布式计算系统 | |
US11080220B2 (en) | System on chip having semaphore function and method for implementing semaphore function | |
US11544113B2 (en) | Task scheduling for machine-learning workloads | |
CN113468084B (zh) | 一种多模式dma数据传输系统 | |
WO2017177806A1 (zh) | 一种管理资源的方法和装置 | |
JP2009508247A (ja) | バス調停に関する方法及びシステム | |
TW202246977A (zh) | 一種任務調度方法、任務調度裝置、電腦設備、電腦可讀儲存媒介和電腦程式產品 | |
JP2003256221A (ja) | 並列プロセス実行方法、及びマルチプロセッサ型コンピュータ | |
US20150134884A1 (en) | Method and system for communicating with non-volatile memory | |
CN109788325B (zh) | 视频任务分配方法及服务器 | |
CN110300959B (zh) | 用于动态运行时任务管理的方法、系统、设备、装置和介质 | |
US9417924B2 (en) | Scheduling in job execution | |
WO2023168855A1 (zh) | 一种内存分配方法、部署方法及相关装置 | |
US8775767B2 (en) | Method and system for allocating memory to a pipeline | |
WO2014136302A1 (ja) | タスク管理装置及びタスク管理方法 | |
WO2022160628A1 (zh) | 命令处理装置、方法、电子设备以及计算机可读存储介质 | |
US8528007B1 (en) | Firmware downloading through process file system | |
US9690619B2 (en) | Thread processing method and thread processing system for setting for each thread priority level of access right to access shared memory | |
US20100153678A1 (en) | Memory management apparatus and method | |
WO2013027951A1 (ko) | 멀티 코어 시스템의 인터럽트 할당 방법 및 장치 | |
CN102945214A (zh) | 基于io延迟时间分布优化中断处理任务的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |