STM32F407之SD卡读数据介绍

您现在的位置:文学常识题库 > 西方文学,time:2019-07-14 08:35
上一篇:不忘初心、科技报国——理学院党委举办第二期绵阳“两弹一星”精神研修班 下一篇:没有了

STM32F407之SD卡读数据介绍

具体执行流程如下:(1)配置NVIC,SD卡通信用到SDIO中断,如果用到DMA传输还需要配置DMA中断。

注意中断服务函数不是定义在stm32f4xx_文件的,是直接定义在bsp_sdio_文件中,中断服务函数定义在个文件问题都不大,只要定义正确就可以的,编译器会自动寻找。

(2)执行SD_LowLevel_Init函数,其功能是对底层SDIO引脚进行初始化以及开启相关时钟,该函数在之前已经讲解。

(3)SDIO_DeInit函数用于解除初始化SDIO接口,它只是简单调用SD_LowLevel_DeInit函数。 而SD_LowLevel_DeInit函数是与SD_LowLevel_Init函数相反功能,关闭相关时钟,关闭SDIO电源,让SDIO接近上电复位状态。

恢复复位状态后再进行相关配置,可以防止部分没有配置的参数采用非默认值而导致错误,这是ST官方驱动常用的一种初始化方式。 (4)调用SD_PowerON函数,它用于查询卡的工作电压和时钟控制配置,并返回SD_Error类型错误。

卡读操作从SD卡读取数据可分为单块读取和多块读取。 这里介绍单块读操作流程。

SD_ReadBlock函数执行流程如下:(1)将SDIO外设的数据控制寄存器(SDIO_DCTRL)清理,复位之前的传输设置。 (2)调用SDIO_ITConfig函数使能相关中断,包括数据CRC失败中断、数据超时中断、数据结束中断等等。 然后调用SD_LowLevel_DMA_RxConfig函数,配置使能SDIO从SD卡的读取数据的DMA请求。 为使SDIO发送DMA请求,需要调用SDIO_DMACmd函数使能。 对于高容量的SD卡要求块大小必须为512字节,程序员有责任保证目标读取地址与块大小的字节对齐问题。 (3)对SD卡进行数据读写之前,都必须发送CMD16指定块的大小,对于标准卡,读取BlockSize长度字节的块;对于SDHC卡,读取512字节的块。 (4)利用SDIO_DataInitTypeDef结构体类型变量配置数据传输的超时、块数量、数据块大小、数据传输方向等参数并使用SDIO_DataConfig函数完成数据传输环境配置。

(5)最后控制器向SD卡发送单块读数据命令CMD17,SD卡在接收到命令后就会通过数据线把数据传输到控制器数据FIFO内,并自动生成DMA传输请求。

(6)SD_WaitReadOperation函数用于等待数据读取操作完成,只有在确保数据读取完成了,我们就可以放心使用数据。


编辑推荐

友情链接