Всем доброго дня! Сегодняшняя статья положит начало новому небольшому циклу статей, посвященному хранению информации, различным типам памяти, способам записи/считывания данных и всему, что с этим связано. И начнем мы с устройства хорошо всем знакомой 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, видимо ОЧЕПЯТКА...
Да, поправил, большое спасибо!
Прошу прощения, за глупый вопрос. Но мне совсем непонятно, почему на линии битов (на стоке) будет высокое напряжение при хоть одном закрытом транзисторе. На схеме транзисторы подключены последовательно и если один закрыт, а именно имеет высокое сопротивление между истоком и стоком то почему мы можем фиксировать высокое напряжение на линии битов?