最近一直在做GPMC与FPGA通信问题,为了提高读写速度,需要使用EDMA,所以在学习DMA过程中记录下自己学习过程与借鉴大牛们总结的相关经验。
一、增强型直接内存访问控制器(EDMA)相关介绍
1、EDMA是一种高效的数据传输模块,能够不依赖CPU就可以直接对数据进行搬移。EDMA控制器的基本作用是在器件上的两个内存映射从终端之间完成用户的可编程数据的传输。主要功能用途:
服务软件驱动的页传输、对事件驱动的外设提供增强读写能力服务、减轻CPU的数据传输任务、
执行各种数据结构的排序或子帧提取。
2、结合AM4379的技术手册,当前AM4379使用的EDMA3控制器主要由两个模块组成:
1)、EDMA3通道控制器(
EDMA3CC):主要用于充当EDMA3控制器的用户接口,负责软件请求或外设事件的优先级管理,向传输控制器发布传输请求(TRs)。
内部包括:参数RAM(PaRAM)通道控制寄存器、中断控制寄存器。
传输方式:A同步传输:是一种单次事件进行的1维的传输;AB同步传输:是单次事件进行的2维的传输。
2)、EDMA3传输控制器(
EDMA3TC):负责数据传输。主要向编程传输的源和目的地址发布读写请求。
3、特性(该部分AM4379的技术手册都有详细说明,为了更好的理解就直接翻译出来了,虽然显得啰嗦)
EDMA3通道控制器:
1)64个DMA通道:通道触发可通过:事件同步、人工同步(CPU写事件设置寄存器)、连接同步(一个传输的完成触发另一个传输)、支持可编程DMA通道到PaRAM的映射。
2)多达8个中断输出,可支持多核。
3)8个QDMA通道:随着将参数写到PaRAM集入口,QDMA通道自动触发;支持可编程QDMA通道到PaRAM的映射。
4)多达64个中断输入,即有4个传输控制器/事件队列,可编程这些队列的系统级优先级,每个事件队列有16个事件入口。
5)高达256个PaRAM集(入口):每个PaRAM集对应一个DMA通道、QDMA通道或连接集。
6)全正交传输:3维传输,A同步传输、AB同步传输、独立的源和目的索引,连接特征,使得可以进行基于一个事件的3D传输。
不支持直接提交3D传输到TC。
7)传输:增量或FIFO传输寻址模式、连接机制支持自动PaRAM集的更新、连接特征支持对一次事件响应多次传输。
8)
TC和CC之间的传输完成信号用于链接和中断生成。
EDMA3传输控制器:
1)4个传输控制器(TC0-TC3):每个TC有64或128位宽的读写端口
2)多达4个in-flight 传输请求(TRs)
3)优先级可编程
4)支持增量地址或固定地址模式的传输。
5)支持中断和错误报告。
6)内存映射寄存器(MMR)位字段的位置在32位MMR里是固定的,不随着端模式的变化而改变。
4、EDMA相关概念:
1)Trigger event:触发事件是一种行为,这个行为会引起
EDMA3CC服务,同时EDMA3CC会向EDMA3TC发出传输命令请求。
DMA通道的触发事件包括:人工触发、外部触发、连接触发。QDMA通道的触发事件包括:自动触发、连接触发。
2)Transfer request(TR):由
EDMA3CC发向EDMA3TC的数据传输命令,包括源地址、目的地址、计数、索引和选项。
二、EDMA3通道控制器结构框图
注:PaRAM:负责维护通道参数集并重载参数集。对于用户期望编程的通道,用户必须将传输上下文及连接参数集写到PaRAM中。
EDMA3CC基于触发事件来处理参数集,并发布一个传输请求(TR)给传输控制器。
传输需要触发事件来启动,触发事件可能是由外部事件、人工写事件设置寄存器或DMA通道的连接事件引起的。当用户在对应的PaRAM集中写触发字的时候,QDMA通道会自动触发。
触发优先级:DMA通道比QDMA通道优先级高,并且通道号越小,优先级越高。
EDMA3事件和中断处理寄存器:实现事件与参数集的映射,使能/禁止事件、使能/禁止中断条件、清除中断。
三、EDMA3传输控制器结构框图
注:DMA源有效寄存器集;存储当前正在读控制器里进行的DMA传输请求的上下文。
读控制器:向源地址发布读命令。
目的FIFO寄存器集:存储当前正在写控制器里进行的DMA传输请求的上下文
写控制器:向目的地址或从设备发送写命令或写数据。
数据FIFO:保持暂时正在运行的数据。
完成接口:当传输完成后,完成接口发送完成代码标志给通道控制器,用于产生中断或连接事件。
总结:EDMA总体的工作方式为当有触发事件产生时,EDMA传输启动,在通道控制器相关配置完成后,产生一个TR给传输控制器,并按照传输请求包的规定负责数据的快速传输,当传输完成后,传输控制器产生完成代码给通道控制器,表示传输完成或者接着进行下一次传输。
四、EDMA3传输类型
三维概念:
1、第一维或数组(A):传输的第一维由ACNT个连续字节组成。
2、第二维或帧(B):传输的第二维由BCNT个ACNT字节的数组组成。第二维里的每个数组传输都通过索引值彼此分开,这个索引值通过SRCBIDX和DSTBIDX来配置。
3、第三维或块(C):传输的第三维由CCNT个帧组成,每帧由BCNT个阵列组成,每个阵列由ACNT个连续字节。第二维里的每个传输都通过索引值与前一个分开,这个索引值通过SRCBIDX和DSTBIDX来配置。
目前EDMA3支持两种同步传输模式:A同步和AB同步传输模式
A同步传输模式:在该模式中,每个EDMA3同步事件引起ACNT字节的第一维传输,也就是说ACNT个字节的数组。即,每个事件/TR包仅传递一个数组的传输信息,这样为了完整的服务一个PaRAM集需要>
BCNT × CCNT个事件。通过SRCBIDX和DSTBIDX来将数组分开。
如上图数组N的起始地址等于数组N-1的起始地址加源地址或目的地址BIDX。帧总是
SRCBIDX和DSTBIDX来配置分开。对于A同步传输,在帧耗尽之后,通过把
SRCBIDX和DSTBIDX加到这一帧最后一个数组的起始地址完成地址更新。
AB同步传输模式:在该模式中,每个EDMA3同步事件引起2维传输,或者说是一帧的传输。即每个事件/TR包包含整帧(一个帧有BCNT个数组,每个数组ACNT字节)的信息。这样为了完整的服务一个PaRAM集需要
CCNT个事件。
注:对于AB传输模式,在帧的TR发布之后,通过把SRCBIDX和DSTBIDX加到这一帧第一个数组的起始地址完成地址更新。与A同步模式不同。
五、参数RAM(PaRAM)
EDMA3控制器是基于RAM结构的,DMA或QDMA通道的传输上下文用一个参数RAM表来进行编程。PaRAM表被分成多个PaRAM集,每个PaRAM包括8个四字节的PaRAM集入口(每个PaRAM集共32个字节),包括典型的DMA传输参数,如:源地址、目的地址、传输个数、索引、选项等。
对于AM4379的PaRAM内容包括:
256个PaRAM集
如果不用于DMA通道,直接映射的64个通道能被用作Link或QDMA集
64通道可用作Link或QDMA集。