目录
概述
本文主要是在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群中。