首页 > 解决方案 > 无法使用 FreeRTOS+FAT 读取大于 2Kb 的文件

问题描述

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

我正在使用 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 字节块和 2048 字节块读取数据,以防问题与扇区边界(512 字节扇区)或群集边界(每个群集 4 个扇区)有关。

我怀疑问题出在 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
}

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

标签: c++freertos

解决方案


好的,我已经解决了我的问题。对于指责 FreeRTOS+FAT,我深表歉意,我将在下面解释这个问题,以防其他人也有同样的问题。

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

须藤 mkdosfs -F 16 /dev/sdc4

linux给出了以下警告

警告:16 位 FAT 没有足够的簇!文件系统将被误解为没有挂载选项“fat=16”的 12 位 FAT。

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


推荐阅读