Не удается прочитать файлы размером более 2 КБ, используя FreeRTOS + FAT - PullRequest
0 голосов
/ 28 ноября 2018

Я использую 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, а не в коде Altera для взаимодействия с SD-картой.,Это происходит потому, что, когда я ставлю точку останова в следующей функции, я вижу, что 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 голосов
/ 28 ноября 2018

Хорошо, я решил свою проблему.Приношу свои извинения за обвинение в FreeRTOS + FAT, я объясню проблему ниже на тот случай, если у других возникнет такая же проблема.

Я создал раздел размером 1 МБ на моей SD-карте, который я считал Fat16.Попробовав разные вещи, я решил переформатировать SD-карту с помощью следующей команды в Linux:

sudo mkdosfs -F 16 / dev / sdc4

linux выдал следующее предупреждение

ВНИМАНИЕ: Недостаточно кластеров для 16-битного FAT!Файловая система будет неверно истолкована как имеющая 12-битную FAT без опции монтирования «fat = 16».

Это побудило меня включить поддержку Fat12 в конфигурационном файле FreeRTOS + Fat, и это решило мою проблему.

...