S32K3XX单片机DMA原理深度解析(上)

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,同步至SelectDB 1个月
简介: S32K3XX单片机DMA原理深度解析(上)

1 简介

1.1 DMA系统框图

首先一起来看看S32K3XX单片机DMA系统的庐山真面目

从上图中可以看出,eDMA主要由两部分构成,一部分是 eDMA引擎,负责仲裁,控制,数据传输等工作;另一部分是传输控制描述符,存储了各个通道操作所需的属性数据,比方说,传输数据的源地址,目的地址等。整个系统设计得精巧而优雅。

eDMA引擎主要有两个功能:

地址计算

数据传输

传输控制描述符主要负责32个通道中每个通道传输控制描述符的存储。


1.2 各模块简介

Address path

  • 第一通道和第二通道(抢占通道)的TCD保存
  • 管理所有主机总线的地址计算

允许一个通道在数据完成读写任务时被抢占。

当一个通道被激活的时候,它会一直运行直到小循环完成,除非被一个更高优先级的通道抢占。

当选择执行任何通道时,将从本地内存中读取其TCD的内容,并将其加载到地址路径通道x寄存器中进行正常启动,并将其加载到通道y寄存器中进行抢占启动。在小循环完成执行后,地址路径硬件将TCDn_{SADDR, DADDR, CITER}的新值写回本地内存。如果主迭代(大循环)计数耗尽,则执行额外的处理,包括最终地址指针更新,重新加载TCDn_CITER字段,以及作为分散/收集操作的一部分可能从内存中获取新的TCDn。有关详细信息,请参考动态分散/收集(Dynamic scatter/gather)部分。


Data path

这个模块实现了总线主读/写数据路径。它包含一个数据缓存和必要的复杂逻辑来支持任何需要进行的数据对齐。内部的读数据总线是主输入,内部的写数据总线是主输出。

地址和数据路径模块可直接支持两级流水式内部总线。地址路径模块代表了第一级流水式总线,数据路径模块代表了第二级流水式总线。


Program model/channel arbitration

该模块实现了eDMA编程模型的第一部分以及通道仲裁逻辑。可编程的模块寄存器与内部的外设总线相连。eDMA的外设请求输入和中断请求输出也可以通过这个模块相连。


传输控制描述符(TCD)可分成两部分:Memory controller和Memory array


Memory controller

该逻辑实现了所需的双端口控制器,并管理来自eDMA引擎的访问以及来自内部外围总线的引用。如前所述,在同步访问中,eDMA引擎被赋予优先级,外围事务被停止。


Memory array

TCD存储的用于每个通道的传输配置文件。也就是所要执行的通道数据的各种相关信息。

1.3 特点

eDMA是一种高度可编程的数据传输引擎,可以最大限度地减少主机处理器所需的任何干预,eDMA模块具有以下特点:

  • 所有的数据移动都通过双地址传输:从数据的源头读出到目标写入
    — 可编程的源地址和目标地址以及传输大小
    — 支持复杂地址计算
  • 在最少干预主机处理器的前提下,实现了32通道的复杂数据传输。
    — 内部数据buffer,被用作所有数据传输的临时存储器
    — 连接到 crossbar switch,以控制总线的数据移动
  • TCD支持两层深的嵌套传输操作
    — 每个通道的32字节TCD保存
    — 由小字节传输计数定义的内部数据传输循环
    — 由主迭代计数定义的外部数据传输循环
  • 可通过三种方法让通道处于活动状态
    — 直接软件初始化
    — 通过连续转换中的通道连接机制进行初始化
    — 每个通道一个Peripheral-paced的硬件请求
  • 固定优先级和轮询通道仲裁
  • 通过可编程中断请求报告通道完成情况
    — 每个通道都可以独立产生中断,可以在主循环计数完成时产生断言
    — 每个通道的可编程错误结果,被逻辑地加在一起形成一个中断控制器的错误中断
  • 可编程支持分散/收集DMA处理
  • 支持复杂数据结构

2 工作流程概述

2.1 基本工作流程

2.1.1 通道激活

本例使用eDMA外设请求信号的断言来请求通道n的服务。通过软件和TCDn_CSR[START]字段激活通道遵循与外设请求相同的基本流程(也就是说,软件和硬件的通道激活方式基本一致)。

eDMA请求输入信号在内部注册,然后通过eDMA引擎:首先通过控制模块,然后进入程序模块和通道仲裁。

在下个周期中,通道仲裁采用固定优先级可选的循环算法进行仲裁。在仲裁执行完毕后,激活的通道号通过地址路径发送,并转换为访问TCDn本地存储器所需的地址,接下来,访问TCD内存,并从本地内存读取所需的描述符,然后将其加载到eDMA引擎地址路径的主通道或辅助通道执行寄存器中。TCD内存为64位宽,以尽量减少获取激活通道描述符并将其加载到地址路径寄存器所需的时间。

2.1.2 数据传输(数据流动)

与数据传输相关的模块(地址路径、数据路径和控制)通过所需的源读取和目标写入序列来执行实际的数据移动。源读取被启动,获取的数据被临时存储在数据路径块中,直到在目标写入期间将其传输到内部总线上。这个从源头读取/从目标写入操作一直持续到字节数(NBYTES)传输结束。

2.1.3 更新内存,申请中断

搬运NBYTES的数据后,执行基本数据流的最后阶段。在此段中,地址路径逻辑对一些TCD中的某些字段(例如,SADDRDADDRCITER)执行所需的更新。

如果主要迭代(大循环)计数耗尽,则执行额外的操作。这包括最后的地址调整和将BITER字段重新加载到CITER字段中。此时还会发生可选中断请求的断言,以及使用描述符中包含的scatter/gather地址指针(如果启用了scatter/gather)从内存中取出一个新的TCDTCD内存的更新和中断请求的断言显示在上面的图中。

注:相关寄存器/字段解释

NBYTES:TCD Transfer Size

定义了每次DMA请求需要搬运的字节数

BITER:TCD Beginning Major Loop Count

通道最开始设定的主循环次数

CITER :Current Major Iteration Count

通道的当前主循环计数。每次通道完成一个服务请求并将其写回TCD内存时,它都会减少

2.2 故障报告和处理

通道错误在错误状态寄存器(CHn_CSRTCDn_CSR)中报告,可能由以下任何一种原因引起:

  1. 配置错误,传输控制描述符中的某些/个设置是非法的
  2. 通过“ 错误取消传输”的硬件或软件请求 取消已经被激活的通道
  3. TCD内存错误
  4. 总线主机读或写周期的错误终止

而当报告配置错误时,可能由下面这些因素的状态不一致引起的:

  1. 起始地址或者目的地址
  2. 起始或目的地址偏移
  3. 小循环字节计数
  4. 传输大小

造成这些错误的原因可能源于以下几个方面:

  1. 地址和偏移必须与零模传输大小的边界对齐
  2. 小循环的计数大小必须起始和目的传输大小的整数倍
  3. 所有源读取和目标写入都必须配置为程序传输大小的自然边界
  4. 如果一个分散/收集操作在通道完成时使能,但分散/收集地址(DLAST_SGA)没有对齐到32字节的边界,这时候就会报告配置错误。
  5. 如果在通道完成时使能小环路通道连接,如果TCDn_CITER[ELINK]字段不等于TCDn_BITER[ELINK]字段,则在尝试连接时报告配置错误。

2.3 通道抢占

  1. 通道抢占允许在更高优先级的通道请求数据传输的时候,当前通道被挂起;
  2. 不支持嵌套抢占,也就是说,已经抢占的通道,不能被抢占
  3. 通道的抢占被禁用时,失去了抢占功能,即使是优先级更低的通道,依然不能被抢占;
  4. 为了避免相互占用,可以都设置为低优先级(也就是0)。

3 核心原理

3.1 大循环和小循环

下图显示了每个DMA请求如何启动一个小循环传输,或者迭代。DMA仲裁可在每个小循环后发生,并且允许一个级别的小循环DMA抢占。大循环中的小循环的数量由开始迭代计数(BITER)指定。

其实大循环和小循环的很多属性都可以很灵活地进行配置,详情请移步4.1小节。

3.2 eDMA仲裁机制简介

eDMA由多个优先级组成分层仲裁方案。采用固定优先级仲裁,在特定条件下也可以选择轮询仲裁。优先级顺序如下图所示:

仲裁组优先:每个通道都可以通过配置 CHn_GRPRI 寄存器来设置通道优先级,总共有32个优先级(0-31),数值越大,优先级越高。

通道优先:每个通道都可以通过配置 CHn_PRI 寄存器来设置通道优先级,总共有8个优先级(0-7),数值越大,优先级越高。

通道数(通道编号):当两个及其以上的通道有相同的仲裁组优先级和通道优先级的时候,就需要通过通道编号来区分优先级,通道编号越高,优先级越高,不可自定义

轮询:启用轮询时,任何配置了轮询的通道操作在仲裁组中优先级最低。通过将CSR[ERCA]字段设置为1来启用轮询。启用后,通道优先级为0 (CHn_PRI=0)的通道将被使用轮询仲裁。轮循仲裁将在仲裁组中请求服务的通道(CHn_PRI=0)之间轮换通道选择。如果请求服务将在任何循环通道中被选择,仲裁组内的任何非零通道将继续使用固定优先级仲裁。

任何通道优先级大于0的通道都会在循环之前得到服务。

3.2.1 固定组仲裁,固定通道仲裁

在该模式下,eDMA最高优先级组最高优先级的通道中选择执行通道业务请求。如果对eDMA进行编程,使高优先级组内的通道具有大量请求或大量数据传输,则该组可能会消耗eDMA控制器的所有带宽。也就是说,如果在控制器仲裁下一个DMA请求时,在最高优先级组中的通道上总是有至少一个DMA请求待处理,则不会为低优先级组提供服务DMA请求。这种方案的优点是:通道的延迟可能很小

3.2.2 固定组仲裁,轮询通道仲裁

请求的优先级最高的组先得到服务。如果高优先级组中不存在挂起请求,则为低优先级组提供服务。

在组内,非零通道优先级的通道优先得到服务。对于所有优先级为0的通道,优先选择通道编号较高的请求进行服务,然后一次到请求服务的最低通道。通道仲裁可以为低优先级通道提供一种公平机制

这种方案可能引起与固定组仲裁,固定通道仲裁相同的带宽消耗问题,最高优先级组中的所有通道都将得到服务。最高优先级组上的服务延迟很短,但随着组优先级的降低,服务延迟可能会长得多。

相关文章
|
7月前
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
6月前
|
机器学习/深度学习 数据可视化 PyTorch
深入解析图神经网络注意力机制:数学原理与可视化实现
本文深入解析了图神经网络(GNNs)中自注意力机制的内部运作原理,通过可视化和数学推导揭示其工作机制。文章采用“位置-转移图”概念框架,并使用NumPy实现代码示例,逐步拆解自注意力层的计算过程。文中详细展示了从节点特征矩阵、邻接矩阵到生成注意力权重的具体步骤,并通过四个类(GAL1至GAL4)模拟了整个计算流程。最终,结合实际PyTorch Geometric库中的代码,对比分析了核心逻辑,为理解GNN自注意力机制提供了清晰的学习路径。
482 7
深入解析图神经网络注意力机制:数学原理与可视化实现
|
6月前
|
机器学习/深度学习 缓存 自然语言处理
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
Tiktokenizer 是一款现代分词工具,旨在高效、智能地将文本转换为机器可处理的离散单元(token)。它不仅超越了传统的空格分割和正则表达式匹配方法,还结合了上下文感知能力,适应复杂语言结构。Tiktokenizer 的核心特性包括自适应 token 分割、高效编码能力和出色的可扩展性,使其适用于从聊天机器人到大规模文本分析等多种应用场景。通过模块化设计,Tiktokenizer 确保了代码的可重用性和维护性,并在分词精度、处理效率和灵活性方面表现出色。此外,它支持多语言处理、表情符号识别和领域特定文本处理,能够应对各种复杂的文本输入需求。
806 6
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
|
7月前
|
机器学习/深度学习 算法 数据挖掘
解析静态代理IP改善游戏体验的原理
静态代理IP通过提高网络稳定性和降低延迟,优化游戏体验。具体表现在加快游戏网络速度、实时玩家数据分析、优化游戏设计、简化更新流程、维护网络稳定性、提高连接可靠性、支持地区特性及提升访问速度等方面,确保更流畅、高效的游戏体验。
189 22
解析静态代理IP改善游戏体验的原理
|
7月前
|
编解码 缓存 Prometheus
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
474 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
|
6月前
|
传感器 人工智能 监控
反向寻车系统怎么做?基本原理与系统组成解析
本文通过反向寻车系统的核心组成部分与技术分析,阐述反向寻车系统的工作原理,适用于适用于商场停车场、医院停车场及火车站停车场等。如需获取智慧停车场反向寻车技术方案前往文章最下方获取,如有项目合作及技术交流欢迎私信作者。
445 2
|
8月前
|
机器学习/深度学习 自然语言处理 搜索推荐
自注意力机制全解析:从原理到计算细节,一文尽览!
自注意力机制(Self-Attention)最早可追溯至20世纪70年代的神经网络研究,但直到2017年Google Brain团队提出Transformer架构后才广泛应用于深度学习。它通过计算序列内部元素间的相关性,捕捉复杂依赖关系,并支持并行化训练,显著提升了处理长文本和序列数据的能力。相比传统的RNN、LSTM和GRU,自注意力机制在自然语言处理(NLP)、计算机视觉、语音识别及推荐系统等领域展现出卓越性能。其核心步骤包括生成查询(Q)、键(K)和值(V)向量,计算缩放点积注意力得分,应用Softmax归一化,以及加权求和生成输出。自注意力机制提高了模型的表达能力,带来了更精准的服务。
10258 46
|
7月前
|
Java 数据库 开发者
详细介绍SpringBoot启动流程及配置类解析原理
通过对 Spring Boot 启动流程及配置类解析原理的深入分析,我们可以看到 Spring Boot 在启动时的灵活性和可扩展性。理解这些机制不仅有助于开发者更好地使用 Spring Boot 进行应用开发,还能够在面对问题时,迅速定位和解决问题。希望本文能为您在 Spring Boot 开发过程中提供有效的指导和帮助。
785 12
|
7月前
|
开发框架 监控 JavaScript
解锁鸿蒙装饰器:应用、原理与优势全解析
ArkTS提供了多维度的状态管理机制。在UI开发框架中,与UI相关联的数据可以在组件内使用,也可以在不同组件层级间传递,比如父子组件之间、爷孙组件之间,还可以在应用全局范围内传递或跨设备传递。
162 2
|
6月前
|
负载均衡 JavaScript 前端开发
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

推荐镜像

更多
  • DNS