SGDMA与普通DMA:原理与应用
创作时间:
作者:
@小白创作中心
SGDMA与普通DMA:原理与应用
引用
1
来源
1.
https://www.cnblogs.com/yucloud/p/18170056/SGDMA_DMA
DMA(Direct Memory Access,直接内存访问)是一种让硬件设备能够直接读写主内存的技术,可以显著提高数据传输效率。本文将介绍两种常见的DMA实现方式:Block DMA和Scatter-Gather DMA(SGDMA),并探讨它们在不同硬件平台上的应用。
Block DMA与SGDMA的区别
Block DMA(普通DMA)每次只能传输一块物理上连续的数据,传输完成后会向CPU发出中断请求,CPU收到中断后才会安排下一次数据传输。这种方式在处理大量非连续数据时效率较低,因为需要频繁的CPU干预。
而SGDMA则通过使用链表来描述物理上不连续的存储空间。在传输过程中,DMA控制器会根据链表自动处理下一个数据块的传输,直到所有数据传输完成才向CPU发出中断请求。这种方式大大减少了CPU的干预次数,提高了数据传输效率。
Linux应用层Vectored I/O写法
在Linux系统中,Vectored I/O可以通过writev
函数实现,代码示例如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/uio.h>
int main(int argc, char *argv[])
{
const char buf1[] = "Hello, ";
const char buf2[] = "Wikipedia ";
const char buf3[] = "Community!\n";
struct iovec bufs[] = {
{ .iov_base = (void *)buf1, .iov_len = strlen(buf1) },
{ .iov_base = (void *)buf2, .iov_len = strlen(buf2) },
{ .iov_base = (void *)buf3, .iov_len = strlen(buf3) },
};
if (writev(STDOUT_FILENO, bufs, sizeof(bufs) / sizeof(bufs[0])) == -1)
{
perror("writev()");
exit(EXIT_FAILURE);
}
return EXIT_SUCCESS;
}
嵌入式平台上的DMA实现
STM32的DMA控制器
STM32的DMA控制器支持内存到内存、外设到内存和内存到外设等多种传输模式。其配置参数包括数据流/通道、优先级、源和目标地址、传输模式、数据量大小等。下图展示了STM32的DMA矩阵结构:
FPGA中的DMA实现
在FPGA设计中,SGDMA通过增加专门的AXI4 Scatter Gather Master接口来实现。例如,Xilinx的AXI CDMA IP支持普通DMA和SGDMA两种模式。SGDMA引擎提供了内部描述符队列,支持预读取和并行处理,可以显著减轻CPU的负担。
总结
SGDMA通过链表机制实现了对非连续数据的高效传输,相比Block DMA具有更高的数据传输效率和更低的CPU占用率。在现代嵌入式系统和高性能计算领域,SGDMA已经成为主流的DMA实现方式。
热门推荐
位运算算法篇:异或运算
长流水命是什么意思
如何有效实施知识库步骤,提升企业知识管理效率?
二次元文化在学生群体中的兴起 引发家长担忧
特摄片:日本独特的影视艺术形式
2024去境外务工需要满足哪些条件
柠檬百香果酱
论证手法大全:8种实用论证技巧详解
离婚前我该考虑哪些因素
瓷砖规格选择指南!
“诗仙”李白:一个传奇的诞生之地
焊枪点火:乙炔与氧气的正确开启顺序探究
脖子总是酸疼?骨科专家推荐你试试这2招,坐着就能搞定~
针灸、按摩能治头痛吗
出口欧盟儿童玩具的法规与合规性要求
如何与央企项目经理建立联系:实用指南与具体方法
社保证明在哪里能查到
小狗身上的毒素对宠物和人类的危害(探究小狗身上的毒素类型及其影响)
食管裂孔疝术后如何饮食?科学饮食助食管裂孔疝术后恢复
奇异博士不会出现在《复联5》中吗?他的退出引全网热议
Excel中添加矩形小方块的多种方法
营养不良性水肿怎么办
神经性耳鸣的准确诊断方法是什么
如何评估和提高循环水冷却装置的能效?
焦虑症喝什么茶比较好一点?女性焦虑症患者喝什么茶好
兄弟起名字有什么讲究
EDF研究 | 增强生态系统碳汇协同效益的案例分析
加工承揽合同与施工合同:全面解析及其法律风险管理
内地银行与香港银行大揭秘:你所不知道的差异与优势
如何找到函数的极值点,并判断它们是极大值还是极小值?