Стирание 1 байта внешней Flash памяти (winbond)
Я пытаюсь использовать внешнюю флэш-память Winbond 25q64jvsiq для моего проекта на основе Arduino Nano для записи звука, чтобы иметь дополнительную память для записи 1-байтовых аудиосэмплов, поскольку память Arduino nano SRAM слишком мала (8 КБ), чтобы хранить не менее 1 секунды 8-битных аудиосэмплов 8 кГц. Я пытаюсь понять основы хранения байтов во внешней памяти. Я использую для этого библиотеку SPIMemory, и я не могу найти функцию для стирания 1 байта, есть только функцияectorErase(). Поэтому мне интересно, возможно ли вообще стереть один байт внешней памяти?
Вот часть кода, где я пытаюсь переписать (стирать один байт и записать новый) следующий байт при нажатии кнопки, но когда он стирает сектор, он стирает не один байт, а все байты за ним, и я хочу манипулировать им более точно и стереть только один байт:
if(!digitalRead(5)){ //кнопка нажата
if(e<3){
e++;
flash.eraseSector(count); // стирание байта
flash.writeByte(count,e,NOERRCHK); // записываем новое значение
} else {
e=0;
flash.eraseSector(count);
flash.writeByte(count,e,NOERRCHK);
}
}
@DSP_engineer, 👍0
1 ответ
Для флэш-чипа невозможно стереть ни одного байта.
Самое близкое, что вы можете сделать, это прочитать весь сектор в память, стереть этот сектор, изменить копию в памяти, а затем записать сектор обратно.
Вам лучше использовать микросхему SPI SRAM или PSRAM вместо флэш-чипа.
- Нужна помощь с библиотекой U8GLIB
- `.readFileCounts()` не работает в мини-модуле DFPlayer
- Проблема с памятью Arduino со старыми чипами дисплея HP HDSP-2000
- Как функция/метод может определить, является ли передаваемый массив const PROGMEM (flash) или нет (RAM)?
- MP3-TF-16P работает только при подключении к последовательному монитору
- Помогите уменьшить размер скетча!
- Serial.println использует слишком много памяти (не строки)
- DFPlayer, воспроизведение звука при высоком значении pin