驱动开发启动DMA的问题

凤朝凰 2009-06-10 10:14:32
停滞一周了,希望各位大侠帮忙解决,具体问题如下:
做PCI驱动,普通方式的读写我已经实现了,现在想通过DMA对设备进行读写。在网上看到的例子都是设备自带DMA控制器,然后在EvtProgramDma例程中编程设备的DMA控制器。但我们的设备没有DMA控制器,Boss的意思是使用主板的DMA控制器。不知道这个方案是否可行,如何实现。望各位给个解决方案或者资料什么的。
感激不尽!!在网上找了一周了完全看不到这方面的资料。
...全文
222 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
通天红鱼 2009-10-29
  • 打赏
  • 举报
回复
最近也在研究kmdf的东西,楼主说的东西我明白,是想用PC主板上的DMA控制器来实现数据拷贝的工作。
这里有一个问题,KMDF在WDK的文档里面明确说明,不支持ISA老式的DMA传输,即设备没有DMA控制器,需要用PC主板控制器的情况。这个时候,可能需要用WDM的驱动框架,或者更老的NT式驱动了。因为现在的PC主机上的DMA控制器是通过PCI-ISA桥挂载的ISA设备。同时我也在找可以访问并且使用这个设备的方法,我想实现一个Memory->Memory的Test程序

lz提到黑屏重启,我没有遇到过,蓝屏重启倒是有,那是因为代码错误,产生了页错误,这个方面的内容在很多windows驱动相关的书上都可以找到。
应该是lz在EvtIoWrite、EvtIoRead中调用了在>=DISPATCH_LEVEL中才能调用的函数。直接或者间接的
凤朝凰 2009-06-18
  • 打赏
  • 举报
回复
看到自己的帖子沉了,为什么没人理我了呢。
是哪里做错了么?
凤朝凰 2009-06-17
  • 打赏
  • 举报
回复
怎么没有人理我了呢?谁来帮帮我啊。
凤朝凰 2009-06-16
  • 打赏
  • 举报
回复
没人可以帮忙么?
凤朝凰 2009-06-15
  • 打赏
  • 举报
回复
玩了一个周末,重新顶起
heling2008 2009-06-15
  • 打赏
  • 举报
回复
还是请高手吧,
凤朝凰 2009-06-12
  • 打赏
  • 举报
回复
自己顶起,等待高手。
zhj8727 2009-06-12
  • 打赏
  • 举报
回复
guanzhu
yyh84yangtaohui 2009-06-12
  • 打赏
  • 举报
回复
帮顶 期待高手赐教!
dthxman 2009-06-11
  • 打赏
  • 举报
回复
你是有操作系统的设备,当然只能通过映射读到内存io地址,你说的dma就是你cpu自带的吧,你cpu的datasheet上难道没有介绍寄存器的使用方法吗。
凤朝凰 2009-06-11
  • 打赏
  • 举报
回复
原来是我不会说话了。楼上的理解就是我的问题了。

问题一:开始时认为我们的设备没有DMA控制器,boss的意思是PC主板上就有DMA控制器,要我使用PC主板上的DMA控制器实现对我们的设备的DMA方式的读写操作(不知这次可否说明白了,简单说:使用PC主板的DMA控制器读写PCI设备)。请问各位大哥:该方案是否可行,可行的话请给出实现实例或者资料,不可行请给出理由我也好跟老板有个交代。

问题二:最新发现我们的设备上包含一个DMA控制器。但是它只可以从PCI Memory读到芯片的FIFO(Data Sheet上是这么说的,我还不明白PCI Memory指的到底是哪块内存)。现在我在EvtDeviceAdd例程中创建WdfDmaEnabler和WdfDmaTransaction对象,然后在EvtIoWrite例程中初始化WdfDmaTransaction。可是每次一运行系统就直接黑屏重启了。如果在初始化Transaction时从写改为读即初始化出错,则系统正常运行。请大家指点下这个到底是什么地方出错了。

问题三:今天打算向文件中输出一些调试信息,写了一个函数:打开文件,写信息,关闭文件。这个函数在DriverEntry、EvtDeviceAdd、EvtDevicePrepareHardware、EvtDeviceReleaseHardware例程中能够正常运行,但是在其他例程中就会造成系统黑屏重启。请问各位高手这又是何原因。

小弟驱动新手,希望各位不吝赐教,小弟感激不尽。只要大家说话,分不成问题!!
凤朝凰 2009-06-11
  • 打赏
  • 举报
回复
终于看到有人回复了,感谢大哥帮忙
不过boss的意思是使用电脑自带的DMA控制器,因为我们的设备本身是没有的,现在很怀疑这个思路是否可行,因为网上完全找不到相关的资料。
另外确定了我们设备上其实是有个DMA控制器的,不过芯片资料说只能从PCI Memory读到芯片的FIFO。我现在想先用它来熟悉下DMA的操作,但新的问题是调用WdfDmaTransactionInitlizationUsingRequest系统就重启,不知道怎么找原因……
gnutools 2009-06-11
  • 打赏
  • 举报
回复
lz的意思是做了pcI接口的设备,但是设备没有DMA功能,所以用PC的DMA,PC=>DMA=>pCI=>设备?
artszhao 2009-06-11
  • 打赏
  • 举报
回复
搂住说清楚你用DMA来做什么?

说得不清不楚,别人怎么回复你啊?
凤朝凰 2009-06-10
  • 打赏
  • 举报
回复
自己顶起期待高手解答……
dthxman 2009-06-10
  • 打赏
  • 举报
回复
好好看看板子的资料吧,如果boss叫你用板子上的dma,应该是用你们mcu自带的dma控制器吧,这个看看寄存器配置去了解下mcu内部dma是怎么用的。
凤朝凰 2009-06-10
  • 打赏
  • 举报
回复
为什么没人理我?

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧