ARM DMA Controller PL330 使用经验分享
阅读原文时间:2023年09月01日阅读:1

总体简介

DMAC提供一个AXI主接口来执行DMA传输,并提供两个APB从接口来控制其操作。DMAC采用TrustZone技术,其中一个APB接口运行在secure状态,另一个运行在非secure状态。 secure策略是ARM的TrustZone技术一部分。

整个DMA操作受一个小的指令集控制,这是与传统链表BD模式的不同之处。

由图中可以看出,其支持外设如UART或者GPIO主动trigger发起。

主要特性

▲AXI、APB接口

▲支持mem2me,mem2perh,perh2mem

▲支持scatter-gather BD模式

▲通道security可配

▲丰富的中断/事件源

可配置

AXI数据线宽度

通道数配置

内部buffer深度配置

读指令队列深度

写指令队列深度

外设请求接口数量

中断/事件数量

DMAC Diagram

DMAC里面包含一个指令处理模块,指令被存储在指令cache中。最多可以配置为8个通道,每个通道都可以执行一个独立的DMA操作,每个通道线程之间采用轮询仲裁。

MFIFO用于存储读/写的数据

读指令队列深度、写指令队列深度、MFIFO的深度会影响DMA的效率

apb接口可以访问状态寄存器也可以执行DMAC中的指令

apb的地址空间被限定在4KB

接口及功能

apb的时钟与axi为同一个时钟域,且接同一个时钟,但是其提供一个pclken可以控制apb的时钟速率,pclken必须是aclk的整数分频。

DMAC不支持独占或者lock访问,arlock[1:0]、awlock[1:0]需要tie low;不支持wrapping操作,arburst[1]、awburst[1]需要tie low;awcache[2],awcache[3]需要tie low;

ID_MSB与通道数量关联。DATA_MSB和STRB_MSB与配置的数据宽度关联。AWID、WID、ARID将于channel num关联起来,比如通道4发出的请求,其ID将为b100

DMAC会控制ARLEN和ARSIZE根据指令的长度和总线宽度的关系。

指令缓存长度≤AXI数据总线宽度

•ARLEN = 1

•ARSIZE = 以字节为单位的指令缓存长度。

指令缓存长度> AXI数据总线宽度

•ARLEN = 以字节为单位的指令缓存线长度与AXI数据总线宽度之比

•ARSIZE = 以字节为单位的AXI数据总线宽度。

用于设置DMAC的boot地址,boot_from_pc用于指示DMA manager的状态是stopped或exccuting

指令、source data、dst data都是从一个AXI走。

单channel内部带watchdog 防止过长占用总线

DMAC使用前,需要进行一系列软件初始化,这个就不再展开。

外设请求接口主要采用valid和ready握手协议

drtype[1:0]:

single传输请求

burst传输请求

承认flush请求

datype[1:0]:

single传输完成

busrt传输完成

flush请求

外设请求可以被mapping到任意的DMA channel去

DMA分通道线程和管理线程

一些禁止操作

边界不能跨越4K

不能出现wrapping burst

DMAC不支持非对齐的fix burst

不能发起一次资源长度大于MFIFO的请求,有可能会导致watchdog abort

通过使用得出,ARM的DMA与自身的平台耦合过深,只能用于ARM平台的IP开发