DMA基本工作原理总结概述(一)——DMA系统架构

一. DMA的工作原理:

DMA是一种内存访问技术;
可以独立于CPU, 直接读、写系统存储器、外设等
在这里插入图片描述

二. 工作、传输模式:

1. 工作模式:FIFO模式与直接模式

FIFO模式下,可以将要传输的多个数据(或字节)累计存储在FIFO缓冲器中,然后在FIFO缓冲器中设置存储阈值,当到达阈值时,FIFO会自动把所有存储的数据一次性的发送到目标地址;

直接模式下,DMA直接进行数据从源地址到目的地址的传输,对于外设的传输,因为外设内部一般也有FIFO,所以传输的数据可以被直接存储在外设的FIFO中。

2. 传输模式:单次传输与突发传输

单次传输模式下,一次操作(软件)只能传输一次(一次可以理解为一个节拍,如一个字节)

突发传输模式下,一次操作可以传输多次,如4次,8次,16次

三. 寻址模式:

a. 增量寻址:发送完数据后,继续发送下一个地址的数据,配合突出传输模式

b. 非增量寻址:发送完数据后,如果想要继续发送数据,需要更具软件配置的发送下一个数据的地址,再进行数据的传输。

四. DMA的双面性特点:

对于CPU,DMA是外设

对于外设,DMA是控制器

五. 使用DMA的原因:

a. 把比较固定的任务让DMA来做,可以减轻CPU负担,提高系统的效率

b. DMA具有一般CPU没有的高效操作,提高系统的吞吐率

六. 基于ARM Cortex M3的SOC DMA系统架构

系统有两个DMA;

每个DMA有两个端口,作为Master,对外设,Mem控制。同时作为Slave,CPU可以通过BUS对DMA控制,

其中一个DMA 2,有两个端口均连接至BUS MATRIX上,DMA1 仅有一个端口连接至BUS MATRIX;

对于两个DMA,均可以连接至AHB-APB Bridge

DMA0,端口并没有连接至AHB/APB上,而且由BUS Matrix 连接至存储器中,并且有一路端口专用于AHB-APB 2上。

七. 思考的问题

a. DMA与CPU如何竞争总线?

	i. 两路DMA, CPU军师总线矩阵的master,
	ii. DMA与CPU同时访问一个slave时,BUS Matrix会仲裁器对请求进行仲裁,决定优先级访问顺序。
	iii. DMA与CPU同时访问不同slave时,可以同时工作

b. 为什么使用2个DMA,分别起什么作用?

	i. 对于一个DMA来说,通道数是有限的;
	ii. 两路DMA,可以连接更多的外设DMA请求源
	iii. 两路DMA,在内存,外设的访问空间上做了一定的区分,可以同时工作,提高了系统效率(分别服务不同的外设)

c. 同样是DMA,DMA1与DMA2的应用的区别?

	i. DMA2的master端口可以访问总线矩阵中所有的slave(存储器、AHB1、AHB2、APB1、APB2)
	ii. DMA1的端口1只连接了存储器属性的slave,端口2直接连接了APB1上
	iii. DMA2可以实现存储器、AHB1、AHB2、APB1、APB2之间数据的相互传输
	iv. DMA1只能实现存储器、APB1之间的相互传输(不经过总线的仲裁,大大提高了访问速度、减轻总线矩阵的负担)

d. DMA1为什么只有一个master连接至BUS矩阵中?

	i. 同一个DMA会有多个master接口,master的功能不同,所映射的地址范围不同
	ii. master接口绕开总线矩阵的仲裁,而直接连接到外设的AHB2APB桥,加快对外设的访问速度
	iii. 减少连接到总线矩阵的master接口数量,降低矩阵的复杂度,有利于提高系统效率

八. 一般结构:

a. DMA请求

i. 如果外设想要通过DMA出书数据,必须先向DMA控制器发送DMA请求,DMA收到请求后,由控制器给CPU请求信号,要求占用总线,收到占用总线的授权后,DMA向外设发送应答信号,当外设应答后,DMA收到应答信号后,就会启动DMA传输,指导传输完毕。

ii. DMA有DMA1和DMA2两个控制器,DMA1有两个控制器,DMA1有7个通道,DMA2有5个通道

iii. 不同DMA控制器的通道有不同的外设请求

b. 通道

i. DMA可以有多个通道,例如在上面的架构中,总共有7+5 = 12个通道。

ii. 每个通道对应不同外设的DMA请求,虽然每个通道可以接收多个外设请求,但是同一时间只能接收一个,不能同时接收多个请求

c. 仲裁器

i. 当有多个DMA请求时,则需要仲裁器进行优先级管理。

ii. 仲裁器管理DMA请求分为2个阶段:
1) 第一个阶段由软件完成:可以在寄存器中设计优先级的等级(根据硬件的设计)
2) 第二个阶段由硬件完成:如果两个以上的DMA通道的请求设置的优先级一样,则优先级取决于通道编号

iii. 仲裁器优先级
1) 固定优先级顺序:优先级在架构中就已经确定好了,或者,由软件配置
2) 轮转算法优先级:优先级不断轮转
3) 随机算法优先级:使用随机数

九. DMA数据配置——传输方向

a. 从外设到存储器

b. 存储器到外设

c.存储器到存储器

Linux 内核的 DMA系统是一种提供直接内存访问(Direct Memory Access,DMA)功能的机制,可以实现设备之间的数据传输,减少 CPU 的负担,提高系统性能。DMA系统包括了 DMA 控制器、DMA 缓冲区管理、中断处理等多个部分,其中比较重要的 API 包括以下几个: 1. dma_alloc_coherent():分配 DMA 缓冲区的 API,用于分配一段连续的物理内存,用于 DMA 数据传输。 2. dma_map_single() 和 dma_unmap_single():将一个单独的 DMA 缓冲区映射到物理地址空间,并在 DMA 操作完成后释放映射。 3. dma_sync_single_for_cpu() 和 dma_sync_single_for_device():同步 DMA 缓冲区和物理地址空间之间的数据,以确保数据的正确性和一致性。 4. dmaengine_submit() 和 dma_async_issue_pending():提交 DMA 操作请求,启动 DMA 数据传输。 5. dmaengine_terminate_all():停止所有正在进行的 DMA 操作。 DMA工作原理是通过 DMA 控制器实现的。控制器可以直接访问系统总线,将数据从设备中读取到 DMA 缓冲区中,或者从 DMA 缓冲区中将数据传输到设备中。在进行 DMA 操作时,需要设置 DMA 控制器的寄存器,包括源地址、目的地址、传输长度等信息。DMA 控制器会负责处理数据传输的过程,传输完成后会产生中断信号通知 CPU。 需要注意的是,Linux 内核的 DMA系统需要硬件支持,即需要设备具有 DMA 控制器接口。如果设备没有 DMA 控制器接口,也可以通过 CPU 进行数据传输,但效率会降低。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摆渡沧桑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值