zoukankan      html  css  js  c++  java
  • PCI总线 DMA burst 基本概念

    转载地址:http://blog.csdn.net/sunjiajiang/article/details/7945057

    DMA和burst不是一个概念。

    DMA传送不经过CPU的控制,假如硬盘的数据不能经过DMA控制器读到内存,那么每完成一次将硬盘的数据读出来,再存放到内存的操作,都要通过CPU运行几条读写指令来完成,这时CPU就做不了别的事了,如果有DMA控制器,则这个过程不需要CPU的参与,只需要占用总线就可以了。CPU还可以去完成别的运算。

    Burst操作还是要通过CPU的参与的,与单独的一次读写操作相比,burst只需要提供一个其实地址就行了,以后的地址依次加1,而非burst操作每次都要给出地址,以及需要中间的一些应答、等待状态等等。如果是对地址连续的读取,burst效率高得多,但如果地址是跳跃的,则无法采用burst操作

    一般芯片的dma有基本功能。

    1、普通的内存、外设间互传数据,一次性的。

    PCI设备DMA控制器,设置好后DMA 控制器的寄存器,PCI设备就会通过PCI总线向其他设备发送信号。

    2、支持链表的,美其名曰“scatter”,内核有struct scatter可以参考。

    说一下注意点:

     dma有burst、burst size、transfer的概念:

    burst:

    dma实际上是一次一次的申请总线,把要传的数据总量分成一个一个小的数据块。比如要传64个字节,那么dma内部可能分为2次,一次传64/2=32个字节,这个2(a)次呢,就叫做burst。这个burst是可以设置的。这32个字节又可以分为32位 *8或者16位*16来传输。

    transfer size:

    就是数据宽度,比如8位、32位,一般跟外设的FIFO相同。

    burst size:

    就是一次传几个 transfer size.

    配置数据宽度为32位。一次传8个32位=32个字节。

    那么如果总长度为128字节,那么实际dma设置的长度为 128/32 = 4.

    很好的一篇文章:基于FPGA的PCI接口DMA传输的设计与实现

    http://www.docin.com/p-755091145.html

    转载自:http://blog.csdn.net/qingfengtsing/article/details/24124661

  • 相关阅读:
    C#网络编程简单实现通信小例子-1
    对象序列化
    C#网络编程(1)
    Web前端基础——jQuery(三)
    Web前端基础——jQuery(二)
    Web前端基础——jQuery(一)
    Java基础——正则表达式
    Java基础——Servlet(八)文件上传下载
    Java基础——Servlet(七)过滤器&监听器 相关
    Java基础——Servlet(六)分页相关
  • 原文地址:https://www.cnblogs.com/chengqi521/p/7126758.html
Copyright © 2011-2022 走看看