【大容量数据存储方案——SD卡和FATFS文件系统】
SD卡作为便携式电子设备的主要存储介质,需根据应用场景选择合适的接口类型和速度等级。SD卡需结合FATFS文件系统实现高效管理,满足不同数据规模的存储需求。
大容量数据存储方案——SD卡与FATFS文件系统
引言:全场景存储方案表
存储:将数据持久化保存在某种介质中,确保断电后不丢失,需要时可读取
存储特性:持久性、可寻址、读写速度、容量、寿命
半导体存储(芯片级)
| 类型 | 代表方案 | 原理 | 特点 |
|---|---|---|---|
| DRAM(动态随机存储器) | 电脑内存条 | 电容存储电荷(需定时刷新) | 速度快、掉电丢失 |
| SRAM(静态随机存储器) | CPU缓存 | 触发器锁存数据 | 极快、功耗高 |
| Flash(闪存,芯片自带存储空间) | U盘/SSD | 浮栅晶体管捕获电子 | 掉电不丢、擦写慢 |
| EEPROM(小容量电可擦存储器) | 设备配置芯片 | Fowler-Nordheim隧穿效应 | 可单字节修改、寿命长 |
不同数据规模的存储方案不同,需根据数据量级和访问需求选择更经济高效的存储介质
| 存储方案 | 容量范围 | 接口/协议 | 核心优势 | 典型应用场景 | 适用规模 |
|---|---|---|---|---|---|
| 嵌入式贴片存储 | |||||
| 贴片式 TF 卡 | 128MB~32GB | SDIO/SPI | 超小体积(6×8mm),抗震性强,成本低 | 智能穿戴、工业传感器 | 单设备 |
| eMMC | 8GB~1TB+ | eMMC 5.1/UFS 3.1 | 高随机读写(数万IOPS),支持ECC纠错 | 工业平板、车载导航 | 中型设备 |
| 工规级存储芯片 | |||||
| SPI NOR Flash | 32Mb~128Mb | SPI/QSPI | 120MHz高速读取,10万次擦写,-40℃~85℃宽温 | 车载系统启动代码、工控固件 | 单设备 |
| LPDDR4X | 2GB~8GB | LPDDR4X 4266Mbps | 低功耗(0.6V),抗震动,工业级寿命 | 工业自动化、轨道交通控制 | 子系统 |
| 本地化存储系统 | |||||
| 外挂 SPI Flash | 1MB~128MB | SPI | 直接地址读写,无需文件系统 | 字库存储、设备日志 | 单设备 |
| 外挂 EEPROM | 1KB~512KB | I²C | 单字节修改,100万次擦写寿命 | 计数器、用户配置参数 | 单设备 |
| SD卡+FatFs | 100MB~32GB | SDIO/SPI | 支持热插拔,文件管理便捷 | 数据记录仪、便携医疗设备 | 中型设备 |
| 企业级存储方案 | |||||
| 群晖/QNAP NAS | 50TB~500TB+ | 10GbE/25GbE | RAID6冗余,SSD缓存加速,快照保护 | 企业文件共享、视频编辑协作 | 企业级 |
| 光纤SAN (如SV6800) | 百TB~PB级 | 8Gb/16Gb FC | 百万IOPS,5个9可用性,在线扩容 | 金融核心数据库、4K视频制作 | 数据中心 |
| 海量数据处理架构 | |||||
| Hadoop HDFS | PB~EB级 | 分布式节点 | 3备份容错,支持超大规模数据分片存储 | 互联网大数据分析、AI训练 | 超大规模 |
| HTAP混合存储 | 数十PB+ | Multi-Raft/AFS | OLTP+OLAP分离,Serverless弹性资源 | 实时分析+事务处理(如搜索推荐) | 云计算 |
| 科研级备份方案 | 3PB~6.8PB | 16Gb FC | NVMe+SAS SSD混合,冗余控制器 | 长期科研数据归档、高可靠备份 | 研究机构5 |
一、SD卡的定义和用途
常说的“内存卡”,是一种常见小型可反复擦写数据的“电子存储芯片”,通常封装在一个塑料外壳里,常用于数码相机、智能手机、笔记本电脑、无人机等便携式电子设备里,作为主要的存储介质或用来扩展存储
*
如果是购买储存卡,关注这三个信息即可
接口类型: 电赛选型:
- 主控STM32F4 → 选I型卡(II型卡不兼容)
- 主控STM32H7 → 选II型卡(发挥UHS-I性能)
存储容量
写入速度
| 接口类型 | 协议版本 | 总线引脚 | 理论速度 | STM32兼容性 |
|---|---|---|---|---|
| I | SD 3.0及以下 | CLK/CMD/DAT0~3 | ≤104MB/s | 所有型号支持(含F1/F4) |
| II | SD 3.0+ UHS | 新增DAT1/DAT2复用以提速 | ≤312MB/s | 仅F7/H7等高端系列支持 |
高性价比方案(预算<50元)
| 型号 | 接口类型 | 速度等级 | 最低写入保障 | 适用场景 |
|---|---|---|---|---|
| 三星EVO Plus | I | U3/V30 | 无公开数据 | 通用数据记录 |
| 闪迪Ultra | I | U1/C10 | 无公开数据 | 低频日志存储(≤10Hz) |
工业级稳定方案(预算>100元)
| 型号 | 接口类型 | 速度等级 | 最低写入保障 | 核心优势 |
|---|---|---|---|---|
| 金士顿Industrial | I | U3/V30 | ≥15MB/s | -40~85℃宽温 |
| 创见M400 | II | U3/V30 | ≥20MB/s | 抗震动+意外断电保护 |
二、SD卡的特点
- 体积小:有多种尺寸规格
- 可移动:可在兼容设备之间插拔,转移数据
- 不易丢失:断电后数据不会丢失
- 容量差异大:早期几MB到如今几TB都存在
- 速度等级:不同速度等级影响读写速度
- 接口:通过金属触点与读卡器或设备链接,使用特定通信协议
(一)基本单位:扇区(也叫数据块)
是存储设备在物理或逻辑上被划分为许多固定大小的基本块,是操作系统和存储设备控制器之间进行数据传输的最小单位
- 传统扇区大小512字节(如果整个存储空间是一本书,那扇区就是其中一页,每页固定512个字),现在更常见的是每扇区4096字节(4K)

(二)两种接口类型
本质是一组物理线路+控制线路的通信规则(相当于与设备对话的语言),操作者通过编程操控电平变化实现数据存取
应用时需要手动把线连接在对应单片机引脚上
1.SPI(可连接任意低速外设)
物理连线
- 通信规则是串行接口协议(用单根数据线逐位传输数据的通信规则),结构简单(只需四根数据线:CLK、MOSI、MISO、CS)
时钟线CLK(STM32引脚PA5):主机向从机提供数据传输节奏,每个脉冲采样一位数据
片选线CS(STM32引脚PA74):用于选中目标设备进行信息交互
数据线MOSI(STM32引脚PA7):主机向从机单向输入数据
数据线MISO(STM32引脚PA6):从机向从机单向输出数据
- 这四根线是所SPI通信的基石,再没有精简的可能了
2.SDIO(电赛推荐,专为储存设备做的,但使用难度相对大)
- 通信规则为半通用接口(6~9线),能控制三类设备:存储卡(SD、eMMC)、IO设备(SDIO WiFi模块)、组合设备(GPS+SD存储)
时钟线CLK(STM32引脚PC12):主机向从机单向提供时钟信号,同SPI但频率更高
命令线CMD(STM32引脚PD2):双向,传输命令(主机到从机)和响应(从机到主机)
(CMD是SPI没有的核心线)
默认数据线0 DAT0(STM32引脚PC8):双向,类似于MISO+MOSI合并,单线模式组成双线效果
数据线1 DAT1(STM32引脚PC9):双向,4线模式启用,SPI没有
数据线2 DAT2(STM32引脚PC10):双向,4线模式启用,SPI没有
数据线3 DAT3(STM32引脚PC11):双向,4线模式启用兼作卡检测(CD)类似但强于SPI的CS线
电源线VCC(STM32引脚3.3V,不能接5V):和SPI一样
地线GND(S TM32引脚GND):和SPI一样
卡检测线CD(STM32引脚PC12):从机到主机单向,用于检测卡插入 SPI没有
写保护线WP(STM32引脚PC12):从机到主机,高电平开启,SPI没有
————————————————————————————————————
- 核心六线:CLK + CMD + DAT0 + DAT3 + VCC + GND 是最小必需连线
- DAT1或DAT2:仅当需要高速传输(>10MB/s)时连接
- CD或WP:非必需,但工业级应用建议连接
3.附1:嵌入式领域7大串行接口
(1) 基础(电赛必用)
| 接口 | 全称 | 数据线数量 | 典型速度 | 应用场景 |
|---|---|---|---|---|
| UART | 通用异步收发器 | 2(TX/RX) | 115.2Kbps | 串口调试、GPS模块 |
| I²C | 内部集成电路 | 2(SCL/SDA) | 400Kbps-3.4Mbps | 传感器(BMP280)、EEPROM |
| SPI | 串行外设接口 | 4(SCK/MOSI/MISO/CS) | 10-100Mbps | SD卡(低速)、OLED屏 |
(2)高速(工业/视频 用)
| 接口 | 全称 | 数据线数量 | 典型速度 | 应用场景 |
|---|---|---|---|---|
| SDIO | 安全数字输入输出 | 4-8 | 50-312MB/s | 高速SD卡、4G模块 |
| USB | 通用串行总线 | 4(D+/D-/VBUS/GND) | 480MB/s(USB2.0) | 摄像头、HID设备 |
| CAN | 控制器局域网 | 2(CAN_H/CAN_L) | 1Mbps | 汽车电子、工业总线 |
| MIPI CSI/DSI | 移动产业处理器接口 | 4-8对差分线 | 2.5Gbps/通道 | 摄像头、显示屏 |
附2:为什么“节省线”这么重要?
- PCB成本:每少2根线,板层可减1层(4层→2层 省$30)
- 抗干扰:线数减少50%,信号串扰降低70%
- 功耗优化:每根IO口驱动电流约3mA,少4根线省12mA,是电池设备的关键
- 连接器空间:6针简易座相比40针排座,尺寸差5倍,省空间
三、扇区级读写(一般不使用)
绕过文件系统,通过簇(对扇区的集合)直接调用扇区储存的原始数据,进行某扇区某字节数据的读取和存储; 即使只修改一个字节,也必须读取整个扇区到内存再修改目标字节,再将整个扇区写回内存卡
- 适用场景:文件系统损坏、创建存储设备副本、测试存储设备性能、低级开发
- 劣势:危险系数高,直接写入错误的扇区会瞬间对文件系统或用户数据产生不可逆的破坏
四、FATFS文件系统原理及移植
具体项目中,我们可以将其移植到MCU上,并结合RTOS,从而直接像在Windows那样用相应的文件读写接口open/write/read函数来读写SD卡的文件
RTOS是专为实时响应设计的操作系统核心,其核心特征是 确定性任务调度(确保高优先级任务严格按时完成)
(一)FATFS文件级系统的定义及储存原理
FAT文件系统起源于1980年左右,最先被MS-DOS(电脑前身)应用,起初是为一个简单的文件系统开发的,适用于小于500K字节的软盘,在发展过程中,先后经历了FAT12(如容量较小的软盘——薄而柔软的圆形磁性薄膜片)、FAT16、FAT32、EXFAT文件系统的发展,区别在于它们对磁盘分区大小和文件大小的支持不同
- 本质是软件模块,可用于对存储设备上的文件系统区域访问,广泛用于嵌入式系统和嵌入式设备
- 将整个存储区域划分为若干部分——簇,分别用于放置不同信息,每个簇包含相同数量的扇区;而簇以链表的形式存储
相比扇区级操作,操作者只需要决定保存某个文件,操作系统便负责决定把这个文件内容储存在那些簇
保留区:
- 包括首扇区(DBR):由BPB(文件系统关键参数)+引导代码 组成
- 包括后续扇区:由FSInfo扇区(记录空闲簇数量)+备份首扇区 组成
Fat表:
- 记录文件占用了哪些簇(空闲簇0x00000000、坏簇0x0FFFFFF7)、簇之间的链接关系
- 记录链表的链接关系(每随着链表找到一个簇的数据,就标明该链表储存的下一个簇是哪个,相当于一个路标)
- 数量由BPB定义,通常由两个FAT表互为备份
数据区:
- 结构分层:
- 目录项解析:目录本质上也是一个文件,存储着其自己的数据(比如目录下有哪些文件)
存储某个文件时,FAT表检索空闲簇,将文件逐步储存于空闲簇里,不要求连续性,若遇到下一个簇储存其他文件被占用的情况,则继续往后寻找,直到找到空闲簇便继续存储。整体存储方式像一条链子,故被称为链表储存形式
(二)移植
1.1 CubeMX配置
在CubeMXz中配置后生成代码,在Keil中编译
当SD卡、时钟线、数据线的布线不够简洁或干扰严重时,高频信号会失真,导致SD卡通信失败,因此把时钟频率降下到32MHz,通过降低SPI波特率补偿信号质量差的问题,这是新手常见解决方案。
用的RBT3单片机
分隔

分隔

成功后打开,复制系统时钟,等下覆盖掉原本的时钟

1.2下载 STN32Cube_FW_G0_V1.6.0 安装包
ST社区(包括STM32相关372个产品等等) https://community.st.com/?ecmp=tt31630_gl_enews_mar2023&mkt_tok=ODU2LVBWUC03MTUAAAGbfR3yAoQJm4Vp02l6p12LpSS6wd2GaXDnW1t8Xm7timehPkr0PIGEXa_Vbs9CtKuYCniWGgrB8RZdlg_XgPsoP0L2Usf0Mq1EHj2kHCHkTqYWvAYt4Q
STM32CubeG0下载
https://www.st.com.cn/zh/embedded-software/stm32cube-mcu-mpu-packages/products.html
下载完,打开文件夹,依次打开文件
Projects–> NUCLEO-G071RB–> Applications–> FatFs --> MDK-ARM --> Keil
打开,找到main.c中的void SystemClock_Config(void)时钟设置,改成刚刚复制的

烧录

把SD卡从电脑上拔出插进读卡器,若读卡器中若多出刚刚的STM32.hex文件则证明运行成功。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)