AVR и FATFS Многоблочное чтение

Я использую atmega1284p, и мне нужно прочитать данные с SD-карты и отправить чип аудиодекодера. Я могу сделать это с низким битрейтом, с более высоким битрейтом. MCU изо всех сил пытается отправить данные вовремя. С уважением к моим исследованиям по достижению высоких битрейтов, файлы могут быть прочитаны несколькими блоками, и после чтения первого блока нет задержки. Я выделил свой многоблочный буфер, но не знаю, как читать блоки несколькими способами с помощью библиотеки ELM Chans FATFS. Может F_read сделай это или любое другое предложение.


person msalah11    schedule 11.10.2020    source источник


Ответы (1)


Вы должны сказать f_read(), что хотите прочитать больше байтов, чем размер блока.

sect = clst2sect(fs, fp->clust);    /* Get current sector */
if (sect == 0) ABORT(fs, FR_INT_ERR);
sect += csect;
cc = btr / SS(fs);                  /* When remaining bytes >= sector size, */
if (cc > 0) {                       /* Read maximum contiguous sectors directly */
    if (csect + cc > fs->csize) {   /* Clip at cluster boundary */
        cc = fs->csize - csect;
    }
    if (disk_read(fs->pdrv, rbuff, sect, cc) != RES_OK) ABORT(fs, FR_DISK_ERR);
                
        ...

    }

Это говорит о том, что если f_read() дано количество байтов для чтения [btr], которое больше, чем размер сектора файловой системы [SS(fs)], тогда выполните многоблочное чтение cc блоков, начинающихся с блока sect.

Примечание. Сектор на диске аналогичен блоку на SD-карте.

person JettJ    schedule 26.01.2021