Стирание 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);
        }
     }

, 👍0


1 ответ


2

Для флэш-чипа невозможно стереть ни одного байта.

Самое близкое, что вы можете сделать, это прочитать весь сектор в память, стереть этот сектор, изменить копию в памяти, а затем записать сектор обратно.

Вам лучше использовать микросхему SPI SRAM или PSRAM вместо флэш-чипа.

,