byeyear
驱动牛犊
驱动牛犊
  • 注册日期2002-11-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分23分
  • 威望13点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:2344回复:4

pci数据采集卡两种dma方式的比较,哪一种更好?

楼主#
更多 发布于:2007-02-27 14:34
  我目前在做一块pci的数据采集卡
考虑了两种dma方式,请指点一下哪种方式比较好。
1. 驱动程序开辟common  buffer, pci卡连续向common buffer写数据,应用程序需要数据时发送irp到驱动,驱动程序在处理irp时将数据从common buffer拷贝到用户缓冲区;
2. 应用程序需要数据时发送irp到驱动,驱动收到irp后锁定用户缓冲区,然后启动dma,将数据直接写入用户缓冲区。
第一种方法pci卡可以连续传送数据,且不需要每次都做锁定缓冲区的工作,但是需要将数据从common buffer拷贝到用户缓冲区;
第二种方法不需要将数据从kernel buffer拷贝到user buffer,但是无法进行连续的数据传输,要在板卡上加大容量缓存。
这两种方法各有利弊,哪一种效率更高一点呢。我的数据传输速度大概20MBytes/s
nhyujm
驱动牛犊
驱动牛犊
  • 注册日期2005-06-29
  • 最后登录2008-06-24
  • 粉丝0
  • 关注0
  • 积分145分
  • 威望37点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-02-28 22:33
我还没有做到你这步呢?努力中
wwm_820924
驱动牛犊
驱动牛犊
  • 注册日期2004-07-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望169点
  • 贡献值1点
  • 好评度22点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-03-14 14:26
如果你用DDK的话建议这样做,其它工具开发的我不懂。
a、驱动初始化时用MmAllocateContiguousMemory申请一块连续的内存空间。
b、PCI有数据要传输时,给PC发中断,驱动接收到中断后,启动9054DMA,9054把数据写到申请的连续dma内存空间,写完后再次给PC中断,PC驱动接收到中断,把数据从连续的DMA内存空间复制到驱动公共缓冲区(初始化时申请)。
c、上层应用程序调用读IRP从驱动公共缓冲区读数据。
d、驱动公共缓冲区最好用两个指针去操作,写指针(中断服务程序中用),读指针(响应读IRP调用函数中用)。
zhoujiamurong
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2009-05-06
  • 粉丝4
  • 关注0
  • 积分1081分
  • 威望360点
  • 贡献值0点
  • 好评度215点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-09-06 14:28
学习中...
gelugo
驱动牛犊
驱动牛犊
  • 注册日期2007-08-23
  • 最后登录2008-03-14
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-09-06 15:21
学习呀 刚刚开始要搞采集卡的驱动,被老板逼得
游客

返回顶部