DMA简单总结

news2024/11/16 10:31:36

文章目录

    • 一、基础概念
      • 1.1 DMA---Direct Memory Access 直接存储器访问,目的减少CPU资源占用
    • 二、典型DMA硬件模型
      • 2.1 基本硬件特性---通道数、源/目标类型,地址与累加方式,数据位宽,搬移长度,循环模式,中断
      • 2.2 提升硬件利用率的链表模式(部分芯片支持)
    • 三、典型DMA软件驱动方案
      • 内存+DMA搬移(待补充)
      • CRC+DMA模式(待补充)
      • 串口+DMA模式(待补充)
      • I2C+DMA模式(待补充)
      • DMA软件方案总结(待补充)
    • 四、DMA注意事项(待补充)
      • DMA与Cache一致性(待补充)

一、基础概念

1.1 DMA—Direct Memory Access 直接存储器访问,目的减少CPU资源占用

DMA是用于在外设与存储器之间以及存储器与存储器之间提供高速数据传 输。可以在无需任何CPU操作的情况下通过DMA快速移动数据。目的是节省的 CPU 资源,可供其它操作使用。CPU资源用于重复性的内存搬移 或者 从低速外设接口查询获取非连续数据 利用率是不高的。
举例某块STM32的DMA数据链路:
在这里插入图片描述

二、典型DMA硬件模型

2.1 基本硬件特性—通道数、源/目标类型,地址与累加方式,数据位宽,搬移长度,循环模式,中断

我们拿到模块带DMA控制器的芯片如SOC之后,通常需要DMA硬件模型特性如下:
1、有几个DMA通道:决定了可以同时传输数据的数量。如A通道搬移串口数据同时,B通道搬移内存数据;
2、源/目标支持类型:不同通道支持的源类型和目标类型是有差异的,典型外设有SPI、UART、I2C、ADC、CRC、等,因此要做好规划,举例某款STM32芯片DMA类型支持如下:
在这里插入图片描述
3、地址与累加方式:源和目标在设置地址的同时,也需要设置地址指针偏移方式,比如内存搬移时 就需要递增,而一些外设比如Uart、CRC控制器等在访问时都是访问的逻辑FIFO寄存器地址,往往不会变化一直都是同一个地址。

4、访问数据宽度:通常由于不同外设有数据长度访问限制,DMA需要支持独立的源和目标传输宽度(字节、半字、字):源和目标的数据宽度不相等时,DMA 自动 封装/解封必要的传输数据来优化带宽。
5、搬移长度:启动搬移后搬移数据长度,举例如 支持1~65536字节设置,根据实际需求进行设置,如果长度超过最大长度,就需要软件多次配置启动搬移;
6、循环模式:当传输结束时,硬件自动会将传输数据量寄存器进行重装,进行下一轮的数据传输。
7、中断支持:DMA搬移完之后,经常需要通过中断上报事件给CPU,通知做后续行为,DMA控制器通常都支持中断上报(如 传输完成中断、半传输中断、传输错误等)。当然不用中断也可以通过状态寄存器访问硬件当前搬移地址状态和是否搬移完成的判断;

2.2 提升硬件利用率的链表模式(部分芯片支持)

由于DMA单次搬移有长度限制举例64KByte,如果要搬移1MByte的数据,通常是下面两种方式:
1)非中断的循环查询迭代策略: 先配置第一个64K搬移,然后在轮询调度中不停的查看DMA是否搬移完成,如果搬移完成就配置下一个64K并使能搬移,如此反复。逻辑利用率是最低的,当逻辑搬移完成 要等到下一次 轮询查看到空闲,才开始配置下一次。
2)完成中断迭代策略 相比循环查询方式,这种方式利用每个64K的搬移完成 DMA中断事件,配置启动下一块搬移。逻辑利用率有提高(中断更及时),但是仍然不是100%,从中断唤醒到下次配置之间逻辑仍然是空闲的。

有没有能让硬件DMA利用率到100%的方式呢?部分芯片支持链表模式可以做到。思路如下:
3)、链表模式:此种模式下硬件生效的不是直接寄存器配置,而是一个链表首地址,这个地址指向的内存里面一个固定大小的区域,可以看做一个DMA节点,节点区域包含了 当次搬移 包含的 起始地址、结束地址、搬移长度、数据位宽、是否屏蔽中断等 以及 下一个节点地址(如果配置0就没有下一个节点)。这样就可以把比如1M地址范围,拆分为一个一个节点串成链表,把最后一个节点完成中断打开,前面节点无需使能中断。当逻辑工作起来后,每完成一个节点后自动查找载入下一个节点,到最后一个完成时上报完成中断。
在这里插入图片描述

三、典型DMA软件驱动方案

了解完硬件模型,再看一下软件抽象的方案。DMA本身通常不会被业务模块直接访问,作为小系统能力的一部分。单纯的DMA驱动模块,调用者往往 是 内存模块(提供非CPU的内存搬移),串口模块(提供DMA模式传递数据)、CRC模块(提供非CPU的CRC计算)。因此如果是业务模块开发者通常接触较少;

内存+DMA搬移(待补充)

CRC+DMA模式(待补充)

串口+DMA模式(待补充)

I2C+DMA模式(待补充)

DMA软件方案总结(待补充)

四、DMA注意事项(待补充)

DMA与Cache一致性(待补充)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1019045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在c#中使用CancellationToken取消任务

目录 🚀介绍: 🐤简单举例 🚀IsCancellationRequested 🚀ThrowIfCancellationRequested 🐤在控制器中使用 🚀通过异步方法的参数使用cancellationToken 🚀api结合ThrowIfCancel…

‘XXX’ is already defined @typescript-eslint/no-redeclare 警告 问题解决

上文ReactTypescript项目环境中搭建并使用redux环境 结束是 其实不算完全写完吧 还会留下一个警告 这个报错 好像是说 这两个值已经定义过了 可能很多人 会觉得小问题 但你会发现 无论你名字怎么改都会一直 带着你新的名字继续报错 我们可以多套一层 export namespace Const…

Java8实战-总结29

Java8实战-总结29 并行数据处理与性能并行流将顺序流转换为并行流测量流性能 并行数据处理与性能 到目前为止,Stream接口最重要的好处是可以对这些集合执行操作流水线,能够自动利用计算机上的多个内核。 例如,在Java 7之前,并行…

Python 异常的概念

视频版教程 Python3零基础7天入门实战视频教程 异常是指程序运行的过程中出现了错误,也叫Bug。 案例一: # 定义人类 class Person:# 属性 姓名name None# 属性 年龄age Noneprint(Person().sex)因为Person类没有sex属性,对象访问sex属性…

Go语言开发环境搭建指南:快速上手构建高效的Go开发环境

Go 官网:https://go.dev/dl/ Go 语言中文网:https://studygolang.com/dl 下载 Go 的语言包 进入官方网站 Go 官网 或 Go 语言中文网: 选择下载对应操作系统的安装包: 等待下载完成: 安装 Go 的语言包 双击运行上…

HuggingFace Transformer

NLP简介 HuggingFace简介 hugging face在NLP领域最出名,其提供的模型大多都是基于Transformer的。为了易用性,Hugging Face还为用户提供了以下几个项目: Transformers(github, 官方文档): Transformers提供了上千个预训练好的模型可以用于不…

GitHub 曝出漏洞,或导致 4000 多个存储库遭受劫持攻击

The Hacker News 网站披露,安全研究员发现 GitHub 中存在一个新安全漏洞,该漏洞可能导致数千个存储库面临劫持攻击的风险。据悉,在 2023 年 3 月 1 日漏洞披露后,微软旗下的代码托管平台已于 2023 年 9 月 1 日解决了安全漏洞问题…

无涯教程-JavaScript - FACT函数

描述 The FACT function returns the factorial of a number. The factorial of a number is equal to 1*2*3*...* number. 语法 FACT (number)争论 Argument描述Required/OptionalNumberThe nonnegative number for which you want the f…

LeetCode 39. Combination Sum【回溯,剪枝】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

C#小知识

项目编译后复制文件到生成目录 方法1 对于单个文件,可以点击属性。输出目录里选择始终复制。 方法2 把项目中的ServerScripts复制到输出目录。 在项目设置中,生成事件里添加批处理 xcopy $(ProjectDir)ServerScripts\*.* $(TargetDir)ServerScrip…

cms之帝国cms安装

内容摘要 帝国网站管理系统,英文名称为EmpireCMS,简称“帝国CMS”,本文将介绍帝国网站管理系统的安装方法。 前言: 本文安装教程是以帝国CMS7.5版本为基础进行图文讲解。 各位看官,一定要按照每个步骤去执行&#xf…

人机中的事实与价值时空、排序

人机结合智能与事实价值融合分析确实是未来解决复杂疑难问题的基本策略之一。该策略利用人类智慧和机器智能相结合,结合有效的事实和价值分析方法,以更全面、准确、高效地解决问题。 通过人机结合,可以充分发挥人类的主观能动性、判断力和创造…

【Java 基础篇】Java 字节流详解:从入门到精通

Java中的字节流是处理二进制数据的关键工具之一。无论是文件操作、网络通信还是数据处理,字节流都发挥着重要作用。本文将从基础概念开始,深入探讨Java字节流的使用,旨在帮助初学者理解和掌握这一重要主题。 什么是字节流? 在Ja…

【JavaSE笔记】类和对象(万字详解)

一、前言 Java是一种广泛应用于各个领域的编程语言,它的面向对象编程范式使得它成为了当今软件开发的主要选择之一。通过面向对象编程,Java使程序员能够将代码组织成易于理解和维护的结构,并且在开发大型复杂的应用程序时提供了许多便利。 …

STM32单片机——DMA数据传输

STM32单片机——DMA数据传输 DMA相关概述实验一:内存到内存搬运Cubemx工程配置Hal库程序设计及实现固件库程序设计及实现 实验二:内存到外设(DMA串口发送)Cubemx工程配置Hal库程序设计及实现固件库程序设计 实验三:外设…

FPGA-结合协议时序实现UART收发器(六):仿真模块SIM_uart_drive_TB

FPGA-结合协议时序实现UART收发器(六):仿真模块SIM_uart_drive_TB 仿真模块SIM_uart_drive_TB,仿真实现。 vivado联合modelsim进行仿真。 文章目录 FPGA-结合协议时序实现UART收发器(六):仿真模…

2023-09-17 LeetCode每日一题(打家劫舍 II)

2023-09-17每日一题 一、题目编号 213. 打家劫舍 II二、题目链接 点击跳转到题目位置 三、题目描述 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房…

C#,《小白学程序》第二十六课:大数乘法(BigInteger Multiply)的Toom-Cook 3算法及源程序

凑数的&#xff0c;仅供参考。 1 文本格式 /// <summary> /// 《小白学程序》第二十六课&#xff1a;大数&#xff08;BigInteger&#xff09;的Toom-Cook 3乘法 /// Toom-Cook 3-Way Multiplication /// </summary> /// <param name"a"></par…

如何隐藏windows10系统任务栏右下角的语言输入法图标?

勾选“使用桌面语言栏(如果可用)”&#xff0c;任务栏的输入法图标立刻消失

【Java基础夯实】我消化后的ThreadLocal是怎样的?

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…