项目未写入 FatFS SD 卡上的文件

问题描述 投票:0回答:0

我正在尝试编写一个记录器,在设备的 SD 卡上创建一个文件,并将数据存储到其中。现在,我要做的就是将文本“hello123”写入日志文件,但是当我从卡上下载文件并用文本编辑器打开时,那里没有 ASCII 数据,而是包含二进制数据(系列

^@
) 个字符。

文件创建没有任何问题,就在我尝试写入它的时候。我在设备固件上运行的另一个日志函数之后调用此函数,因此我们可以假设已安装 SD 卡并且 SD 的 CS 引脚为高电平(很低,但倒置)。

所以事件的顺序是:

  1. 节目开始
  2. 调用主记录功能并选择 SD 行
  3. 我的日志功能叫
  4. 我的 DEBUG.LOG 文件已创建
  5. DEBUG.LOG 写入并关闭
  6. 节目继续

我的代码如下:

#include <ff.h>
#include <stdio.h>
#include <string.h>
#include "main.h"

unsigned char filename[10] = "debug.log";
unsigned char line[360];
static FIL logFile;
unsigned char error = 0;
FRESULT fresult;
UINT written = 0;
FATFS fatfs[1];

void writeLog()
{
    volatile unsigned char retVal;
    memset(line, 0, sizeof(line));
    
    // check if sd card is mounted
    if(f_mount(&fatfs[0], "0:", 1) != FR_OK)
    {
        error = 1; // breakpoint purposes
    }
    else
    {
        if(f_open(&logFile, (const char*)filename, FA_CREATE_ALWAYS | FA_WRITE) == FR_OK){
            retVal = f_lseek(&logFile, f_size(&logFile));

            line[0] = 'h';
            line[1] = 'e';
            line[2] = 'l';
            line[3] = 'l';
            line[4] = 'o';
            line[5] = '1';
            line[6] = '2';
            line[7] = '3';
            line[8] = 0x00;
            f_puts((char const*)line, &logFile) ;
            f_puts("\r\n", &logFile);
            f_sync(&logFile);
            retVal = f_close(&logFile);
        }
    }
}

我不确定为什么它没有在文件中写入任何内容。我的意思是好像我向其中写入 8 个字节,文件大小为 8 个字节,当我用

^@^@^@^@^@^@^@^@^@^@
查看它时,我可以在我的 ubuntu 终端中看到
less

十六进制转储:

$ xxd DEBUG.LOG
00000000: 0000 0000 0000 0000 0000                 ..........
c embedded sd-card fatfs
© www.soinside.com 2019 - 2024. All rights reserved.