SD主控制器与系统存储空间进行数据传输时使用SDMA或ADMA2传输方式,需要配置的参数包括:一次传输的数据块数、每块数据大小、传输边界、传输方向、传输数据首地址、DMA传输模式等信息
(1)单DMA传输(SDMA)
单DMA传输的流程图如下图所示,在这种模式下,数据搬运通过SDMA完成,无需处理器参与,释放了CPU资源。在SDMA模式下,
System Address存储的是数据传输的实际地址
。因此SDMA传输可以从任何字节开始,对地址没有限制。数据传输块大小的定义需要根据FIFO深度来设置,其大小不能超过FIFO数据容量,一次连续传输数据块数与传输的数据量有关。
当传输达到SDMA存储边界时,SDMA控制器将停止当前传输并产生中断给CPU,需要CPU对SDMA数据传输首地址进行更新才能继续进行数据传输,降低数据传输速度!比如系统边界4KB的条件下,传输32KB的数据需要产生的8次中断才能完成数据的传输。
操作步骤:
- 系统内存的数据位置被设置为SDMA系统地址寄存器。
- 设置BlockSize寄存器,对CMD17, CMD18, CMD24, CMD25访问有效,仅在未发生传输时可以修改。
- 设置BlockCount寄存器,仅在多块传输模式下有效,控制器在每传输完一块后自减,只有在空闲时可以修改。设置Argument寄存器,该寄存器需写入SD访问CMD的bit[39:8];
- 设置Transfer Mode寄存器,主机驱动选择多块还是单块,使能块计数,数据传输的方向,自动使能CMD12和使能DMA。