登录/注册

STM32写入SD卡数据覆盖

STM32写入SD卡数据覆盖

更多

在STM32中实现SD卡数据覆盖写入,通常需要以下步骤(以FatFS文件系统库为例):

核心步骤

  1. 初始化SD卡
  2. 打开文件(使用FA_OPEN_ALWAYS | FA_WRITE模式)
  3. 定位写入位置(覆盖关键步骤)
  4. 写入数据
  5. 关闭文件

示例代码(使用FatFS)

#include "fatfs.h"

FATFS fs;   // 文件系统对象
FIL fil;    // 文件对象
FRESULT fr; // 操作结果

void write_to_sd_card(const char* path, uint32_t offset, const uint8_t* data, uint32_t size) {
    // 1. 挂载文件系统
    f_mount(&fs, "", 1);

    // 2. 打开文件(如果不存在则创建)
    fr = f_open(&fil, path, FA_OPEN_ALWAYS | FA_WRITE);
    if (fr != FR_OK) return;

    // 3. 关键:定位到覆盖位置
    f_lseek(&fil, offset);  // 指定覆盖起始位置

    // 4. 写入数据(覆盖旧数据)
    UINT bytes_written;
    f_write(&fil, data, size, &bytes_written);

    // 5. 关闭文件
    f_close(&fil);
    f_mount(NULL, "", 0);  // 卸载
}

关键点说明

  1. 覆盖原理

    • f_lseek() 将文件指针移动到指定位置(字节偏移量)
    • 后续写入会从该位置开始覆盖原有数据
    • 新数据长度可以小于/等于/大于原数据(文件会自动扩展)
  2. 打开模式

    FA_OPEN_ALWAYS | FA_WRITE  // 打开现有文件或创建新文件

    替代方案:

    • FA_CREATE_ALWAYS: 总是创建新文件(会删除旧文件)
    • FA_OPEN_EXISTING: 必须文件已存在
  3. 注意事项

    • SD卡初始化:确保硬件SPI/SDMMC和FATFS已正确配置
    • 写入对齐:建议512字节对齐提升速度
    • 错误处理:检查fr返回值(参见ff.h中的错误码)
    • 缓存刷新:重要数据后可用f_sync()立即写入物理介质

典型场景

// 覆盖文件前100字节
uint8_t new_data[50] = {0xAA, 0xBB, ...};
write_to_sd_card("data.log", 0, new_data, sizeof(new_data));

// 在文件末尾追加数据
f_close(&fil); 
fr = f_open(&fil, "data.log", FA_OPEN_APPEND | FA_WRITE);

常见问题解决

  1. 写入失败

    • 检查接线(SD卡模块的CS/CLK/MISO/MOSI)
    • 确保调用FATFS_LinkDriver()正确挂载磁盘
    • 使用f_getfree()检查存储空间
  2. 性能优化

    • 启用FF_USE_FASTSEEK配置
    • 使用多块写入f_write(&fil, data, BLOCK_SIZE*N, ...)
    • 减少f_open/f_close调用次数

提示:使用STM32CubeMX配置FatFS时,在Middleware/FATFS中启用:

  • Use writting
  • User-defined function(可选)
  • ffconf.h中调整_FS_EXFAT等选项适配SD卡容量

STM32系统】基于STM32设计的SD数据读取与上位机显示系统(SDIO接口驱动、雷龙贴片SD

、CSNP4GCR01-DPW SD卡以及数据传输模块。STM32F10

2025-05-09 16:11:48

浅谈STM32SD

STM32之SD卡

2023-10-19 18:28:19

写入SD数据在core 3.0.0上掉线的原因?怎么解决?

剩余大量内存。 如果我写一个简单的程序来将数据写入 SD 卡,我没有问题

2023-05-08 10:34:52

STM32CubeMX系列|SD

SD卡1.SD卡简介2. 硬件设计3. 软件设计3.1

资料下载 佚名 2021-12-31 19:22:20

STM32&SD实现USB虚拟U盘

下载源码请关注公众号之前的文章中介绍过STM32读写SD卡和FatFS文件系统相关的知识。今天将在这基础上介绍

资料下载 李鸿洋 2021-12-28 19:54:08

STM32挂载SD记录日志

STM32挂载SD卡记录日志

资料下载 王静 2021-12-05 21:06:09

stm32程序升级SD读取hex文件写入flash

stm32程序升级SD卡读取hex文件写入flash

资料下载 赵辉 2021-11-20 12:36:01

STM32单片机基础19——使用SDMMC接口读写SD数据

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件SDMMC外设读取SD

资料下载 佚名 2021-11-19 09:06:02

如何使用imxrt1050板和MCUXpresso将数据写入SD

我正在尝试在 SD 卡中写入数据,第一次我能够创建一个文件,但第二次执行

2023-03-20 07:07:58

有什么方法可以去读取和写入SD

我们正在尝试读取和写入 SD 卡。我们使用的是 STM32F50N8。在

2022-12-13 06:06:28

stm32程序升级SD读取hex文件写入flash的方法

@stm32程序升级SD卡读取hex文件写入flash日期:2019,1

2021-11-30 06:52:50

SD数据写入

SD卡数据写入

¥100.00
梦翼师兄

SD与文件系统数据写入问题怎么解决

SD卡文件系统做了 可以但是再往里面写数据的时候,原来的数据就会被

2020-05-20 11:08:21

如何将数据从传感器写入SD

我试图记录温度传感器数据到SD卡,将连接到PIC24F16KA102微控制器。我很难设置这个。如何将

2020-05-08 13:20:49

开发板的SD驱动程序不能写入和读出sd的内容

我现在测试MSD_WriteBuffer和MSD_ReadBuffer 是否能读写buffer ,函数返回正常值0,但是不能写入和读出sd卡的内

2019-07-01 04:35:08
7天热门专题 换一换
相关标签