Файловая система LittleFS, проблема записи файлов с NOR Flash - PullRequest
2 голосов
/ 07 ноября 2019

Я настроил файловую систему LFS с тактовой частотой SPI 100 МГц, при попытке непрерывной записи структурного значения 64 байт, после 8-9 структурных данных мое флэш-устройство NOR возвращает меня в состояние занятости и разрешения записи. Передача данных SPI осуществляется непрерывно без конца.

Следовательно, я менял дизайн для каждой записи, открытия и закрытия файла, в данном случае, в некоторых строках, закрытие моего файла отнимает у меня слишком много времени. Для записи всех моих данных (2560 байт) у меня уходит 27 секунд, что недопустимо.

// LFS Configuration
cfg.read_size = 256;
cfg.prog_size = 256;
cfg.block_size = 4096;
cfg.block_count = 4095;
cfg.lookahead_size = 256;
cfg.cache_size = 512;

void fileWriteSM(const char* filename) {
    volatile uint32_t pos;
    for(int i=0; i<TOTAL_LINE ;i++){
        pos = lfs_file_write(&lfs, &fileInit, &syringeLib[i],
                             sizeof(syringeLib[i]));
    }
}

void Logging_Task::run() // Function Definition
{
    res = lfs_file_opencfg(&lfs, &fileInit, filenameInit, LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND, &bufconfInit);
    fileWriteSM("filenameInit");
    lfs_file_close(&lfs, &fileInit);
    while(1);
}

// Changed Design, it takes 27 Sec 
void fileWriteSM() {
    volatile uint32_t pos;
    for(int i=0; i<TOTAL_LINE ;i++){
        pos = lfs_file_opencfg(&lfs, &fileInit, filenameInit,
                           LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND, &bufconfInit);
        pos = lfs_file_write(&lfs, &fileInit, &syringeLib[i],
                         sizeof(syringeLib[i]));
        lfs_file_close(&lfs, &fileInit);
    }
}
...