历史上的今天
今天是:2025年01月31日(星期五)
2020年01月31日 | STM32——SD卡和FATFS文件系统
2020-01-31 来源:eefocus
最近看了32的sd卡和FATFS文件系统,现在就自己的理解总结一下。
一、SD卡模块
SD 卡:安全数码卡, 它是在 MMC 的基础上发展而来, 是一种基于半导体快闪记忆器的新一代记忆设备。按容量分类,可以将SD 卡分为 3 类: SD 卡、 SDHC 卡、 SDXC 卡。SD卡(SDSC):0~2G SDHC卡:2~32G SDXC卡:32G~2T。
SD 卡一般支持 2 种操作模式:
SD 卡模式(通过 SDIO 通信):允许 4 线的高速数据传输,只能使用 3.3V 的 IO 电平,所以, MCU 一定要能够支持 3.3V 的 IO 端口输出。
SPI 模式:同 SD 卡模式相比就是丧失了速度,在 SPI 模式下, CS/MOSI/MISO/CLK 都需要加 10~100K 左右的上拉电阻。
SD卡引脚功能表:

3.SD卡的5个寄存器:

4.SD卡初始化过程(知道 SD 卡的类型V1、 V2、 V2HC 或者 MMC):
初始化与 SD 卡连接的硬件条件(MCU 的 SPI 配置, IO 口配置);
上电延时(>74 个 CLK)(因为 SD 卡内部有个供电电压上升时间,大概为 64 个 CLK,剩下的 10 个 CLK 用于 SD 卡同步,之后才能开始 CMD0 的操作);
复位卡(CMD0),进入 IDLE 状态;
发送 CMD8,检查是否支持 2.0 协议;
根据不同协议检查 SD 卡(命令包括: CMD55、 CMD41、 CMD58 和 CMD1 等);
取消片选,发多 8 个 CLK(提供 SD 卡额外的时钟,完成某些操作),结束初始化;
5、SD卡读取数据(CMD17):
发送 CMD17;
接收卡响应 R1;
接收数据起始令牌 0XFE;
接收数据;
接收 2 个字节的 CRC,如果不使用 CRC,这两个字节在读取后可以丢掉。
禁止片选之后,发多 8 个 CLK;
6、SD卡写数据(CMD24):
发送 CMD24;
接收卡响应 R1;
发送写数据起始令牌 0XFE;
发送数据;
发送 2 字节的伪 CRC;
禁止片选之后,发多 8 个 CLK;
7、硬件设计:(mini板)
SD卡通过4根信号线与STM32连接, SD卡的片选(SD_CS)连接PA3,SD卡的SPI接口,连接在STM32的SPI1上面。
要注意的是SPI1被3个外设共用了: SD卡、 W25Q64和NRF24L01,在使用SD卡的时候,必须禁止其他外设的片选,以防干扰。
二、FATFS文件系统
FATFS 是一个完全免费开源的 FAT 文件系统模块,专门为小型的嵌入式系统而设计。可以移植到 8051、 PIC、 AVR、 SH、Z80、 H8、 ARM 等系列单片机上而只需做简单的修改。它支持 FATl2、 FATl6 和 FAT32,支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读/写,并特别对 8 位单片机和 16 位单片机做了优化。
FATFS 的特点有:
Windows 兼容的 FAT 文件系统(支持 FAT12/FAT16/FAT32)
与平台无关,移植简单
代码量少、效率高
多种配置选项
支持多卷(物理驱动器或分区,最多 10 个卷)
多个 ANSI/OEM 代码页包括 DBCS
支持长文件名、 ANSI/OEM 或 Unicode
支持 RTOS
支持多种扇区大小
只读、最小化的 API 和 I/O 缓冲区等
3.与平台无关的是:

与平台相关的代码(需要用户提供)是:

FATFS 模块在移植的时候,我们一般只需要修改 2 个文件,即 ffconf.h 和 diskio.c。
4. diskio.c和diskio.h是硬件层,需要根据存储介质来修改
ff.c和ff.h是FATFS的文件系统层和文件系统的API层
5 .移植步骤:
1、数据类型:在integer.h 里面去定义好数据的类型。这里需要了解你用的编译器的数据类型,并根据编译器定义好数据类型。
2、配置:通过ffconf.h配置FATFS的相关功能,以满足你的需要。
3、函数编写:打开diskio.c,进行底层驱动编写,一般需要编写6 个接口函数
6.FATFS给用户提供了大量的API函数,可以满足我们对文件的各种操作。


7.几个重要结构体:
文件对象结构体(FIL类型):存放文件的相关信息,打开关闭读写文件等操作时需要使用其指针
目录对象结构体(DIR类型):存放目录的相关信息,对目录操作时需要其指针
文件状态结构体(FILINFO类型):存放文件的大小属性文件名等信息
文件系统对象结构体(FATFS类型)
上一篇:STM32F读写SD卡的驱动
史海拾趣
|
发觉DSP的用处真不大,而且价格有高。 做音视频的编解码,用专用的ASC电路成本更低廉,性能更高。应为这种方案的厂家提供的选择更多,成本更低廉。 至于控制领域,用 ARM7, STM32等CORTEX-M3性能价格更低廉. 例如用ARM7: LPC系列,AT91SAM7 ...… 查看全部问答> |
|
在WINXP下用cygwin编译ACE5.5 for vxworks5.5 出错,谁能帮帮我 我的环境 winxp(sp2), tornador2.2.1 cygwin perl ace5.5 我在编译时出现如下错误 Thread_Manager.cpp:In method \'int ACE_Thread_Manager::kill_grp(int, int)\': Thread_Manager.cpp:1636: Internal compiler error in \'verify_local ...… 查看全部问答> |
|
由于以前选用电池管理芯片,MAX1924V, 美信半导体不提供免费的芯片。所以修改设计,重新选用MAX17005B做为电池管理芯片,修改原理图,并已经到美信网站申请了芯片MAX17005B和MAX8790A LED驱动芯片。最新原理图如下: … 查看全部问答> |
|
触摸控制器芯片介绍: XPT2046内部有 2.5V的参考电压源,可以作为辅助输入、电池电压测量和片内温度测量的参考电压。当不使用时,参考电压源可以处于省电模式。内部参考电压源在电源电压低至2.7V时仍可正常工作。当不使用时,参考电压还可以处于省 ...… 查看全部问答> |
|
==========================================================================//-----------------------------------------------------// Design Name : uart // File Name : uart.v// : Simple UART// Coder&nb ...… 查看全部问答> |




