DMA和burst不是一个概念

本文详细解释了DMA(直接内存访问)与Burst操作的区别。DMA允许设备绕过CPU直接与内存交换数据,提高效率;而Burst则是一种连续访问内存的方式,减少地址设置次数,适合连续地址访问。此外还介绍了DMA的常见功能及burst、burstsize、transfersize等概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DMA和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.
原文链接https://blog.youkuaiyun.com/sunjiajiang/article/details/7945057

### DMA(Direct Memory Access)概念详解 #### DMA 的基本定义 直接存储器存取(Direct Memory Access, DMA)是一种硬件机制,允许外部设备或内部外设不通过中央处理器(CPU)而直接与系统的主存储器交换数据。这种方式显著减少了 CPU 在大量数据传输过程中所承担的工作负荷[^1]。 #### DMA 工作原理概述 当需要执行大容量的数据传送任务时,DMA 控制器接管系统总线并负责管理整个数据移动流程。这期间涉及四个主要阶段: - **DMA 请求**:目标外设向 DMA 控制器发出请求信号表明其准备就绪可以开始数据传递。 - **DMA 响应**:一旦接收到有效申请后,DMA 控制器将协调安排合适的时机介入工作,并从当前运行环境中夺取必要的资源权限比如地址/数据通道等。 - **DMA 传输**:在此状态下,DMA 完全掌控着这些线路直到全部预定资料都被成功搬运完毕为止;其间可能采用连续大批量的方式快速灌输信息流至目的地端口——这种策略被称为突发模式(burst mode)[^3]。 - **DMA 结束**:最后一步则是释放之前占用的一切设施返回正常运作条件之下同时触发相应的事件标志告知应用程序层面上该进程已完成。 #### 物理地址限制及其解决方案 值得注意的是,在某些较老式的架构里头比如说 ISA 总线体系结构下的 DMA 控制单元仅仅能够触及有限区间内的 RAM 单元位置(大约是从零起步延伸到十六兆字节处)。为了克服这一局限性问题,则引入了一个特别命名区域叫做 ZONE_DMA ,它扩展了可供分配给那些老旧型号使用的更高层次上的逻辑区块映射表单从而确保即使面对超出初始规划范畴之外的大规模作业也依然具备可行性选项可用[^2]。 ```c // C语言伪代码演示简单的DMA初始化设置过程 void init_dma(int channel, void* src_addr, void* dst_addr, size_t length){ dma_set_channel(channel); dma_configure_source_address(src_addr); dma_configure_destination_address(dst_addr); dma_set_transfer_length(length); dma_enable_interrupt_on_completion(); } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值