直接内存访问(DMA)控制器详解
1. 直接内存访问概述
直接内存访问(DMA)是一种特殊的数据传输方式,它允许数据在 I/O 设备和主内存之间直接传输,而无需 CPU 的干预。现代 DMA 控制器还支持内存到内存的 DMA 传输,这使得两个内存区域之间的数据传输更加高效。例如,在大多数现代计算机系统中,C 库函数 memcpy() 就是使用 DMA 传输来实现的。
1.1 DMA 控制器的基本原理
每个 DMA 传输至少由 DMA 控制器的两个内部寄存器驱动:地址寄存器和计数寄存器。DMA 通道是外围设备和 DMA 控制器之间的一对控制信号,包括 DMA 请求(DREQ)和 DMA 确认(DACK)。
1.2 “Fly-by” 和 “Fly-through” DMA
- “Fly-by” DMA :数据在 I/O 设备和内存之间传输时不经过 DMA 控制器,只需指定内存地址,DACK 信号选择外围设备,完成一次 DMA 传输只需一次内存事务,速度较快,但无法实现内存到内存的 DMA 传输。
- “Fly-through” DMA :需要指定源地址和目标地址,数据流经 DMA 控制器,控制器有一个 FIFO 缓冲区来临时存储数据。它先将源地址放到地址总线上,从源读取数据到内部 FIFO,再将目标地址放到地址总线上,将 FIFO 中的数据写入目标。完成一次 DMA 传输需要两次内存事务,但可以实现内存到内存的 DMA 传输。
超级会员免费看
订阅专栏 解锁全文
1513

被折叠的 条评论
为什么被折叠?



