Поговорим про Flash - память.
Картинки в посте ниже.
Эти микросхемы давно стали базовым компонентами плат, присутствуют буквально в каждой схеме и имеет простой интерфейс взаимодействия (чаще всего SPI). Довольно простой компонент, количество ног которого не превышает 16. Однако внутреннее устройство flash - памяти совсем не тривиально.
Базовой ячейкой, хранящей информацию является транзистор с плавающим затвором (картинка 1). В зависимости от заряда, хранимого в затворе, изменяется проводимость канала транзистора.
Один транзистор может хранить от 1 до 4 битов информации (картинка 2).
Чаще всего используется архитектура NAND, поскольку она позволяет получить больше битов при меньшем используемом пространстве кристалла. Сравнение NAND и NOR на картинке 3, реализации в кремнии на картинке 4.
У flash - памяти есть много нюансов, которые значительно усложняют жизнь дизайнерам микросхем. Опишу некоторые из них:
1. Для программирования транзистора требуется приложить напряжение до 26 В к изолированному плавающему затвору. Это необходимо чтобы заряды туннелировали в затвор (картинка 5). Для этого требуется создать на кристалле дополнительный источник питания, формирующий высокое напряжения из стандартных 1.8/3.3 В.
2. При программировании конкретного бита, за счет паразитной емкостной связи между затворами транзисторов, заряд может проникать в соседние транзисторы (картинка 6). Называется данный эффект program disturb, его негативное влияние растет с ростом уровней памяти (TLC, MLC), поскольку размер зон сужается и биты становятся ближе друг к другу (картинка 7). Борются с проблемой методиками записи, позволяющими минимизировать воздействие на соседние ячейки (картинка 8). Также при чтении может дополнительно применяться NAC (Neighbor cell assisted correction), read retry. Данные процедуры, позволяют оценивать значение соседних битов и варьировать напряжение, прикладываемое к затвору для считывания бита.
3. Утечка заряда из затвора. Со временем, после множества циклов перезаписи, диэлектрик деградирует, что создает небольшой ток утечки из затвора. Вскоре, может оказаться, что из затвора утекло достаточно заряда, чтобы хранимое в ячейке значение измелилось на соседнее. Для решения проблемы применяются различные методы адаптивного считывания, например, read retry. Кроме того, заряд в затворе регулярно обновляется контроллером памяти.
4. В ходе работы некоторые фрагменты блоков памяти оказываются недействительными. Контроллер может очистить только целый блок, но т.к. в том же блоке хранятся и полезные данные, очистить его невозможно. Память расходуется бесполезно. Для переноса полезных данных в другое место и очистки блока с недействительными данными был придуман механизм garbage collection.
5. Ячейки памяти используются с разной частотой, что приводит к большему износу одних, по сравнению с другими, потенциально это может привести к отказу изношенных ячеек. Чтобы это предотвратить был создан механизм wear leveling, позволяющий уравновесить износ ячеек путем более частой записи в менее изношенные ячейки.
6. Некоторые ячейки памяти все таки выходят из строя, нарушая работу памяти. Чтобы выход из строя ячеек оказывал минимальное влияние на работоспособность памяти (вплоть до критического момента) был создан механизм ECC. Существуют различные вариации ЕСС, который может быть реализован как дополнительная ячейка/блок/страница (рисунок 9), так и при передаче данных наряду с CRC (рисунок 10).
Исходя из всего сказанного, можно сделать вывод, что микросхема
flash - памяти не такая уж и простая вещь. Технологии совершенствуются с каждым годом, создавая новые механизмы обеспечения надежности и долговечности памяти с ростом ее объема.
Post #49
378