使用FreeRTOS + FAT无法读取大于2Kb的文件

时间:2018-11-28 11:55:18

标签: c++ freertos

我正在使用FreeRTOS v 10.1.0,此外,我还从实验室区域(160919版本)下载了FreeRTOS + FAT

我正在使用Altera Cyclone V评估板,并已成功使用演示项目和开发板的可用端口作为我自己的应用程序的基础在板上运行了FreeRTOS项目。

我还成功地在SD卡上安装了分区,并从SD卡读取了文件,并将文件写入了SD卡。

当我尝试读取大于2K的文件时,我的问题开始了。我正在使用以下ff_fread命令从以前打开的文件中读取文件,我知道该文件的长度为5777字节:

ff_fread( &byteBuffer[0],1,5777, pxSourceFile );

我发现字节缓冲区重复填充了相同的2048个字节,最大为5777个字节。所以我期望的是byteBuffer [0]到byteBuffer [2047],但是随后重复此数据。

如果问题与扇区边界(512字节扇区)或群集边界(每个群集4个扇区)有关,我还尝试读取512字节块和2048字节块的数据。

我怀疑是FreeRTOS + Fat中的问题,而不是与SD卡接口的Altera代码。这是因为当我在以下函数中放置一个断点时,我发现FreeRTOS + Fat api在成功读取4个数据扇区后实际上似乎跳回了第一个扇区。因此,看来Altera Api正在返回FreeRTOS + FAT请求的数据。

static int32_t prvReadSd( uint8_t pucDestination,
                          uint32_t ulSectorNumber,
                          uint32_t ulSectorCount,
                          FF_Disk_t pxDisk )
{
    int32_t errorCode = alt_sdmmc_read(pucDestination,
    ulSectorNumber * 512,
    ulSectorCount * 512);

    return errorCode
}

任何人都可以对我遇到的问题提供任何见解,将不胜感激。

1 个答案:

答案 0 :(得分:1)

好的,我已经解决了我的问题。我为怪FreeRTOS + FAT表示歉意,为防止其他人遇到相同问题,我将在下面解释该问题。

我在我的SD卡上创建了一个1MB的分区,我认为它是Fat16。在尝试了各种方法之后,我决定在Linux中使用以下命令重新格式化SD卡。

sudo mkdosfs -F 16 / dev / sdc4

linux发出以下警告

警告:群集不足,无法容纳16位FAT!文件系统将是 误解为具有12位FAT,而没有安装选项“ fat = 16”。

这促使我在FreeRTOS + Fat配置文件中启用Fat12支持,并解决了我的问题。