第二十八章 AT32F403A基于V2库 sdio fatfs读写sd卡

目录

概述

硬件

SDIO

初始化    

SD卡

FATFS

测试

最后


概述

         本文主要是在AT32F403A 开发板上,基于V2库实现通过fatfs读写sd卡功能。

         串口工具使用的Atlink-ez自带的串口功能。

         工程建立、调试工具配置在前面章节有详细介绍。


硬件

        硬件方面使用的是参考官方AT32F437 SURF 板子而设计的一个AT32F403A开发板板子上的芯片是AT32F403AVGT7的型号,开发板上面还板载了一个atlink-ez的仿真器,atlink-ez除了可以在线仿真和下载之外还有一个串口的功能,硬件上是通过跳线帽接到了MCU的串口1,pa9/10上面。

         如下图是开发板pcb图,以及硬件资源。(左边上角的就是atlink-ez,用usb线接到pc即可):

        如下为实物图:

        本章是sdio的功能测试,相关原理图如下:

SDIO

         AT32F403A的SD/SDIO MMC 卡主机模块(SDIO)在 AHB 外设总线和多媒体卡(MMC)、SD 存储卡、SDIO 卡间提 供了操作接口。

         主要特点:

                   与 SD 储存卡 2.0 规格版本全兼容

                   与 SDI/O 卡 2.0 规格版本全兼容并支持 1 位和 4 位数据总线模式

                   与多媒体卡 4.2 规格版本全兼容并支持 1 位、4 位和 8 位数据总线模式

                   支持 DMA 传输

                   8 位总线模式下数据传输速率可达 50 MHz。

         注意:SDIO 并不兼容 SPI 的通信模式,并且在同一时间内只能支持一个 SD/SDIO/MMC 4.2 卡。


初始化    

         本文使用的AT32403ARCT7的SDIO1接口通过fatfs文件系统对SD卡进行读写操作,使用的IO分别为PC8、PC9、PC10、PC11、PC12、PD2,均设置为复用推挽输出,PA7接的cd脚是sd卡检测功能,当插入sd卡的时候,会拉低cd,否则cd就是高电平。

         驱动以及测试代码主要是从bsp里面获取的,本文主要是对部分关键代码的说明,以及使用。

         初始化部分分为SD卡初始化和fatfs系统的初始化,其中fatfs的初始化是包含了sd卡的初始化的。

         对于fatfs系统来说主要的就是的修改,里面包含底层硬件初始化,底层的读写以及磁盘扇区大小、块大小等等。

         此例子的底层硬件初始化那就是sd卡的初始化。底层读写则是sd卡的读写,磁盘扇区等这些则是sd卡的相关参数,sd卡的参数可以从sd中里面获取到。sd卡的相关信息的结构体为sd_card_info_struct_type,初始化完后,可以读出数据到整个结构体里面。

SD卡

         Sd卡初始化部分,包含IO初始化,初始化卡,卡的初始化的速度是要在400k以下,获取卡的信息到结构体中,然后设置卡的速度、通讯模式(dma还是轮询)以及通讯位宽。

         IO初始化:

         初始化sd卡:

        获取卡信息:     

         设置卡的通讯速度:

         设置通讯模式:

         设置位宽:

         中断设置:

         Dma配置:

         当需要修改为其他的sdio口的时候,IO口,sdio口,dma配置,中断设置都需要修改。

FATFS

        本文是把sd卡作为磁盘1来操作,所以在fatfs的底层diskio.c文件中,要在磁盘1的初始化、状态、读、写、块参数中添加sd的相对于功能函数。DEV_MMC的值为1。

        fatfs初始化:  

         状态:磁盘1直接返回0 

         写:  

         读:

         块信息设置:   

         当这些都正常后就可以使用fatfs文件系统来操作文件.


测试

         测试代码

         先挂载磁盘1,挂载成功后,对磁盘进行文件的打开、写、读、关闭操作,打印磁盘的容量,最后对比读出和写入的数据。

         测试结果

         对比数据成功通过,测试ok。


最后

         有问题的可以加QQ群技术交流,同时相关代码上传到QQ群中。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F4基于SDIO总线的SD需要使用FATFS文件系统。要实现这个功能,首先需要配置STM32F4的SDIO接口以及相应的GPIO引脚。接下来,我们可以按照以下步骤进行SD: 1. 初始化SDIO接口:初始化SDIO控制器,并设置时钟和数据传输属性。 2. 初始化GPIO引脚:配置SDIO通信需要使用的GPIO引脚,包括CMD线、CLK线、以及数据线(D0-D3)。 3. 初始化SD:使用SDIO发送SD初始化命令,以便与SD进行通信。这个过程包括等待SD响应、发送上电命令、以及SD的OCR(操作条件寄存器)。 4. 检查SD状态:通过发送CMD13命令,SD状态信息。这个过程可以确保SD正常工作并准备好取或入数据。 5. 挂载文件系统:使用FATFS中的函数,将SD上的文件系统挂载到指定的逻辑驱动器。 6. 打开文件:使用FATFS中的函数,打开指定的文件。 7. 取或入数据:使用FATFS中的函数,取或入数据到SD上的文件。 8. 关闭文件:使用FATFS中的函数,关闭文件。 9. 卸载文件系统:使用FATFS中的函数,卸载SD上的文件系统。 需要注意的是,在进行操作时,需要确保SD已经插入并且正确连接到SDIO接口上。此外,还需要根据SD的规格以及相应的存储格式,进行适当的操作。 以上就是基于SDIO总线的SD的基本步骤。通过使用FATFS,我们可以很方便地实现对SD操作,以便进行数据存储和取。希望这个回答能够对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值