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.

  • 相关阅读:
    Mac014--Sourcetree安装(Git client)
    SSM003/构建Maven单模块项目(二)
    Git016--Work
    Mac013--Docker安装
    前端002/常用标签属性(工作应用)
    Python 38 初识数据库
    Python 38 sql基础
    Python 39 数据库的数据类型
    Python 39 数据库
    Python 37 进程池与线程池 、 协程
  • 原文地址:https://www.cnblogs.com/aaronLinux/p/9403705.html
Copyright © 2011-2022 走看看