JohnSmith
New member
Здравствуйте.
Пытаюсь сделать на NodeMCU проигрыватель небольшого количества коротких WAV-файлов в формате 44кHz 16bit 2ch через I2S, расположенных на SPIFFS. Столкнулся с проблемой, что при циклическом чтении файла в буфер (256 байт или больше), иногда возникают задержки до 50мс, не приемлемые для непрерывного воспроизведения файлов с таким качеством.
Если включить вывод отладочной информации в файле spiffs_config.h, то создается впечатление что задержки совпадают с множественным вызовом функций работы с кэшем spiffs_cache_page_allocate и spiffs_cache_page_free. Я пробовал отключить кэш:
Но код при этом не компилируется, так как отключается тело функции, которая вызывается из файла spiffs_api.h:
cacheBufSizeв случае с включенном кэшем равно 1400, и если кэш отключить и прописать статично 1400 либо 0 или другое значение - то после компиляции и прошивки ESP уходит в BSOD.
Также я заметил, что на задержки влияют размер файла, заполненность SPIFFS, режим Flash Size 4M (1M SPIFFS), или 4M (3M SPIFFS).
Помимо прочего, есть опасения, что попалась битая микросхема флэш.
Я буду очень признателен, если мне кто-нибудь подскажет, что является причиной этих задержек и есть ли способ от них избавиться. Возможно ли как-нибудь отключить использование кэш и проверить флэш-память на бэды.
Спасибо.
Пытаюсь сделать на NodeMCU проигрыватель небольшого количества коротких WAV-файлов в формате 44кHz 16bit 2ch через I2S, расположенных на SPIFFS. Столкнулся с проблемой, что при циклическом чтении файла в буфер (256 байт или больше), иногда возникают задержки до 50мс, не приемлемые для непрерывного воспроизведения файлов с таким качеством.
Если включить вывод отладочной информации в файле spiffs_config.h, то создается впечатление что задержки совпадают с множественным вызовом функций работы с кэшем spiffs_cache_page_allocate и spiffs_cache_page_free. Я пробовал отключить кэш:
Код:
#define SPIFFS_CACHE 0
Код:
size_t cacheBufSize = SPIFFS_buffer_bytes_for_cache(&_fs, _maxOpenFds);
Также я заметил, что на задержки влияют размер файла, заполненность SPIFFS, режим Flash Size 4M (1M SPIFFS), или 4M (3M SPIFFS).
Помимо прочего, есть опасения, что попалась битая микросхема флэш.
Я буду очень признателен, если мне кто-нибудь подскажет, что является причиной этих задержек и есть ли способ от них избавиться. Возможно ли как-нибудь отключить использование кэш и проверить флэш-память на бэды.
Спасибо.
Код:
#include <FS.h>
#define BUFFER_LEN 256
static uint8_t buffer[BUFFER_LEN];
void readFile(const char *fileName)
{
File f;
unsigned long time1, time2;
f = SPIFFS.open(fileName, "r");
unsigned long readedBytesCount = 1, readedBytesCountTotal = 0;
while (readedBytesCount > 0)
{
time1 = micros();
readedBytesCount = f.read((uint8_t *)buffer, BUFFER_LEN);
time2 = micros();
if (time2 - time1 > 1000)
Serial.printf("Readed: %lu bytes, last %d bytes reading time: %luus\r\n", readedBytesCountTotal + readedBytesCount, BUFFER_LEN, time2 - time1);
readedBytesCountTotal += readedBytesCount;
}
Serial.printf("File readed: %lu bytes\r\n", readedBytesCountTotal);
f.close();
}
void setup()
{
Serial.begin(115200);
if (!SPIFFS.begin())
{
Serial.println("SPIFFS.begin() failed");
return;
}
}
void loop()
{
readFile("/ST1.wav");
delay(500);
}
Код:
Reading file: /ST1.wav
Readed: 26368 bytes, last 256 bytes reading time: 2631us
Readed: 57600 bytes, last 256 bytes reading time: 1441us
Readed: 88832 bytes, last 256 bytes reading time: 1178us
Readed: 119808 bytes, last 256 bytes reading time: 1172us
Readed: 151040 bytes, last 256 bytes reading time: 1029us
Readed: 182016 bytes, last 256 bytes reading time: 1644us
Readed: 213248 bytes, last 256 bytes reading time: 1577us
File readed: 264646 bytes
Reading file: /ST2.wav
Readed: 26368 bytes, last 256 bytes reading time: 1392us
Readed: 57600 bytes, last 256 bytes reading time: 1063us
Readed: 88832 bytes, last 256 bytes reading time: 1708us
Readed: 119808 bytes, last 256 bytes reading time: 1457us
Readed: 151040 bytes, last 256 bytes reading time: 1200us
Readed: 182016 bytes, last 256 bytes reading time: 1187us
Readed: 213248 bytes, last 256 bytes reading time: 1065us
Readed: 244224 bytes, last 256 bytes reading time: 1331us
File readed: 264646 bytes
Reading file: /ST3.wav
Readed: 26368 bytes, last 256 bytes reading time: 1427us
Readed: 57600 bytes, last 256 bytes reading time: 1596us
Readed: 88832 bytes, last 256 bytes reading time: 1047us
Readed: 119808 bytes, last 256 bytes reading time: 1057us
Readed: 151040 bytes, last 256 bytes reading time: 1742us
Readed: 182016 bytes, last 256 bytes reading time: 1447us
Readed: 213248 bytes, last 256 bytes reading time: 1334us
File readed: 264646 bytes
Reading file: /ST4.wav
Readed: 26368 bytes, last 256 bytes reading time: 1391us
Readed: 57600 bytes, last 256 bytes reading time: 1040us
Readed: 88832 bytes, last 256 bytes reading time: 1728us
Readed: 119808 bytes, last 256 bytes reading time: 1472us
Readed: 182016 bytes, last 256 bytes reading time: 1309us
Readed: 213248 bytes, last 256 bytes reading time: 1593us
File readed: 264646 bytes
Reading file: /ST5.wav
Readed: 57600 bytes, last 256 bytes reading time: 1733us
Readed: 88832 bytes, last 256 bytes reading time: 1060us
Readed: 119808 bytes, last 256 bytes reading time: 1735us
Readed: 151040 bytes, last 256 bytes reading time: 1048us
Readed: 182016 bytes, last 256 bytes reading time: 1083us
Readed: 213248 bytes, last 256 bytes reading time: 1449us
File readed: 264646 bytes
Reading file: /ST6.wav
Readed: 26368 bytes, last 256 bytes reading time: 1141us
Readed: 57600 bytes, last 256 bytes reading time: 1731us
Readed: 88832 bytes, last 256 bytes reading time: 1212us
Readed: 151040 bytes, last 256 bytes reading time: 7437us
Readed: 182016 bytes, last 256 bytes reading time: 5333us
Readed: 213248 bytes, last 256 bytes reading time: 5589us
Readed: 244224 bytes, last 256 bytes reading time: 3511us
File readed: 264646 bytes
Reading file: /ST7.wav
Readed: 26368 bytes, last 256 bytes reading time: 5801us
Readed: 57600 bytes, last 256 bytes reading time: 5601us
Readed: 88832 bytes, last 256 bytes reading time: 4966us
Readed: 119808 bytes, last 256 bytes reading time: 5627us
Readed: 151040 bytes, last 256 bytes reading time: 5766us
Readed: 182016 bytes, last 256 bytes reading time: 5061us
Readed: 213248 bytes, last 256 bytes reading time: 4623us
Readed: 244224 bytes, last 256 bytes reading time: 2891us
File readed: 264646 bytes
Reading file: /ST8.wav
Readed: 26368 bytes, last 256 bytes reading time: 4216us
Readed: 57600 bytes, last 256 bytes reading time: 4262us
Readed: 88832 bytes, last 256 bytes reading time: 4639us
Readed: 119808 bytes, last 256 bytes reading time: 4635us
Readed: 151040 bytes, last 256 bytes reading time: 1848us
Readed: 182016 bytes, last 256 bytes reading time: 3467us
Readed: 182272 bytes, last 256 bytes reading time: 51903us
Readed: 182528 bytes, last 256 bytes reading time: 51931us
Readed: 182784 bytes, last 256 bytes reading time: 51900us
Readed: 183040 bytes, last 256 bytes reading time: 51932us
...
...
Вложения
-
100.8 KB Просмотры: 5