SDIO(Secure Digital Input Output)接口是一种高速的串行接口,用于连接SD卡,MM卡及其它使用SDIO接口的设备,它能够提供高达50MHz的传输速度,比一般的SPI和I2C接口的速度更快,使得它成为了移动设备上的重要接口之一。而在使用SDIO接口时,DMA(Direct Memory Access)是高效的传输方式,在SDIO接口上使用DMA可以减少CPU的占用率,从而提高系统的响应速度,提高系统的效率。本文将详细介绍SDIO DMA何时开始传输。
当需要通过SDIO接口对SD卡进行读写时,首先需要进行一些准备工作。这些准备工作主要包括:打开SDIO总线时钟,配置SDIO接口时序,配置中断和DMA等。其中,DMA的配置是通过设置SDIO注册器中的DCTRL位实现的。当在DCTRL中设置了DMAEN位时,表示SDIO接口需要使用DMA传输数据。在这个阶段,SDIO DMA还没有开始传输。
当SDIO总线时钟打开,接口时序配置完成后,需要通过SDIO接口对SD卡进行读写操作,在SDIO的读写操作中,需要把要读写的数据写入到FIFO寄存器中,然后启动SDIO的读写流程。这时,如果在DCTRL中设置了DMAEN位,SDIO将自动检测是否开启了DMA传输,如果开启了DMA传输,则SDIO开始检查DMA的相关配置信息,并按照配置开始调度DMA传输。在这个阶段,SDIO DMA已经开始传输。
在SDIO开始检查DMA的相关配置信息,并按照配置开始调度DMA传输后,SDIO DMA进入传输阶段。在这个阶段,DMA将负责SDIO接口与内存之间的数据传输。首先,DMA将SDIO接口中的FIFO中的数据读取到内存缓冲区中,然后将写入到缓冲区中的数据写入到SDIO接口的FIFO中。此时,如果SDIO接口读写数据已经完成,则SDIO DMA传输结束,否则,DMA将继续传输。
当SDIO DMA传输结束时,需要进行一些必要的清理工作。这些清理工作主要包括:关闭SDIO接口总线时钟,关闭DMA传输,关闭中断等。其中,关闭DMA传输是通过清除DCTRL中的DMAEN位实现的。在这个阶段,SDIO DMA已经完成传输,可以进行下一次的数据读写操作了。