Флеш-пам’ять: чи потрібно стерти всю сторінку, перш ніж написати лише кілька байтів?


16

Просте запитання, сподіваюся! Я не знаходжу остаточних відповідей ...

Я пишу драйвери для мікросхеми флеш-пам’яті SST25VF064C . Він спілкується через SPI.

Як і всю флеш-пам’ять (про яку я знаю), її потрібно стерти (всі біти = 1), перш ніж її можна буде записати (біт = 0). Для цього чіпа найменша площа, яку можна стерти, - 4 КБ.

Його пам'ять розділена на 256-байтні сторінки. За допомогою однієї інструкції я можу записати будь-яку точку від одного байта до 256 байт на вказану сторінку. Мені не потрібно починати на межі сторінки: перше місце, яке запрограмується, може бути в будь-якому місці сторінки.

Загальне правило - переконатися, що сторінка видалена, перш ніж писати на неї. Але чи можу я записатись на раніше написану сторінку, якщо я уникаю вже написаних областей? Наприклад, скажіть, що я зберігаю дані в байтах 0-127. Чи можу я пізніше записати ще 128 байт на ту саму сторінку, якщо починаю з байту 128?

Відповіді:


13

Так, після будь-якого стирання ви можете використовувати будь-яку кількість окремих операцій для запису даних (зміна бітів від 1 до 0) до наступної операції стирання.

Ви навіть можете переписати раніше написане місце, якщо ви очистите лише більше бітів. Це може бути зручно для підтримки таких речей, як розподільні растрові карти.


Відмінно, спасибі! Це було саме те, що я шукав.
бітмейк

Зауважте, що деякі мікросхеми не люблять, коли ви пишете попередній байт після пізнього перегляду різних аркушів даних, однак це, здається, різниться на різних пристроях.
Vality

1
@Vality: Чи можете ви навести приклад цього?
Трейд Дейва

3
@DaveTweed NXP LPC21xx та LPC23xx MCU мають контрольний байт на кожні 16 байт пам'яті; ви повинні записати всі 16 байт відразу, тому що контрольна сума записана в цій операції. Якщо ви пізніше підете і спробуєте записати нулі в одному "рядку", нулі записуються, але нова контрольна сума також буде написана і над попередньою; ймовірно, що у нього є 1, де попередній мав 0, тому контрольна сума стає недійсною. Я не пам'ятаю, чи MCU дозволяє вам читати рядок із поганою контрольною сумою. У будь-якому випадку, це може бути приклад "різнитися в різних пристроях".
Гільєрмо Пранді,

1
"будь-яка кількість окремих операцій для запису ... наступна операція стирання." Зауважте, що деякі частини, особливо вбудовані флеш-пам'яті в MCU, будуть містити максимальну кількість записів до того, як буде потрібно стирання. Імовірно, порушення цієї межі призведе до пошкодження інших областей пам’яті, тому важливо стежити за такими обмеженнями.
ajb

5

чи можу я записатись на попередньо написану сторінку, якщо я уникаю вже написаних областей?

Якщо я розумію, с. 16 кореспондентського аркуша правильно, він говорить: За допомогою цієї конкретної мікросхеми ви не повинні писати на попередньо написану сторінку, навіть якщо ви уникаєте вже написаних областей.

деталі

Таблиця даних мікросхеми флеш-пам’яті SST25VF064C на стор. 16 сказано: "Вказівки про програму сторінок програмують до 256 байт даних у пам'яті. Вибрана адреса сторінки повинна бути в стертому стані (FFH) перед початком роботи програми-сторінки".

Я припускаю, що тому "Вся обрана сторінка повинна бути в стертому стані (кожен байт на сторінці FFh) перед початком операції" Сторінка-програма "." Чи видав SST або Microchip будь-яку документацію, що роз'яснює це дивно неоднозначне речення?

На мій досвід, виробник усіх флеш-мікросхем MLC та деяких новіших флеш-фільтрів SLC мандатів, що коли сторінка буде написана, сторінка повинна стерти, перш ніж ця сторінка буде знову записана, навіть якщо ви хочете змінити лише 1 біт на 0 біт. (Це називається "правило одноразового запису" у статті YAFFS .)

На мій досвід, всі старі флеш-чіпи дозволяють вам змінити будь-який 1 біт на 0 біт без циклу стирання, навіть якщо цей біт знаходиться на сторінці або навіть у байті, у якого вже були запрограмовані інші біти на нуль - a сторінку спалаху можна запрограмувати декілька разів між стираннями. (Це називається "кілька записів" у статті YAFFS).

Лист даних виробника - це умовна обіцянка, яку виробник дає вам. Поки ви будете дотримуватися всіх рекомендацій даних, виробник обіцяє, що чіп буде працювати як зазначено. Я підозрюю, що якщо ви запрограмуєте попередньо написану сторінку, уникаючи вже написаних областей, є хороший шанс, ніж негайне перечитання дасть очікувані вами дані - щойно написані байти - це значення, які ви тільки що написали, а інші байти, ймовірно, не змінюються. Однак, оскільки це не відповідає рекомендаціям аркуша, ви більше не можете покладатися на всі обіцянки в таблиці. Я чую чутки, що така несанкціонована діяльність спричиняє страждання часу та витривалості даних через порушення програми, перепрограмування, пастка зарядки, ефекти, подібні до молотка рядків DRAM тощо.

"Схема використання пам'яті впливає на швидкість помилок бітів. Програмування часткових сторінок, непослідовне програмування сторінок в блоці, надмірне зчитування на блок без стирання, а також нерівноцінна кількість операцій зчитування в межах одного блоку збільшує кількість прочитаного турбувати помилки. " - Міхал Джедрак. "Флеш-пам'ять NAND у вбудованих системах".

"Порушення програм виникає, коли біт ненавмисно запрограмований від" 1 "до" 0 "під час події програмування сторінки. Ця бітова помилка може виникнути або на сторінці, яка запрограмована, або на іншій сторінці в блоці. Умови напруги зміщення в блок під час програмування сторінки може спричинити тунель до сусідніх комірок пам'яті невеликої кількості струму. Повторні спроби програмування часткової сторінки продовжуватимуть посилювати цей стан ". - Дуглас Шелдон та Майкл Фрі. «Турбувати Тестування в флеш - пам'яті» . p. 8, 9.

"Порушення програм буває, коли біт ненавмисно запрограмований (від 1 до 0) під час операції програмування. ... Ця умова погіршується випадковим програмуванням в блоці та застосуванням декількох часткових записів на сторінки." "Пом'якшення несправності спалаху Yaffs NAND"


0

Велика ймовірність, що програмне забезпечення, яке ви використовуєте, вже записує "необхідні" 256 байт. Це "схоже" начебто дає вам можливість записувати від одного до 256 байтів, але я підозрюю, що те, що він робить, це АБО-то байт (-ів), який ви хочете, за допомогою "маски" 256 "FF". Якщо це правильно, то ви можете "безпечно" записати будь-який байт один раз , без необхідності стирання цілих 4 К байт. Якщо контрольна сума написана поза вашим контролем, то, швидше за все, невірна контрольна сума буде створена, коли ви запишете інший байт у раніше записаний сегмент. Наслідки цього, залежать від чіпів.

Якщо ваше програмне забезпечення для програмування не робить "АБО", ви можете зробити це самостійно. Очистіть сегмент 256 байтів, запишіть байт (и) у правильне положення (АБО) АБО за допомогою 256-байтної маски FFs та запишіть сегмент на потрібну сторінку.

Чи працює будь-який метод із будь-яким чипом, Ви можете легко визначити. Напишіть до першого 128 байта, до другого 128 байтів, переконайтесь, що перші 128 байти НЕ "переплутані"!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.