阅读:1973回复:6
PCI上到底有没有DMA控制器
请问PCI上的DMA传输用到了单独的DMA控制器吗,还是只用了master设备本身的主控逻辑。如果没有用到单独的DMA控制器(8237兼容),那么我们现在PC机的南桥中的DMA控制器又有什么用呢,是为ISA或其它总线准备的吗?可现在的ISA总线传输的数据最终也要通过ISA-PCI桥转到PCI总线上来啊?
|
|
沙发#
发布于:2003-07-30 12:36
PCI总线并没有要求一定得有DMA控制器。
不过有些专用PCI桥如9054等自己集成了DMA控制器,可以实现本地到PC机之间的DMA传输。 主机上的DMA控制器也是独立于PCI总线的,但它可以实现PC机端内存到PCI内存空间之间的DMA传输。一般来说这种方式对于新设备来说已不推荐了。 |
|
|
板凳#
发布于:2003-07-30 16:26
master设备不是可以直接获得总线控制权吗?当它获得控制权之后可以发起内存空间读写周期,如果读写的地址落在设备映射的内存空间master设备将直接访问设备上用于映射的内存,如果读写的地址落在主内存空间则master设备应该直接读写内存,还要DMA做什么呢?不知道我这样理解对不对?
至于南桥上的DMA,PCI连请求DMA通道的DREQ信号都没有(只有总线请求REQ信号),怎么实现PC机端内存到PCI内存空间之间的DMA传输? 还是不懂!郁闷中! |
|
地板#
发布于:2003-07-30 16:32
我后来在Windows Driver model中找到了这段话:
_______________________________________________ 执行一个DMA传输需要考虑下面几个因素: 如果设备有总线主控能力,那么它就有访问主存的必要电子部件,因此我们只需要告诉它几个基本事实,如从哪开始,需要传输多少单位的数据,是输入操作还是输出操作,等等。你可以向硬件设计者咨询以得到细节部分,否则你只能参考硬件级的说明文档。 一个有分散/聚集能力的设备可以在自身与不连续的物理内存区之间传输大块数据。设备的分散/聚集能力对软件十分有利,它可以避免对具有连续页帧的大数据块的需求。页可以被简单地锁定在所在的物理内存,然后把内存地址告诉设备。 如果设备不是总线主控设备,那么你需要使用计算机主板上的系统DMA控制器。这种形式的DMA传输有时被称为副DMA。与ISA总线连接的系统DMA控制器对所能访问的物理内存和一次传输的数据量会有些限制。EISA总线的DMA控制器去掉了这些限制。在Windows 2000中,你不必知道硬件具体插入到哪种类型的总线,因为系统自动参考这些不同的限定。 通常,DMA操作将包括编程硬件映射寄存器或操作前后的数据复制。如果设备需要连续地读写数据,你不会希望在每次I/O请求中都做这两步,这将大大地降低处理速度,在某些情况下是不能接受的。因此,你应该分配一个公用缓冲区,设备和驱动程序可以在任何时间同时访问这个缓冲区。 ____________________________________________________ |
|
地下室#
发布于:2003-07-31 10:00
最近我查找了一些资料对DMA做一个总结,对与不对,还请大家做个评判:
1、PCI总线根本不需要DMA控制器,PCI设备上也不需要DMA控制器。 2、Master设备一定具备总线主控电路,否则它就是Client设备。 3、很多人所谓的在PCI设备上实现的DMA控制器,实际上是总线主控电路,它不仅可用于DMA传输,还可用于PCI设备到PCI设备的传输。 4、在PCI设备上实现类8237的DMA控制器进行DMA传输是没有必要的。 5、南桥芯片上的类8237DMA控制器只用于那些本身所处的总线设计使之无法获得总线控制权的设备(如ISA总线上的设备),即使是PCI的Client设备也无法向南桥的8237申请DMA通道。 6、现代的Intel南桥芯片的类8237DMA控制器没有DREQ与DGNT引脚,只有REQA#与GNTA#与REQB#与GNTB#...引脚(可以是多对,一般只有2对),通过任一对都可以申请7个DMA通道的任何一个,该对引脚应连接到称为DMA代理的芯片上,需要申请DMA通道的设备通过DREQ与DGNT引脚连接到DMA代理芯片上,该代理芯片可以是ISA-PCI桥芯片,也可以是其他桥芯片、也可以是单一功能的代理芯片或其它复杂的复合芯片。 |
|
5楼#
发布于:2003-07-31 10:03
nod nod
|
|
|
6楼#
发布于:2003-08-04 15:03
最近我查找了一些资料对DMA做一个总结,对与不对,还请大家做个评判: 很完整也很专业了。 补充一条,8237DMA Controller只能一次做64kbytes。而目前的PCI Controller如果支持Bus Mastering DMA的话一次可以达到64MBytes |
|
|