Всем доброго дня! Сегодняшняя статья положит начало новому небольшому циклу статей, посвященному хранению информации, различным типам памяти, способам записи/считывания данных и всему, что с этим связано. И начнем мы с устройства хорошо всем знакомой Flash-памяти.
Что из себя вообще представляет Flash-память? Сегодня детально разберемся и проанализируем основные протекающие процессы.
Итак, сердцем многих устройств памяти является полевой транзистор с плавающим затвором. Гениальное изобретение 70-х годов 20-го века. Его отличие от обычных полевых транзисторов заключается в том, что между затвором и каналом, прямо в диэлектрике, расположен еще один проводник - который и называют плавающим затвором. Вот как все это выглядит:
На рисунке мы видим привычные нам сток-исток-затвор, а также расположенный в диэлектрике дополнительный проводник. Теперь разберемся, как же это устройство работает.
Создадим между стоком и истоком разность потенциалов и подадим положительный потенциал на затвор. Что тогда произойдет? Верно, через полевой транзистор, от стока к истоку потечет ток. Причем величина тока достаточно велика для того, чтобы "пробить" диэлектрик. В результате этого пробоя часть электронов попадет на плавающий затвор. Отрицательно заряженный плавающий затвор создает электрическое поле, которое начинает препятствовать протеканию тока в канале, в результате чего транзистор закрывается. И если отключить питание транзистора, электроны с плавающего затвора никуда не денутся, и его заряд останется неизменным на длительное время.
Но, конечно же, есть способ разрядить плавающий затвор. Для этого надо всего лишь подать на "основной" затвор напряжение противоположного знака, которое и "сгонит" все электроны, в результате чего плавающий затвор останется незаряженным. Собственно так и происходит хранение информации - если на затворе есть отрицательный заряд, то такое состояние считается логической единицей, а если заряда нет - то это логический ноль.
С сохранением информации разобрались, осталось понять, как считать информацию из транзистора с плавающим затвором. Это также довольно просто 👍
При наличии заряда на плавающем затворе его электрическое поле препятствует протеканию тока стока. Допустим, при отсутствии заряда мы могли подавать на "основной" затвор напряжение +5В, и при этом в цепи стока начинал протекать ток. При заряженном плавающем затворе такое напряжение не сможет заставить ток течь, поскольку электрическое поле плавающего затвора будет ему мешать. В этом случае ток потечет только при напряжении +10В (к примеру). Таким образом, мы получаем два пороговых значения напряжения. И, подав, к примеру +7.5В мы сможем по наличию или отсутствию тока стока сделать вывод о наличии или отсутствии заряда на плавающем затворе. Вот таким образом и происходит считывание сохраненной информации.
Как все это связано с Flash-памятью? А очень просто - полевой транзистор с плавающим затвором является минимальной ячейкой памяти, способной сохранить один бит информации. А любая микросхема памяти состоит из огромного количества расположенных определенным образом транзисторов. И вот теперь пришло время рассмотреть основные типы Flash-памяти, в частности, NOR и NAND-память.
Оба этих типа построены на основе транзисторов с плавающим затвором, которым мы сегодня уделили немало времени. А принципиальное отличие состоит в том, каким образом соединены эти транзисторы. Конструкция NOR использует двумерную таблицу проводников. Проводники называют линией битов и линией слов. Все стоки транзисторов подключаются к линии битов, а все затворы к линии слов. Рассмотрим пример для лучшего понимания:
Пусть нам надо считать информацию из какой-то конкретной ячейки. Эта ячейка, а точнее этот конкретный транзистор, подключен затвором на одну из линий слов, а стоком на одну из линий битов. Тогда мы просто подаем пороговое напряжение на линию слов, соответствующую затвору нашего транзистора, и считываем его состояние как в том примере, что мы рассмотрели чуть выше для одной ячейки.
С NAND все несколько сложнее. Если возвращаться к аналогии с массивом, то ячейки NAND-памяти представляют собой трехмерный массив. То есть к каждой линии битов подключен не один, а сразу несколько транзисторов, что в итоге приводит к уменьшению количества проводников и увеличению компактности. Это как раз и является одним из главных преимуществ NAND-памяти. Но как же нам считать состояние определенного транзистора при такой структуре? Для понимания процессов рассмотрим схему:
Как видно из схемы, одна линия битов соответствует нескольким ячейкам. И важной особенностью является следующее: если хотя бы один из транзисторов закрыт, то на линии битов будет высокое напряжение. Вот смотрите:
Действительно, низкий уровень на линии битов будет только тогда, когда вся цепочка транзисторов окажется открытой.
С этим вроде бы понятно, возвращаемся к нашему вопросу - как же считать состояние конкретного транзистора? А для этого недостаточно просто подать на линию слов (на затвор транзистора) пороговое напряжение и следить за сигналом на линии битов. Необходимо еще чтобы все остальные транзисторы были в открытом состоянии. А делается это так - на затвор нашего транзистора, состояние которого нам нужно считать, подается пороговое напряжение (как и в случае с NOR-памятью), а на затворы всех остальных транзисторов в этой цепочке подается повышенное напряжение, такое, чтобы независимо от состояния плавающего затвора транзистор открылся. И тогда считав сигнал с линии битов мы узнаем в каком состоянии интересующий нас транзистор (ведь все остальные абсолютно точно открыты). Вот и все!
И на этом на сегодня заканчиваем обсуждение, надеюсь, что статья окажется полезной и понятной, до скорых встреч.
Весьма интересно, спасибо) В продолжении планируется работа с nand flash памятью с контроллера stm32 через fsmc ? Интересует тема очень.
Раз интересует, то опишу )
Здравствуйте. Почему в транзисторах с плавающим затвором закрытое состояние считается логической 1, а открытое - логическим 0, когда в обычных транзисторах наоборот? Получается, если память очищена, все транзисторы выдают логическую 1?
1 - есть заряд на плавающем затворе(транзистор закрыт)
0 - нету заряда на плавающем затворе(транзистор открыт)
Т. е. логическое значение говорит о заряде транзистора, а не о том закрыт он или нет.
Исток полевого транзистора , через резистор , подтянут к питающему напряжению .Поэтому, при закрытом транзисторе , на истоке будет напряжение ( логическая единица) .Когда полевой транзистор открыт , это напряжение стекает через открытый переход исток - сток . Соответственно , питающее напряжение на истоке , отсутствует ( логический ноль)
Спасибо. Очень интересная статья.
Спасибо за хороший отзыв!
Спасибо, хорошая статья, и не требует дополнительных знаний
Спасибо за комментарий!
"Проводник строк вообще чаще называют линией битов, а проводник столбцов – линией слов. Все стоки транзисторов подключаются к линии битов, а все затворы к линии слов."
- на рисунке двухмерной таблицы столбцы обозваны bit, а строки word, видимо ОЧЕПЯТКА...
Да, поправил, большое спасибо!