设备驱动中的 DMA 技术详解
1. DMA 简介
直接内存访问(Direct Memory Access,DMA)是嵌入式处理器上的一种系统控制器,它允许一些主要外设(如 SPI、I2C、UART、通用定时器、DAC 和 ADC)独立于主处理单元,直接与主内存进行 I/O 数据传输。同时,DMA 还可在无需 CPU 干预的情况下,管理 RAM 数据缓冲区之间的直接数据传输。在 DMA 传输过程中,CPU 可以继续执行代码,当 DMA 传输完成后,DMA 系统控制器会通过中断信号通知 CPU。
DMA 在块内存复制场景中非常有用,例如网络数据包路由和视频流应用。特别是在需要传输较大数据块或进行重复性操作时,使用 DMA 可以避免占用大量的 CPU 处理时间,提高系统效率。
2. 缓存一致性问题
在使用缓存系统的 DMA 时,主要问题之一是缓存内容与系统内存可能不一致。以带有缓存的 CPU 和可通过 DMA 访问的外部内存为例,当 CPU 尝试访问主内存中的数据 X 时,若该数据已被处理器缓存,后续对 X 的操作将更新缓存中的副本,而不是外部内存中的版本(假设使用写回缓存)。如果在下一次设备(DMA)尝试传输 X 之前,缓存未刷新到主内存,设备将接收到过时的 X 值。同样,如果在设备(DMA)向主内存写入新值之前,未使缓存中的 X 副本无效,CPU 将基于过时的 X 值进行操作。此外,当缓存刷新时,过时的数据会被写回主内存,覆盖 DMA 存储的新数据,导致主内存中的数据不正确。
2.1 解决缓存一致性的方法
- 相干架构 :一些处理器采用总线窥探或缓存窥探机制,该系统
超级会员免费看
订阅专栏 解锁全文
787

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



