首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

DMA方式

DMA传送过程中,DMA控制器将接管CPU的地址总线、数据总线和控制总线,CPU的主存控制信号被禁止使用。而当DMA传送结束后,将恢复CPU的一切权利并开始执行其操作。...但当I/O设备和CPU同时访问主存时,可能发生冲突,为了有效地使用主存,DMA控制器与CPU通常外用以下三种方式使用主存: (1)停止CPU访问主存 这种方式是当外设需要传送组数据时,由DMA接口向CPU...发送一个信号,要求CPU放弃地址线、数据线和有关控制线的使用权,DMA接口获得总线控制权后,开始进行数据传送,在数据传送结束后,DMA接口通知CPU可以使用主存,并把总线控制权交还给CPU。...其中C1专供DMA访存,C2专供CPU访存。这种方式不需要总线使用权的申请、建立和归还过程,总线使用权是通过C1和C2分时控制的。...(3)后处理 DMA控制器向CPU发送中断请求,CPU执行中断服务程序做DMA结束处理,包括检验送入主存的数据是否正确,测试传送过程中是否出错(错误则转入诊断程序)和决定是否继续使用DMA传送其他数据块等

3.6K12

什么是DMADMA究竟有多快!

直接内存访问(Direct Memory Access,DMA):在计算机体系结构中,DMA 是一种数据传输方式,允许外部设备直接访问计算机的内存,而无需通过中央处理单元(CPU)的干预。...那么,DMA究竟有多快呢? 实践出真知 恰好,最近有个多通道数据采集的项目,受限于通道数多、分辨率高,而系统带宽有限,为了尽可能充分利用有限带宽,就得想办法优化时序,把时间都留给数据采集和传输。...优化方向就是DMA。 硬件链路是ADC通过SPI接口将数据发送给STM32单片机,单片机再将数据发送到上位机。 咱们的目标就是优化SPI这边,先看普通采集模式。...再看下,开启DMA之后的效果。SPI可以连续工作,时钟速率稳定在20MHz,高效工作。 这就是DMA的强大之处! 问题来了,为什么上图中的波形,有这么大的震荡呢?

18510

宋宝华:那些年你误会的Linux DMA(关于Linux DMA ZONE和API最透彻的一篇)

创作目的 互联网、Linux内核书籍上充满了各种关于Linux DMA ZONE和dma_alloc_coherent、dma_map_single等的各种讲解,由于很多童鞋缺乏自身独立的思考,人云亦云...那么ISA上面假设有个网卡,要DMA,超过16MB以上的内存,它根本就访问不到。所以Linux内核干脆简单一点,把16MB砍一刀,这一刀以下的内存单独管理。...比如我在CSR工作的时候,CSR的primaII芯片,尽管除SD MMC控制器以外的所有的DMA都可以访问整个4GB内存,但MMC控制器的DMA只能访问256MB,我们就把primaII对应Linux的...下面我们架空历史,假设有一个如下的芯片,里面有5个DMA,A、B、C都可以访问所有内存,D只能访问32MB,而E只能访问64MB,你觉得Linux的设计者会把DMA ZONE设置为多大?...绝大多数的SoC目前都支持和使用CMA技术,并且多数情况下,DMA coherent APIs以CMA区域为申请的后端,这个时候,dma alloc coherent本质上用__alloc_from_contiguous

6.6K46

LINUX网络子系统中DMA机制的实现

我们先从计算机组成原理的层面介绍DMA,再简单介绍Linux网络子系统的DMA机制是如何的实现的。 一、计算机组成原理中的DMA 以往的I/O设备和主存交换信息都要经过CPU的操作。...总之,在同样的时间内,DMA方式下CPU执行现行程序的时间最长,即CPU的效率最高。 二、Linux网络子系统中DMA机制的实现 1....;如果是32位DMA地址,则使用32位硬件;若不是64位也不是32位,则报错“没有可用的DMA配置,中止程序”。.../include/linux/dma-mapping.h /* * Set both the DMA mask and the coherent DMA mask to the same thing...()的作用是申请一块DMA使用的内存,它的返回值是这块内存的虚拟地址,赋值给rxdr->desc。

4.9K62

DMA技术原理

DMA控制器的DMA总线与总线矩阵协调,使用AHB把外设ADC采集的数据经由DMA通道存放到SRAM中,这个数据的传输过程中,完全不需要内核的参与,也就是不需要CPU的参与。...DMA_SxCR 寄存器控制数据流到底使用哪一个通道,每个数据流有 8 个通道可 供选择,每次只能选择其中一个通道进行 DMA 传输。...存储器到存储器模式不能与循环模式同时使用。 这里要注意仅 DMA2 的外设接口可以访问存储器,所以仅 DMA2 控制器支持存储器到存储器的传输,DMA1 不支持。...也就是说,DMA使用不会影响CPU的运行速度。 但是要注意:DMA 控制器和Cortex-M3核共享系统数据总线执行直接存储器数据传输。...比如我们使用 SendBuf[5200]数组来做存储器,那么我们在 DMA_CMARx 中写入&SendBuff 就可以了。

2.2K30

IOMMU(四)-dma remapping

惠伟:IOMMU(三)-初始化​zhuanlan.zhihu.com DMA remapping就是在DMA的过程中IOMMU进行了一次转换,MMU把CPU的虚拟地址(va)转换成物理地址(pa),IOMMU...的作用就是把DMA的虚拟地址(iova)转换成物理地址(pa),MMU转换时用到了pagetable,IOMMU转换也要用到io pagetable,两者都是软件负责创建pagetable,硬件负责转换...IOMMU的作用就是限制DMA可操作的物理内存范围,当一个PCI设备passthrough给虚拟机后,PCI设备DMA的目的地址是虚拟机指定的,必须要有IOMMU限制这个PCI设备只能操作虚拟机用到的物理内存...DMA类型 Requests without address-space-identifier DMA中只带了source-id,也就是PCI设备的bus/dev/funtion。...passthrough translation 跳过转换,DMA的iova就是pa。 IOMMU工作模式 intel vt-d iommu可以工作于legacy和scale模式。

2.2K31

傻傻分不清楚的MDMA, DMA1,DMA2, DMA2D,BDMA?

最近一直在使用H743这颗料,主频跑400M,很多外设在使用时都开了DMA,性能杠杠的,推荐大家多使用。...如SDRAM, QSPI,SPI等,H743里面DMA比较多,也较复杂,有DMA2D,MDMA, BDMA,DMA1,DMA2等等,使用时候注意区分。 MDMA 先来看看MDMA的框图概览 ?...更多关于MDMA的说明可以参考手册使用,结合官方例程。 DMA H743有两个DMA,分别为DMA1和DMA2, ? ? ?...DMA的知识和篇章在参考手册中有很多介绍需要详细阅读和参考,结合例程。 DMA2D DMA2D是专门用于图像处理加速的DMA,我们在做屏的驱动时候可以充分考虑使用。 ?...手册中有几十页都是来讲DMA2D的,这个功能还是很好的,如果你使用H743做屏幕类相关产品,这个要用起来。例如我在移植emWIN作为图形界面时候驱动就使用DMA2D. ? ?

2K20

5、DMA 技术

DMA 技术: DMA 技术,也就是直接内存访问(Direct Memory Access) 技术。...DMA 技术:在进行 I/O 设备和内存的数据传输的时候,数据搬运的工作全部交给 DMA 控制器, 而 CPU 不再参与任何与数据搬运相关的事情,这样 CPU 就可以去处理别的事务。...执行其他任务; 3、DMA 进一步将 I/O 请求发送给磁盘; 4、磁盘收到 DMA 的 I/O 请求,把数据从磁盘读取到磁盘控制器的缓冲区中,当磁盘控制器的缓冲区被读满后, 向 DMA 发起中断信号...,告知自己缓冲区已满; 5、DMA 收到磁盘的信号,将磁盘控制器缓冲区中的数据拷贝到内核缓冲区中,此时不占用 CPU,CPU 可以执行其他任务; 6、当 DMA 读取了足够多的数据,就会发送中断信号给...CPU; 7、CPU 收到 DMA 的信号,知道数据已经准备好,于是将数据从内核拷贝到用户空间,系统调用返回;

7310

ZYNQ中DMA与AXI4总线-DMA简介

使用DMA时,CPU向DMA控制器发送一个存储器传输请求,这样当DMA控制器在传输的时候,CPU执行其他的操作,传输完成时DMA以中断的方式通知CPU。 DMA传输过程的示意图为: ?...然而,使用DMA的好处就是它不需要CPU的干预而直接服务外设,这样CPU就可以去处理别的事务,从而提高系统的效率,对于慢速设备,其作用只是降低CPU的使用率,但对于高速设备,它不只是降低CPU的使用率,...而DMA就不同了,一般系统中的DMA都有突发(Burst)传输的能力,在这种模式下,DMA能一次传输几个甚至几十个字节的数据,所以使用DMA能使设备的吞吐能力大为增强。...鉴于上面的优势,系统中使用DMA是必要的,能够提高数据吞吐量,减轻了CPU的负担,使得整个系统的性能得到提高。 说了这么多优点,那么DMA缺点是什么呢?...DMAC为DMA控制器 DMA传送虽然脱离CPU的控制,但并不是说DMA传送不需要进行控制和管理。通常是采用DMA控制器来取代CPU,负责DMA传送的全过程控制。

2.4K21

Dynamic DMA mapping Guide

例如:即便是一个系统支持64位地址内存和64 位地址的PCI bar,但是DMA可以不使用全部的64 bit地址,通过IOMMU的映射,PCI设备上的DMA可以只使用32位DMA地址。...根据上面的描述我们可以得出这样的结论:Linux可以使用动态DMA 映射(dynamic DMA mapping)的方法,当然,这需要一些来自驱动的协助。...驱动想要使用DMA mapping framework的API,需要首先包含相关头文件: #include 这个头文件中定义了dma_addr_t这种数据类型...使用vmalloc() 分配的DMA buffer可以直接使用吗?最好不要这样,虽然强行使用也没有问题,但是终究是比较麻烦。...十一、平台移植需要注意的问题 如果你仅仅是驱动工程师,并不负责将linux迁移到某个cpu arch上去,那么后面的内容其实你可以忽略掉了。

2.2K21

DMA与零拷贝

DMA 技术回顾:DMA 负责内存与其他组件之间的数据拷贝,CPU 仅需负责管理,而无需负责全程的数据拷贝; 使用 page cache 的 zero copy: sendfile:一次代替 read/...sendfile 主要使用到了两个技术: DMA 技术; 传递文件描述符代替数据拷贝。 下面依次讲解这两个技术的作用。...这意味着此优化取决于 Linux 系统的物理网卡是否支持(Linux 在内核 2.4 版本里引入了 DMA 的 scatter/gather -- 分散/收集功能,只要确保 Linux 版本高于 2.4...Direct I/O 的优缺点: 优点: Linux 中的直接 I/O 技术省略掉缓存 I/O 技术中操作系统内核缓冲区的使用,数据直接在应用程序地址空间和磁盘之间进行传输,从而使得自缓存应用程序可以省略掉复杂的系统级别的缓存结构...另一方面,目前 Linux 上的异步 IO 库,其依赖于文件使用 O_DIRECT 模式打开,它们通常一起配合使用。 如何使用 Direct I/O?

2.1K21

IOMMU(四)-dma remapping

DMA remapping就是在DMA的过程中IOMMU进行了一次转换,MMU把CPU的虚拟地址(va)转换成物理地址(pa),IOMMU的作用就是把DMA的虚拟地址(iova)转换成物理地址(pa),...IOMMU的作用就是限制DMA可操作的物理内存范围,当一个PCI设备passthrough给虚拟机后,PCI设备DMA的目的地址是虚拟机指定的,必须要有IOMMU限制这个PCI设备只能操作虚拟机用到的物理内存...DMA类型 Requests without address-space-identifier DMA中只带了source-id,也就是PCI设备的bus/dev/funtion。...Requests with address-space-identifier DMA中除了source-id还有PASID,而这个PASID来自于PCIE config space中的PASID Capability...passthrough translation 跳过转换,DMA的iova就是pa。 IOMMU工作模式 intel vt-d iommu可以工作于legacy和scale模式。

2.1K11

linux | 数据包到网卡在通过DMA到内存过程

DMA 是一种硬件机制,它允许外围组件将其 I/O 数据直接传输到主内存或从主内存传输数据,而无需系统处理器参与传输。使用这种机制可以极大地增加进出设备的吞吐量,因为大量的计算开销被消除了。...第二种情况发生在异步使用 DMA 时。例如,即使没有人在读取数据,数据采集设备也会继续推送数据,就会发生这种情况。...虽然可以使用轮询驱动程序实现 DMA,但这没有意义,因为轮询驱动程序会浪费 DMA 提供的性能优势,而不是更简单的处理器驱动 I/O。 这里介绍的另一个相关项目是 DMA 缓冲区。...请注意,许多驱动程序在初始化时分配它们的缓冲区并使用它们直到关闭 - 因此,前面列表中的分配一词意味着“获取先前分配的缓冲区”。.../content/queueing-linux-network-stack

2.6K20
领券