Chinaunix首页 | 论坛 | 博客
  • 博客访问: 119831
  • 博文数量: 35
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 165
  • 用 户 组: 普通用户
  • 注册时间: 2016-10-24 15:06
文章分类

全部博文(35)

文章存档

2017年(5)

2016年(30)

我的朋友

分类: LINUX

2016-12-20 10:57:36

DMA和burst不是一个概念。

DMA传送不经过CPU的控制,假如硬盘的数据不能经过DMA控制器读到内存,那么每完成一次将硬盘的数据读出来,再存放到内存的操作,都要通过CPU运行几条读写指令来完成,这时CPU就做不了别的事了,如果有DMA控制器,则这个过程不需要CPU的参与,只需要占用总线就可以了。CPU还可以去完成别的运算。

Burst操作还是要通过CPU的参与的,与单独的一次读写操作相比,burst只需要提供一个其实地址就行了,以后的地址依次加1,而非burst操作每次都要给出地址,以及需要中间的一些应答、等待状态等等。如果是对地址连续的读取,burst效率高得多,但如果地址是跳跃的,则无法采用burst操作



一般芯片的dma有基本功能。

1、普通的内存、外设间互传数据,一次性的。

2、支持链表的,美其名曰“scatter”,内核有struct scatter可以参考。

说一下注意点:

 dma有burst、burst size、transfer的概念:

 

burst:

dma实际上是一次一次的申请总线,把要传的数据总量分成一个一个小的数据块。比如要传64个字节,那么dma内部可能分为2次,一次传64/2=32个字节,这个2(a)次呢,就叫做burst。这个burst是可以设置的。这32个字节又可以分为32位 *8或者16位*16来传输。

 

transfer size:

就是数据宽度,比如8位、32位,一般跟外设的FIFO相同。

 

burst size:

就是一次传几个 transfer size.

 

配置数据宽度为32位。一次传8个32位=32个字节。

那么如果总长度为128字节,那么实际dma设置的长度为 128/32 = 4.

阅读(1454) | 评论(0) | 转发(0) |
0

上一篇:DMA技术

下一篇:SPI读写总结

给主人留下些什么吧!~~