DMA不属于CPU达到风格相称。,然而因互插知在发达中常常器具。,这是根本概念。、任命规律、对常见问答举行总结。。

DMA概述

DMA的英文轮班是“Direct Memory Access”,华语的意义执意指导内存会谈。DMA可以指导对知识和内存举行会谈。,还可以引用造成该技术的五金器具模块(用于,DMA把持逻辑由CPU和DMA把持衔接逻辑缺口结合。,嵌入式体系的DMA把持器内建在数据处置机缺口在监狱里,通常称为DMA把持器,DMAC)。

内存存取技术

器具DMA的优点是它不喜欢CPU指导插嘴。,照着CPU可以处置及其他事务。,如次前进体系的赢利性。,遵从的慢速装备,如UART,它的功用是使变弱CPU的输出率。,只四处走动的高速公路装备,如砂砾层,它非但使变弱了CPU的输出率。,同时可以庞大地前进五金器具装备的生产量。。因下面所说的事婚配,CPU指导粮食知识的事业太低。。 因CPU至多只不外会谈普通的人飞机一圈。,为了防护,它不克不及指导将内存做成某事地址值移到B地址。。它只不外先把A地址的值搬到普通的人暂存贮存器,过后再从下面所说的事暂存贮存器搬到B地址。也执意说,四处走动的ARM,要破费两个飞机一圈才干将A地址的值送到B地址。而DMA就区别了,普通体系做成某事DMA都有突然产生(Burst)迁移的生产率,在这种图案下,DMA能一次迁移专有的甚至几十年期音节的知识,因而器具DMA能使装备的哼儿哈儿生产率正是巩固。

器具DMA时我们家必麝香留意如次实际:

  • DMA器具物理现象地址,挨次是器具虚构的地址的,因而拨给的场地DMA时必需品将虚构的地址转变成物理现象地址。
  • 因挨次器具虚构的地址,同时普通器具cache地址,因而Cache做成某事质地与其物理现象地址(内存)的质地不稳定的划一,因而在启动DMA迁移前一定要将该地址的cache中间休息,即学习内存。
  • OS一点两者都不克不及包管每回分派到的贮存以一定间隔排列在物理现象上是陆续的。最最在体系器具过了一段工夫直接显微镜凝块计数分派了铺地板的材料比较大的内存时。因而每回都需求断定地址假设陆续的,也许不陆续就需求把这段内存分为几段让DMA应验迁移

DMAC的根本拨给的场地

DMA用于摒弃CPU的沾手而指导由特殊用途把持器(DMA把持器)到达源与客观的迁移的器具,照着,在落落大方知识迁移中翻身了CPU。PIC32微把持器做成某事DMA可购得的于测图到贮存以一定间隔排列做成某事区别外围的,如从贮存区到SPI,UART或I2C等装备。DMA特点详见器件引用手册,嗨仅对少许根本规律与功用做普通的人简析。

地址暂存贮存器 寄存DMA迁移时贮存单元地址
音节撬毛机 寄存DMA迁移的音节数
把持暂存贮存器 寄存由CPU设定的DMA迁移办法,把持命令等
声明暂存贮存器 寄存DMAC普遍地的声明,包括有无DMA恳求,假设完整的等

孤独DMA把持缺口

在神速搬家《微电脑规律》中,会讲到X86下一口孤独的DMA把持缺口8237A。8237A把持缺口各通行在PC机内的任命:

  • CH0:用作静态贮存器的中间休息把持
  • CH1:为用户预留
  • CH2:软盘原动力器知识迁移用的DMA把持
  • CH3:砂砾层原动力器知识迁移用的DMA把持

嵌入式装备做成某事DMA

指导贮存器存取(DMA)把持器是一种在体系在监狱里转变知识的独创的外围的,可以将其计算总数一种能经过一组特殊用途飞机将在监狱里和内部贮存器与每个具有DMA生产率的外围的衔接起来的把持器。它之因而属于外围的,是因它是在数据处置机的编程序把持下降给予帮助迁移的。值当留意的是,通常只知识流量较大(kBps或许高地的)的外围的才需求倒退DMA生产率,这些器具田典型的加盖于包括视频的、音频和办法衔接。

普通而言,DMA把持器将包括一件商品地址飞机、一件商品知识飞机和把持暂存贮存器。高赢利性的DMA把持器将具有会谈其所需求的恣意资源的生产率,而毋庸数据处置机自身的沾手,它必需品能产生中止。决定性的,它必需品能在把持器在监狱里锻炼地址。

普通的人数据处置机可以包括多个DMA把持器。每个把持器有多个DMA通行,与多条指导与贮存器站(memory 筑)衔接到外围装备的飞机。,如图1所示。两优生交配型的DMA把持器集成在大量的高机能的行动排列方向中。。最重要的优生交配型通常高价地体系DMA把持器。,可以造成对普通的资源(外围装备和贮存器)的会谈。,四处走动的这优生交配型的把持器,打旗语一圈的数量由体系秒表(SCLK)计数。,以ADI BrimFink数据处置机为例。,极好的频率可达133MHz。另外的优生交配型称为在监狱里贮存器DMA把持器(IMDMA)。,用于在监狱里贮存器可容纳若干座位间的会谈处理。。因会谈产生在在监狱里(L1-L1)、L1-L2,或许L2-L2),一圈数的计数是本内核秒表(CCLK)的。,秒表的事业可以超越600megahertz 兆赫。。

每个DMA把持器都有一套FIFO。,DMA子体系与外围装备或M经过的拒绝者的功用。为MemDMA(回想) DMA),在源和客观的地经过在一组FIFO。。当资源十足紧以应验知识迁移时,FIFO可以为知识粮食暂时贮存。,如次前进机能。

因DMA把持器通常在信号设定初值持久被拨给的场地。,内核只需求在知识迁移为CO继反应中止。。可以编程序DMA支配。,让它搬家与内核并列地的知识。,同时,让内核给予帮助其根本的处置任命——。

在普通的人优选法的器具中,内核这以前不消插一脚普通的知识的搬家,而只不外对L1贮存器做成某事知识举行读写。随即,内核不喜欢在其他人走后留下来知识的过来,因DMA引擎会在内核预备读取知识以前将知识预备好。图2产生了数据处置机和DMA把持器间的互相作用的相关。由数据处置机应验的处理试图贿赂包括:到达迁移,启用中止,生产中止时给予帮助信号。前往到数据处置机的中止输出可以用来训示“知识早已预备好,可举行处置”。

知识而且往还外围的远处,还需求从普通的人贮存器以一定间隔排列转变到另普通的人以一定间隔排列中。比如,视频的源可以从普通的人 视频的接口指导流入L3贮存器,因任命把缓冲液加入上涂料太大,无法放入到贮存器中。我们家一点两者都不缺少让数据处置机在每回需求给予帮助计算时都从内部贮存读取像素人,照着为 了前进存取的赢利性,可以用普通的人贮存器到贮存器的DMA(MemDMA)来将像素转变到L1或许L2贮存器中。

到眼前为之,我们家还仅专注于知识的搬家,只DMA的传送生产率一点两者都不常常用来搬家知识。

在最复杂的MemDMA使习惯于中,我们家需求告知DMA把持器源端地址、目的端地址和待传送的字的数字。每回迁移的字的堆积起来可以是8、16或许12位。 我们家只需求方式知识迁移每回的知识堆积起来,就可以复杂地增大DMA的机动性。比如,采取非单一堆积起来的迁移办法时,我们家以迁移知识块的堆积起来的所需工夫来作为地址增量。也执意说,若规则32位的迁移和4个采样的跨度,则每回迁移完整的后,地址的增量为16音节(4个32位字)。

DMA的设置

眼前有两类次要的DMA迁移构架:暂存贮存器图案和刻画符图案。无论如何属于哪一类DMA,表1所刻画的几类人全市居民在DMA把持器中呈现。当DMA以暂存贮存器图案任命时,DMA把持器然而复杂地应用暂存贮存器中所贮存的决定因素值。在刻画符图案中,DMA把持器在贮存器中查找本身的拨给的场地决定因素。

本暂存贮存器的DMA

在本暂存贮存器的DMA在监狱里,数据处置机指导对DMA把持暂存贮存器举行编程序,来启动迁移。本暂存贮存器的DMA粮食了姣姣者的DMA把持器机能,因暂存贮存器一点两者都不喜欢不休地从贮存器做成某事刻画符上装填知识,而内核两者都不喜欢拘押刻画符。

本暂存贮存器的DMA由两种子图案结合:非本意的动作缓冲(Autobuffer)图案和终止图案。在非本意的动作缓冲DMA中,当普通的人迁移块迁移完整的,把持暂存贮存器就非本意的动作重行装填其最初的的设定点,同普通的人DMA进步重行启动,消耗为零。

不少于我们家在图3中所领会的那么,也许将普通的人非本意的动作缓冲DMA设定为从外围的迁移一定数量的字到 L1知识贮存器的拒绝者上,则DMA把持器将会在决定性的普通的人字迁移应验的固定工夫就神速重行装填初始的决定因素。这排队了普通的人“圈子拒绝者”,因当普通的人量值被学习 到拒绝者的决定性的普通的人可容纳若干座位上时,下普通的人值将被学习到拒绝者的第普通的人可容纳若干座位上。

非本意的动作缓冲DMA特殊适合于对机能敏感的、在继续知识流的器具。DMA把持器可以孤独于及其他练习读取知识流。,过后在每回迁移完整的时,内核中止。

终止图案像非本意的动作把缓冲液加入DMA异样地任命。,区别之处位于,在DMA为FIIS继,每个暂存贮存器将不被重行使承受压力。,因 完全地DMA迁移只产生一次。。终止图案四处走动的本某个事情的免洗的迁移绝令人满意的。。比如,非周期性地将知识块从普通的人可容纳若干座位传送到另普通的人可容纳若干座位。。当你需求进入事情的时辰 行同时性时,这种图案也绝令人满意的的。。比如,也许任命必需品鄙人一次迁移以前应验,,终止图案确保事情的挨次。。再一次,把缓冲液加入初始终止图案 设定初值绝令人满意的。。

刻画子以图案装饰

本刻画符(刻画符)的DMA需求一组决定因素B,以 开端DMA的串行处理。。该刻画符所包括的决定因素与那个通常经过编程序学习DMA把持暂存贮存器组的一切的决定因素平等的。不外,刻画符还可以允大量的个DMA处理序列串入 起。本刻画符的DMA处理,我们家可以编程序普通的人DMA通行。,在普遍地处理序列应验继,非本意的动作设置并启动另普通的人DMA迁移。。本刻画符的能解决 体系做成某事DMA迁移粮食了最大的机动性。。

ADI 的Blackfin数据处置机上有两种次要的刻画符办法―刻画符队列和刻画符列表,这两种运作图案的目的是推断折衷的抵消。。

1. 是什么DMA?

指导内存会谈是一种五金器具机制。,它容许在外围装备和主贮存器经过指导迁移I/O知识。,不喜欢体系数据处置机插一脚。。器具这种机制可以庞大地前进通讯机灵的生产量。。

2. DMA知识迁移

小溪知识迁移有两种办法。:

最重要的例:知识的软件恳求

1. 当进步转会读,原动力行使职责分派普通的人DMA拒绝者。,让五金器具把知识迁移到下面所说的事把缓冲液加入。。完全地行动排列方向都睡着了。。

2. 五金器具将知识学习DMA拒绝者。,当应验,使成为中止

3. 中止处置挨次获取输出知识,应对中止,命令这一行动排列方向。,下面所说的事行动排列方向如今可以读取知识。

另外的种使习惯于是异步器具DMA时产生的。。

1. 五金器具产生中止,颁布发表新知识的过来

2. 中止处置挨次分派把缓冲液加入。,并告知五金器具在哪里迁移知识。

3. 外围装备将知识学习知识区,应验后,使成为另普通的人中止。

4。分派新知识的处置挨次,活跃起来普通的互插行动排列方向,过后举行清算任命。

高效的DMA处置依赖于中止期刊。。

3. 分派DMA拒绝者

器具DMA拒绝者的次要问题是:当对折的结束,它们必需品握住陆续的物理现象呼叫。,因该装备器具ISA或PCI体系飞机来迁移知识。,这两种办法都是物理现象地址。。

器具get_free_pasges可以分派多大几M音节的内存(MAX_ORDER是11),只四处走动的更大的数字(甚至很决不128kb)的恳求。,它通常完全失败。,这是因体系内存中满是内存岩屑。。

一种receiver 收音机是在启动时分派内存。,或许做蜜饯把缓冲液加入的顶级物理现象内存。。

加盖于:体系启动工夫,将决定因素MEM=值转交到内核做蜜饯顶部的RAM。。比如,该体系具有256个贮存器。,决定因素“mem=255M”,内核不克不及在顶部器具1M音节。。随后,该模块可以器具以下信号会谈内存。:

dmabuf=ioremap(0XFF00000/**255M/, 0X100000/*1M/*);

receiver 收音机做成某事两个是器具GPFJNOFAI分派把缓冲液加入的内存。,只这种办法给内存能解决产品了很大的压力。。

receiver 收音机三十装备倒退疏散/凑合I/O,这可以将把缓冲液加入分派给多个块。,装备将健康的地处置它们。。

4. 涂DMA层

DMA处理最愿意分派拒绝者。,并将飞机地址迁移到装备。。内核提升了普通的人孤独于飞机达到风格的DMA层。。强烈提议构图原动力挨次。,器具此层举行DMA处理。器具这些行使职责的头纸是

int dma_set_mask(struct device *dev, u64 面罩)

掩码训示装备的有关的地址。。像,该装备限于24位称呼。,掩码理应是0x0FFFFFF。。

5. DMA测图

IOMMU突出装备可会谈地址范围内的物理现象内存。,物理现象上疏散的拒绝者对婚配是陆续的。。器具IOMMU需求器具普通的DMA层。,ViReToSuBUS行使职责无法应验此任命。。只,x86平台缺乏对IOMMU的倒退。

receiver 收音机是到达快速恢复的能力把缓冲液加入。,过后,需要时,知识将被学习或读回民弹把缓冲液加入。。缺陷是使变弱体系机能。。

范围DMA拒绝者要求做蜜饯的工夫音长。,PCI信号区别两优生交配型的DMA测图:

普通的人是划一的DMA测图。,位于向导生命一圈中,划一性测图的把缓冲液加入必需品由CPU和PyPH会谈。。划一性测图必需品保在划一性缓存中。。到达和器具划一性测图的消耗是很大的。

二是流式DMA测图。,内核发达者提议放量器具流式测图,辩论:普通的人是倒退测图暂存贮存器的体系。,每个DMA测图器具飞机上的普通的人或多个测图暂存贮存器。,划一测图具有很长的生命一圈。,这些暂存贮存器受雇很长工夫。,甚至当他们不器具它们时,他们甚至不传送他们的一切的权。;这两个在少许五金器具中。,可以优选法流测图。,但优选法办法四处走动的划一性测图是有效的。。

6. 到达划一性测图

原动力挨次可转会pci_alloc_consistent行使职责到达划一性测图:

void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, int 法尔格)

该行使职责处置把缓冲液加入的分派和测图。,前两个决定因素是装备构架和恳求的堆积起来。。行使职责前往DMA测图的总算为2。:行使职责的前往值是把缓冲液加入的内核虚构的地址。,可供驾驶员器具。;其互插的飞机地址贮在DMAI句柄中。。

当把缓冲液加入不再需求时,转会下普通的人行使职责:

void dma_free_conherent(struct device *dev, size_t size, void *vaddr, dma_addr_t *dma_handle);

7. DMA池

DMA池是普通的人小的生产器。,划一DMA测图机制。转会DMAialLoopx相关行使职责达到的测图,能够最小的堆积起来是对折的。。也许装备所需的DMA区域决不此,,它器具的是DMA池。。在

struct dma_pool *dma_pool_create(const char *name, struct device *dev, size_t size, size_t align, size_t 分派)

void dma_pool_destroy(struct dma_pool 池)

决定是DMA池的决定。,DEV是器件构架。,堆积起来是池中分派的把缓冲液加入的堆积起来。,成一条线是必需品在池中观察到的五金器具成一条线基音。,也许分派产生断层零,训示内存限制不克不及超越分派。。比如,传入的分派是4K。,训示从该池分派的把缓冲液加入不克不及跨过分箱线。。

在销毁前,一切的分派的内存必需品前往到DMA池。。

void * dma_pool_alloc(sturct dma_pool *pool, int mem_flags, dma_addr_t 句柄)

void dma_pool_free(struct dma_pool *pool, void *addr, dma_addr_t ADDR)

8. 到达流量DMA测图       

在少许达到中,流测图也可以有多个不陆续呼叫和多个D。。到达流量测图时,必需品告知内核知识流的排列方向。。

DMA_TO_DEVICE

DEVICE_TO_DMA

也许知识被发送到装备,器具DMA_TO_DEVICE;也许知识被发送到CPU,过后器具DeVixItotoDMA。。

DMA_BIDIRECTTONAL

也许知识可以在两个排列方向上搬家,器具此值

DMA_NONE

该标准仅用于调试客观的。。

当只迁移普通的人拒绝者时,器具较低的行使职责来测图它。:

dma_addr_t dma_map_single(struct device *dev, void *buffer, size_t size, enum dma_data_direction 排列方向)

前往值是飞机地址。,它可以转交给装备。;也许给予帮助不公正的,归零。

迁移应验后,器具下行使职责迅速离开测图:

void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma-data_direction 排列方向)

器具流式DMA的规律:

率先,拒绝者只不外用于这样的的迁移。,也执意说,涂排列方向与排列方向V婚配。;

这两个是把缓冲液加入测图的一次。,它将属于装备。,非数据处置机。直到把缓冲液加入被取消为止。,原动力挨次不克不及以普通的办法会谈质地。。只在转会DMAIUnMAPUX单行使职责继,在数据处置机高速公路缓存中显示中间休息知识,向导可以安全地会谈质地。。

三是在DMA的练习持久。,把缓冲液加入的测图不克不及解开。,要不然会沉重地损坏体系的稳定性。。             

也许要测图的把缓冲液加入在内存相称(高端内存),我们家该怎么办?有些架构只会产生普通的人不公正的。,只少许及其他的体系构架使成为回弹拒绝者。。回弹把缓冲液加入是内存做成某事孤独区域。,它可以被装备会谈。。也许器具DMAY-tox装备用符号代表测图拒绝者,同时需求器具回弹拒绝者。,作为测图处理的一相称,复制品初始把缓冲液加入做成某事质地。。很明显,复制品后,最初的,把缓冲液加入质地的变换对装备来被期望不可见的。。异样DEVICE_TO_DMA回弹把缓冲液加入被dma_unmap_single行使职责拷贝回最初的的把缓冲液加入中,也执意说,直到复制品处理应验为止。,来自某处装备的知识是可购得的的。。

有时辰,原动力挨次需求会谈流式DMA拒绝者的质地而不喜欢R。,内核粮食以下转会:

void dma_sync_single_for_cpu(struct device *dev, dma_handle_t bus_addr, size_t size, enum dma_data_directction 排列方向)

下面所说的事行使职责理应在数据处置机会谈流D以前转会。。一旦行使职责被转会,数据处置机将迷住DMA拒绝者。,同时可以范围需求会谈。。过后在装备会谈把缓冲液加入以前,,理应转会以下行使职责以将一切的权前往给装备。:

void dma_sync_single_for_device(struct device *dev, dma_handle_t bus_addr, size_t size, enum dma_data_direction 排列方向)

再次重音符号,在行使职责由数据处置机转会继,无法会谈DMA把缓冲液加入。。

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注