zoukankan      html  css  js  c++  java
  • [Burst]理解下DMA/NorFlash/DDR下的Burst是个什么概念

    转自:http://bbs.eetop.cn/thread-12436-1-1.html

    Burst: 突发传输

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

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

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

    1. 普通的内存、外设间互传数据,一次性的。
    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.

  • 相关阅读:
    Thinking in Java Reading Note(9.接口)
    Thinking in java Reading Note(8.多态)
    Thinking in Java Reading Note(7.复用类)
    SQL必知必会
    Thinking in Java Reading Note(5.初始化与清理)
    Thinking in Java Reading Note(2.一切都是对象)
    鸟哥的Linux私房菜笔记(1.基础)
    Thinking in Java Reading Note(1.对象导论)
    CoreJava2 Reading Note(2:I/O)
    CoreJava2 Reading Note(1:Stream)
  • 原文地址:https://www.cnblogs.com/aaronLinux/p/9403705.html
Copyright © 2011-2022 走看看