Что такое eeprom контроллера. Arduino EEPROM: энергонезависимая память

На заре возникновения памяти, сохраняющей данные при отключении питания (EPROM, E rasable P rogrammable ROM , стираемая/программируемая ROM, или по‑русски – ПИЗУ, программируемое ПЗУ), основным типом ее была память, стираемая ультрафиолетом: UV‑EPROM (Ultra‑Violet EPROM , УФ‑ППЗУ). Причем часто приставку UV опускали, т. к. всем было понятно, что EPROM – это стираемая ультрафиолетом, a ROM (или ПЗУ) просто, без добавлений – это однократно программируемые кристаллы OTP‑ROM. Микроконтроллеры с УФ‑памятью программ были распространены еще в середине 1990‑х. В рабочих образцах устройств с УФ‑памятью кварцевое окошечко, через которое осуществлялось стирание, заклеивали кусочком черной липкой ленты, т. к. информация в UV‑EPROM медленно разрушается и на солнечном свету.

На рис. 18.7 показано устройство элементарной ячейки EPROM, которая лежит в основе всех современных типов flash‑памяти. Если исключить из нее то, что обозначено надписью «плавающий затвор», мы получим самый обычный полевой транзистор – точно такой же входит в ячейку DRAM. Если подать на управляющий затвор такого транзистора положительное напряжение, то он откроется, и через него потечет ток (это считается состоянием логической единицы). На рис. 18.7 вверху изображен такой случай, когда плавающий затвор не оказывает никакого влияния на работу ячейки, – например, такое состояние характерно для чистой flash‑памяти, в которую еще ни разу ничего не записывали.

Рис. 18.7. Устройство элементарной ячейки EPROM

Если же мы каким‑то образом (каким – поговорим отдельно) ухитримся разместить на плавающем затворе некоторое количество зарядов – свободных электронов, которые показаны на рис. 18.7 внизу в виде темных кружочков со значком минуса, то они будут экранировать действие управляющего электрода, и такой транзистор вообще перестанет проводить ток. Это состояние логического нуля. Поскольку плавающий затвор потому так и называется, что он «плавает» в толще изолятора (двуокиси кремния), то сообщенные ему однажды заряды в покое никуда деваться не могут. И записанная таким образом информация может храниться десятилетиями (до последнего времени производители обычно давали гарантию на 10 лет, но на, практике в обычных условиях время хранения значительно больше).

Заметки на полях

Строго говоря, в NAND‑чипах (о которых далее) логика обязана быть обратной. Если в обычной EPROM запрограммированную ячейку вы не можете открыть подачей считывающего напряжения, то там наоборот – ее нельзя запереть снятием напряжения. Поэтому, в частности, чистая NAND‑память выдает все нули, а не единицы, как EPROM. Но это нюансы, которые не меняют суть дела.

Осталось всего ничего – придумать, как размещать заряды на изолированном от всех внешних влияний плавающем затворе. И не только размещать – ведь иногда память и стирать приходится, потому должен существовать способ их извлекать оттуда. В UV‑EPROM слой окисла между плавающим затвором и подложкой был достаточно толстым (если величину 50 нанометров можно охарактеризовать словом «толстый», конечно), и работало все это довольно грубо. При записи на управляющий затвор подавали достаточно высокое положительное напряжение – иногда до 36–40 В, а на сток транзистора – небольшое положительное. При этом электроны, которые двигались от истока к стоку, настолько ускорялись полем управляющего электрода, что просто перепрыгивали барьер в виде изолятора между подложкой и плавающим затвором. Такой процесс называется еще инжекцией горячих электронов .

Ток заряда при этом достигал миллиампера – можете себе представить, каково было потребление всей схемы, если в ней одновременно программировать хотя бы несколько тысяч ячеек. И хотя такой ток требовался на достаточно короткое время (впрочем, с точки зрения быстродействия схемы не такое уж и короткое – миллисекунды), но это было крупнейшим недостатком всех старых образцов EPROM‑памяти. Еще хуже другое – и изолятор, и сам плавающий затвор такого издевательства долго не выдерживали и постепенно деградировали, отчего количество циклов стирания/записи было ограничено нескольким сотнями, максимум – тысячами. Во многих образцах flash‑памяти более позднего времени даже была предусмотрена специальная схема для хранения карты «битых» ячеек – в точности так, как это делается для жестких дисков. В современных моделях с миллионами ячеек такая карта тоже имеется – однако число циклов стирания/записи теперь возросло до сотен тысяч. Как этого удалось добиться?

Сначала посмотрим, как осуществлялось в этой схеме стирание. В UV‑EPROM при облучении ультрафиолетом фотоны высокой энергии сообщали электронам на плавающем затворе достаточный импульс для того, чтобы они «прыгнули» обратно на подложку самостоятельно, без каких‑либо электрических воздействий. Первые образцы электрически стираемой памяти (EEPROM, Electrically Erasable Programmable ROM , электрически стираемое перепрограммируемое ПЗУ, ЭСППЗУ) были созданы в компании Intel в конце 1970‑х при непосредственном участии будущего основателя Atmel Джорджа Перлегоса. Он использовал квантовый эффект туннелирования Фаулера–Нордхейма . За этим непонятным названием кроется довольно простое по сути (но очень сложное с физической точки зрения) явление – при достаточно тонкой пленке изолятора (ее толщину пришлось уменьшить с 50 до 10 нм) электроны, если их слегка подтолкнуть подачей не слишком высокого напряжения в нужном направлении, могут просачиваться через барьер, не перепрыгивая его. Сам процесс показан на рис. 18.8 вверху (обратите внимание на знак напряжения на управляющем электроде).

Рис. 18.8. Процесс стирания в элементарной ячейке EPROM

Старые образцы EEPROM именно так и работали: запись производилась «горячей инжекцией», а стирание – «квантовым туннелированием». Оттого они были довольно сложны в эксплуатации – разработчики со стажем помнят, что первые микросхемы EEPROM требовали два, а то и три питающих напряжения, причем подавать их при записи и стирании требовалось в определенной последовательности.

Превращение EEPROM во flash происходило по трем разным направлениям. В первую очередь – в направлении совершенствования конструкции самой ячейки. Для начала избавились от самой противной стадии – «горячей инжекции». Вместо нее при записи стали также использовать «квантовое туннелирование», как и при стирании. На рис. 18.8 внизу показан этот процесс – если при открытом транзисторе подать на управляющий затвор достаточно высокое (но значительно меньшее, чем при «горячей инжекции») напряжение, то часть электронов, двигающихся через открытый транзистор от истока к стоку, «просочится» через изолятор и окажется на плавающем затворе. Потребление тока при записи снизилось на несколько порядков. Изолятор, правда, пришлось сделать еще тоньше, что обусловило довольно большие трудности с внедрением этой технологии в производство.

Второе направление – ячейку сделали несколько сложнее, пристроив к ней второй транзистор (обычный, не двухзатворный), который разделил вывод стока и считывающую шину всей микросхемы. Благодаря всему этому удалось добиться значительного повышения долговечности – до сотен тысяч циклов записи/стирания (миллионы циклов, характерные для флэш‑карточек, получаются, если добавить схемы коррекции ошибок). Кроме того, схемы формирования высокого напряжения и соответствующие генераторы импульсов записи/стирания перенесли внутрь микросхемы, отчего пользоваться этими типами памяти стало несравненно удобнее – они стали питаться от одного напряжения (5, 3,3 или даже 1,8 В).

И, наконец, третье, едва ли не самое главное, усовершенствование заключалось в изменении организации доступа к ячейкам на кристалле, вследствие чего этот тип памяти и заслужил наименование – flash (т. е. «молния»), ныне известное каждому владельцу цифровой камеры или карманного МРЗ‑плеера. Так в середине 1980‑х назвали разновидность EEPROM, в которой стирание и запись производились сразу целыми блоками – страницами. Процедура чтения из произвольной ячейки, впрочем, по понятным причинам замедлилась – для его ускорения приходится на кристаллах flash‑памяти располагать промежуточную (буферную) SRAM. Для флэш‑накопителей это не имеет особого значения, т. к. там все равно данные читаются и пишутся сразу большими массивами, но для использования в микроконтроллерах это может оказаться неудобным. Тем более, в МК неудобно использовать самый быстродействующий вариант flash‑технологии – так называемую память типа NAND (от наименования логической функции «И‑НЕ»), где читать и записывать память в принципе возможно только блоками по 512 байт (это обычная величина сектора на жестком диске, также читаемого и записываемого целиком за один раз, – отсюда можно понять основное назначение NAND).

В МК обычно используют традиционную (типа NOR) flash‑память программ, в которой страницы относительно невелики по размерам – порядка 64‑256 байтов. Впрочем, если пользователь сам не берется за создание программатора для такой микросхемы, он может о страничном характере памяти и не догадываться. А для пользовательских данных применяют EEPROM либо с возможностью чтения произвольного байта, либо секционированную, но на очень маленькие блоки – например, по 4 байта. При этом для пользователя все равно доступ остается побайтным. Характерной чертой такой памяти является довольно медленная (порядка миллисекунд) процедура записи, в то время как чтение протекает ничуть не медленнее любых других операций в МК.

Развитие технологий flash‑памяти имело огромное значение для удешевления и доступности микроконтроллеров. В дальнейшем мы будем иметь дело с энергонезависимой памятью не только в виде встроенных в микроконтроллер памяти программ и данных, но и с отдельными микросхемами, позволяющими записывать довольно большие объемы информации.

Микроконтроллеры Atmel AVR

Общее количество существующих семейств микроконтроллеров оценивается приблизительно в 100 с лишним, причем ежегодно появляются все новые и новые. Каждое из этих семейств может включать десятки разных моделей. Причем львиная доля выпускаемых чипов приходится на специализированные контроллеры – например, для управления USB‑интерфейсом или ЖК‑дисплеями. Иногда довольно трудно классифицировать продукт – так, многие представители семейства ARM, которое широко применяется для построения мобильных устройств, с точки зрения развитой встроенной функциональности относятся к типичным контроллерам, но в то же время достаточно мощное ядро позволяет отнести их и к классу микропроцессоров.

Из семейств универсальных 8‑разрядных микроконтроллеров, так сказать, «на все случаи жизни», наиболее распространены три: контроллеры классической архитектуры х51 (первый контроллер семейства 8051 был выпущен фирмой Intel еще в середине 1980‑х), контроллеры PIC фирмы Microchip (идеально подходят для проектирования несложных устройств, особенно предназначенных для тиражирования), и рассматриваемые нами Atmel AVR .

Заметки на полях

В 1995 году два студента Норвежского университета науки и технологий в г. Тронхейме, Альф Боген и Вегард Воллен, выдвинули идею 8‑разрядного RISC‑ядра, которую предложили руководству Atmel. Имена разработчиков вошли в название архитектуры AVR: Alf + Vegard + RISC. В Atmel идея настолько понравилась, что в 1996 году был основан исследовательский центр в Тронхейме, и уже в конце того же года начат выпуск первого опытного микроконтроллера новой серии AVR под названием AT90S1200. Во второй половине 1997 года корпорация Atmel приступила к серийному производству семейства AVR.

Почему AVR ?

У AVR‑контроллеров «с рождения» есть несколько особенностей, которые отличают это семейство от остальных МК, упрощают его изучение и применение. Одним из существенных преимуществ AVR стало использование конвейера. В результате для AVR не существует понятия машинного цикла: большинство команд, как мы говорили, выполняется за один такт (для сравнения отметим, что пользующиеся большой популярностью МК семейства PIC выполняют команду за 4 такта). Правда, при этом пришлось немного пожертвовать простотой системы команд, есть некоторые сложности и в области операций с битами. Тем не менее, это не приводит к заметным трудностям при изучении AVR‑ассемблера – наоборот, программы получаются короче и больше напоминают программу на языке высокого уровня (отметим, что AVR проектировались специально в расчете на максимальное приближение к структуре языка С ).

Другое огромное преимущество AVR‑архитектуры – наличие 32 оперативных регистров, не во всем равноправных, но позволяющих в простейших случаях обходиться без обращения к оперативной памяти и, что еще важнее, без использования стека – главного источника ошибок у начинающих программистов (мало того, в младших моделях AVR стек даже недоступен для программиста). Для AVR не существует понятия «аккумулятора», ключевого для ряда других семейств. Это еще больше приближает структуру ассемблерных программ для AVR к программам на языке высокого уровня, где операторы работают не с ячейками памяти и регистрами, а с абстрактными переменными и константами.

Но это, конечно, не значит, что AVR – однозначно лучшее в мире семейство МК. У него есть и ряд недостатков (например, несовершенная система защиты энергонезависимой памяти данных – EEPROM, некоторые вопросы с помехоустойчивостью, излишние сложности в системе команд и структуре программ и т. п.). А учитывая, что любые универсальные современные МК позволяют делать все то же самое, вопрос выбора платформы – вопрос в значительной степени предпочтений и личного опыта разработчика.

Несомненно, истинным подарком для фирмы Atmel стала позиция итальянских инженеров, выбравших в 2004 году AVR для любительской платформы Arduino, отчего популярность этого семейства быстро выросла, и за его будущее можно не беспокоиться. Об Arduino мы будем подробно говорить в последних главах этой книги.

Classic, Mega и Tiny

Линейка универсальных контроллеров AVR общего назначения делится на семейства: Classic, Mega и Tiny (есть и новейшее семейство Xmega , содержащее весьма «навороченные» кристаллы). МК семейства Classic (они именовались, как АТ908<марка контроллера>) ныне уже не производятся, однако все еще распространены в литературе, т. к. для них наработано значительное количество программ. Чтобы пользователям не пришлось переписывать все ПО, фирма Atmel позаботилась о преемственности – большинство МК семейства Classic имеет функциональные аналоги в семействе Mega, например, AT90S8515 – ATmega8515, AT90S8535 – ATmega8535 и т. п. (только AT90S2313 имеет аналог в семействе Tiny – ATtiny2313).

Полная совместимость обеспечивается специальным установочным битом (из набора так называемых Fuse‑битoв) , при программировании которого Mega‑контроллер начинает функционировать, как Classic (подробнее об этом рассказано в главе 19 ). Для вновь разрабатываемых устройств обычно нет никакого смысла в использовании их в режиме совместимости, однако такой прием в ряде случаев может оказаться полезным для начинающих, поскольку программы для МК Classic устроены проще и часто встречаются в литературе.

Семейство Tiny (что в буквальном переводе означает «крохотный») предназначено для наиболее простых устройств. Часть МК этого семейства не имеет возможности программирования по последовательному интерфейсу, и потому мы их, за исключением ATtiny2313, не будем рассматривать в этой книге (это не значит, что остальных Tiny следует избегать – среди них есть очень удобные и функциональные микросхемы, нередко вообще не имеющие аналогов). У составляющего исключение МК ATtiny2313 отсутствует бит совместимости с «классическим» аналогом AT90S2313, одним из самых простых и удобных контроллеров Atmel , но при внимательном рассмотрении оказывается, что они и без такого бита совместимы «снизу вверх», – программы для «классического» 2313 практически полностью подходят и для Tiny2313 (см. главу 19 ).

Структура МК AVR

Общая структура внутреннего устройства МК AVR приведена на рис. 18.9. Здесь показаны все основные компоненты AVR (за исключением некоторых специализированных) – в отдельных моделях некоторые компоненты могут отсутствовать или различаться по характеристикам, неизменным остается только общее 8‑разрядное процессорное ядро (GPU, General Processing Unit ). Кратко рассмотрим наиболее важные компоненты, с большинством из которых мы познакомимся в дальнейшем подробнее.

Рис. 18.9. Общая структурная схема микроконтроллеров AVR

Начнем с памяти. В структуре AVR имеются три разновидности памяти: flash‑память программ, ОЗУ (SRAM) для временного хранения данных и энергонезависимая память (EEPROM) для долговременного хранения констант и данных. Рассмотрим их по отдельности.

Память программ

Встроенная flash‑память программ в AVR‑контроллерах имеет объем от 1 Кбайт у ATtiny11 до 256 Кбайт у ATmega2560. Первое число в наименовании модели содержит величину этой памяти в килобайтах из ряда: 1, 2, 4, 8, 16, 32, 64, 128 и 256 Кбайт. Так, ATtiny2313 имеет 2 Кбайт памяти, a ATmega8535 – 8 Кбайт.

С точки зрения программиста память программ можно считать построенной из отдельных ячеек – слов по два байта каждое. Устройство памяти программ (и только этой памяти!) по двухбайтовым словам – очень важный момент, который ассемблерному программисту нужно твердо усвоить. Такая организация обусловлена тем, что любая команда в AVR имеет длину ровно 2 байта. Исключение составляют команды jmp, call и некоторые другие (например, lds ), которые оперируют с адресами 16‑разрядной и более длины. Длина этих команд составляет 4 байта, и они используются лишь в моделях с памятью программ более 8 Кбайт, поэтому в этом разделе книги вы их не встретите. Arduino основано на AVR‑контроллерах с большим объемом памяти, но там нам об этих тонкостях знать необязательно. Во всех остальных случаях счетчик команд сдвигается при выполнении очередной команды на 2 байта (одно слово), поэтому необходимую емкость памяти легко подсчитать, зная просто число используемых команд.

По умолчанию все контроллеры AVR всегда начинают выполнение программы с адреса $0000. Если в программе не используются прерывания, то с этого адреса может начинаться прикладная программа, как мы увидим далее. В противном случае по этому адресу располагается так называемая таблица векторов прерываний , подробнее о которой мы будем говорить в главе 19 .

Память данных (ОЗУ, SRAM )

В отличие от памяти программ, адресное пространство памяти данных адресуется побайтно (а не пословно). Адресация полностью линейная, без какого‑либо деления на страницы, сегменты или банки, как это принято в некоторых других системах.

Исключая некоторые младшие модели Tiny, объем встроенной SRAM колеблется от 128 байтов (например, у ATtiny2313) до 4–8 Кбайт у старших моделей Mega . Адресное пространство статической памяти данных (SRAM) условно делится на несколько областей, показанных на рис. 18.10. К собственно встроенной SRAM относится лишь затемненная часть, до нее по порядку адресов расположено адресное пространство регистров, где первые 32 байта занимает массив регистров общего назначения (РОН), еще 64 – регистров ввода/вывода (РВВ).

Рис. 18.10. Адресное пространство статической памяти данных (SRAM ) микроконтроллеров AVR

Для некоторых моделей Mega (ATmega8515, ATmega162, ATmega128, ATmega2560 и др.) предусмотрена возможность подключения внешней памяти объемом до 64 Кбайт. Отметим, что адресные пространства РОН и РВВ не отнимают пространство у ОЗУ данных – так, если в конкретной модели МК имеется 512 байтов SRAM, а пространство регистров занимает первые 96 байтов (до адреса $5f), to адреса SRAM займут адресное пространство от $0060 до $025F (т. е. от 96 до 607 ячейки включительно). Конец встроенной памяти данных обозначается константой RAMEND . Следует учесть, что последние адреса SRAM, как минимум, на четыре‑шесть ячеек от конца (в зависимости от количества вложенных вызовов процедур – для надежности лучше принять это число равным десяти или даже более) занимать данными не следует, т. к. они при использовании подпрограмм и прерываний заняты под стек.

Операции чтения/записи в память одинаково работают с любыми адресами из доступного пространства, и потому при работе с SRAM нужно быть внимательным, – вместо записи в память вы легко можете «попасть» в какой‑нибудь регистр. Для обращения к РОН, как к ячейкам памяти, можно в качестве адреса подставлять номер регистра, а вот при обращении к РВВ таким же способом к номеру последнего нужно прибавлять $20. Следует также помнить, что по умолчанию при включении питания все РВВ устанавливаются в нулевое состояние во всех битах (единичные исключения все же имеются, поэтому в критичных случаях надо смотреть документацию), а вот РОН и ячейки SRAM могут принимать произвольные значения.

Энергонезависимая память данных (EEPROM )

Все модели МК AVR (кроме снятого с производства ATtiny11) имеют встроенную EEPROM для хранения констант и данных при отключении питания. В разных моделях объем ее варьируется от 64 байтов (ATtinylx) до 4 Кбайт (старшие модели Mega). Число циклов перепрограммирования EEPROM может достигать 100 тыс.

Напомним, что EEPROM отличается от flash‑памяти возможностью выборочного программирования побайтно (вообще‑то, даже побитно, но эта возможность скрыта от пользователя). Чтение из EEPROM осуществляется с такой же скоростью, как и чтение из РОН, – в течение одного машинного цикла (правда, на практике оно растягивается на 4 цикла, но программисту следить за этим специально не требуется). А вот запись в EEPROM протекает значительно медленнее и к тому же с неопределенной скоростью – цикл записи одного байта может занимать от 2 до 4 и более миллисекунд. Процесс записи регулируется встроенным RC‑генератором, частота которого нестабильна (при низком напряжении питания можно ожидать, что время записи будет больше). За такое время при обычных тактовых частотах МК успевает выполнить несколько тысяч команд, поэтому программирование процедуры записи требует аккуратности – например, нужно следить, чтобы в момент записи не «вклинилось» прерывание (подробнее об этом далее).

Главная же сложность при использовании EEPROM – то, что при недостаточно быстром снижении напряжения питания в момент выключения содержимое ее может быть испорчено. Обусловлено это тем, что при снижении напряжения питания ниже некоторого порога (ниже порога стабильной работы, но недостаточного для полного выключения) и вследствие его дребезга МК начинает выполнять произвольные команды, в том числе может выполнить и процедуру записи в EEPROM, если она имеется в программе. Если учесть, что типовая команда МК AVR выполняется за десятые доли микросекунды, то ясно, что никакой реальный источник питания не может обеспечить снижение напряжения до нуля за нужное время. По опыту автора при питании от обычного стабилизатора типа LM7805 с рекомендованными значениями емкости конденсаторов на входе и на выходе содержимое EEPROM будет испорчено примерно в половине случаев.

Этой проблемы не должно существовать, если запись констант в EEPROM производится при программировании МК, а процедура записи в программе отсутствует. Во всех же остальных случаях (а их, очевидно, абсолютное большинство – EEPROM чаще всего используется для хранения пользовательских установок и текущей конфигурации при выключении питания) приходится принимать специальные меры. Встроенный детектор падения напряжения (Brown‑Out Detection , BOD), имеющийся практически во всех моделях Tiny и Mega , обычно с этим не справляется. Наиболее кардинальной из таких мер является установка внешнего монитора питания, удерживающего МК при снижении напряжения питания ниже пороговой величины в состоянии сброса (подробности см. ).

На заре возникновения памяти, сохраняющей данные при отключении пита­ния (EPROM, Erasable Programmable ROM - «стираемая/программируемая ROM», или по-русски ППЗУ - «программируемое ПЗУ»), основным типом ее была память, стираемая ультрафиолетом: UV-EPROM (Ultra-Violet EPROM, УФ-ППЗУ). Причем часто приставку UV опускали, так как всем бы­ло понятно, что EPROM - это стираемая ультрафиолетом, а ROM (или ПЗУ) просто, без добавлений- это однократно программируемые кристаллы OTP-ROM. Микроконтроллеры с УФ-памятью программ были распростране­ны еще в середине 1990-х. В рабочих образцах устройств с УФ-памятью кварцевое окошечко, через которое осуществлялось стирание, заклеивали кусочком черной липкой ленты, так как информация в UV-EPROM медленно разрушается и на солнечном свету.

Рис. 18.7. Устройство элементарной ячейки EPROM

На рис. 18.7 показано устройство элементарной ячейки EPROM, которая ле­жит в основе всех современных типов flash-памяти. Если исключить из нее то, что обозначено надписью «плавающий затвор», мы получим самый обыч­ный полевой транзистор - точно такой же входит в ячейку DRAM. Если по­дать на управляющий затвор такого транзистора положительное напряжение, то он откроется, и через него потечет ток (это считается состоянием логиче­ской единицы). На рис. 18.7 вверху-и изображен такой случай, когда пла­вающий затвор не оказывает никакого влияния на работу ячейки - напри­мер, такое состояние характерно для чистой flash-памяти, в которую еще ни разу ничего не записывали.

Если же мы каким-то образом (каким- поговорим отдельно) ухитримся разместить на плавающем затворе некоторое количество зарядов - свобод­ных электронов, которые показаны на рис. 18.7 внизу в виде темных кружоч­ков со значком минуса, то они будуу экранировать действие управляющего электрода, и такой транзистор вообще перестанет проводить ток. Это состоя­ние логического нуля. Поскольку плавающий затвор потому так и называет­ся, что он «плавает» в толще изолятора (двуокиси кремния), то сообщенные ему однажды заряды в покое никуда деваться не могут. И записанная таким образом информация может храниться десятилетиями (до последнего време­ни производители обычно давали гарантию на 10 лет, но на практике в обыч­ных условиях время хранения значительно больше).

Заметки на полях

Строго говоря, в NAND-чипах (о которых далее) логика обязана быть обрат­ной. Если в обычной EPROM запрограммированную ячейку вы не можете от­крыть подачей считывающего напряжения, то там наоборот - ее нельзя запе­реть снятием напряжения. Поэтому, в частности, чистая NAND-память выдает все нули, а не единицы, как EPROM. Но это нюансы, которые не меняют суть дела.

Octajiocb всего ничего - придумать, как размещать заряды на изолирован­ном от всех внешних влияний плавающем затворе. И не только разме­щать - ведь иногда память и стирать приходится, потому должен сущест­вовать способ их извлекать оттуда. В UV-EPROM слой окисла между плавающим затвором и подложкой был достаточно толстым (если величину 50 нанометров можно охарактеризовать словом «толстый», конечно), и ра­ботало все это довольно грубо. При записи на управляющий затвор подава­ли достаточно высокое положительное напряжение - иногда до 36-40 В, а на сток транзистора - небольшое положительное. При этом электроны, которые двигались от истока к стоку, настолько ускорялись полем управ­ляющего электрода, что просто перепрыгивали барьер в виде изолятора между подложкой и плавающим затвором. Такой процесс называется еще «инжекцией горячих электронов».

Ток заряда при этом достигал миллиампера - можете себе представить, ка­ково было потребление всей схемы, если в ней одновременно программиро­вать хотя бы несколько тысяч ячеек. И хотя такой ток требовался на доста­точно короткое время (впрочем, с точки зрения быстродействия схемы не такое уж и короткое - миллисекунды), но это было крупнейшим недостат­ком всех старых образцов EPROM-памяти. Еще хуже другое - и изолятор, и сам плавающий затвор такого издевательства долго не выдерживали и посте­пенно деградировали, отчего количество циклов стирания-записи было огра­ничено нескольким сотнями, максимум- тысячами. Во многих образцах flash-памяти более позднего времени даже была предусмотрена специальная схема для хранения карты «битых» ячеек - в точности так, как это делается для жестких дисков. В современных моделях с миллионами ячеек такая карта тоже имеется - однако число циклов стирания/записи теперь возросло до сотен тысяч. Как этого удалось добиться?

Рис. 18.8. Процесс стирания в элементарной ячейке EPROM

Сначала посмотрим, как осуществлялось в этой схеме стирание. В UV-EPROM при облучении ультрафиолетом фотоны высокой энергии сообщали электронам на плавающем затэоре достаточный импульс для того, чтобы они «прыгали» обратно на подложку самостоятельно, без каких-либо электриче­ских воздействий. Первые образцы электрически стираемой памяти (EEPROM, Electrically Erasable Programmable ROM - «электрически стирае­мое перепрограммируемое ПЗУ», ЭСППЗУ) были созданы в компании Intel в. конце 1970-х при непосредственном участии будущего основателя Atmel Джорджа Перлегоса. Он использовал «квантовый эффект туннелирования Фаулера-Нордхейма». За этим непонятным названием кроется довольно про­стое по сути (но очень сложное с физической точки зрения) явление: при достаточно тонкой пленке изолятора (ее толщину пришлось уменьшить с 50 до 10 нм) электроны, если их слегка подтолкнуть подачей не слишком высо­кого напряжения в нужном направлении, могут просачиваться через барьер, не перепрыгивая его. Сам процесс показан на рис. 18.8 вверху (обратите внимание на знак напряжения на управляющем электроде).

Старые образцы EEPROM именно так и работали: запись производилась «го­рячей инжекцией», а стирание - «квантовым туннелированием». Оттого они были довольно сложны в эксплуатации - разработчики со стажем помнят, что первые микросхемы EEPROM требовали два, а то и три питающих на­пряжения, причем подавать их при записи и стирании требовалось в опреде­ленной последовательности.

Превращение EEPROM во flash происходило по трем разным направлениям. В первую очередь - в направлении совершенствования конструкции самой ячейки. Для начала избавились от самой противной стадии - «горячей ин-жекции». Вместо нее при записи стали также использовать «квантовое тун-нелирование», как и при стирании. рис. 18.8 внизу показан этот про­цесс- если при открытом транзисторе подать на управляющий затвор достаточно высокое (но значительно меньшее, чем при «горячей инжекции») напряжение, то часть электронов, двигающихся через открытый транзистор от истока к стоку, «просочится» через изолятор и окажется на плавающем затворе. Потребление тока при записи снизилось на несколько порядков. Изолятор, правда, пришлось сделать еще тоньше, что обусловило довольно большие трудности с внедрением этой технологии в производство.

Второе направление - ячейку сделали несколько сложнее, пристроив к ней второй транзистор (обычный, не двухзатворный), который разделил вывод стока и считывающую шину всей микросхемы. Благодаря всему этому уда­лось добиться значительного повышения долговечности - до сотен тысяч циклов записи/стирания (миллионы циклов, характерные для флэш-карточек, получаются, если добавить схемы коррекции ошибок). Кроме того, схемы формирования высокого напряжения и соответствующие генераторы им­пульсов записи/стирания перенесли внутрь микросхемы, отчего пользоваться этими типами памяти стало несравненно удобнее - они стали питаться от одного напряжения (5, 3,3 или даже 1,8 В).

И, наконец, третье, едва ли не самое главное усовершенствование заключа­лось в изменении организации доступа к ячейкам на кристалле, вследствие чего этот тип памяти и заслужил наименование - flash (то есть «молния»), ныне известное каждому владельцу цифровой камеры или карманного МРЗ-плеера. Так в середине 1980-х назвали разновидность EEPROM, в ко­торой стирание и запись производились сразу целыми блоками - страни­цами. Процедура чтения из произвольной ячейки, впрочем, по понятным причинам замедлилась- для его ускорения приходится на кристаллах flash-памяти располагать промежуточную (буферную) SRAM. Для флэш-накопителей это не имеет особого значения, так как там все равно данные читаются и пишутся сразу большими массивами, но для использования в микроконтроллерах это может оказаться неудобным. Тем более, в МК не­удобно использовать самый быстродействующий вариант flash-техноло­гии - т. н. память типа NAND (от наименования логической функции «И-НЕ»), где читать и записывать память в принципе возможно только блока­ми по 512 байт (это обычная величина сектора на жестком диске, также чи­таемого и записываемого целиком за один раз - отсюда можно понять ос­новное назначение NAND).

В МК обычно используют традиционную (типа NOR) flash-память про­грамм, в которой страницы относительно невелики по размерам - порядка 64-256 байт. Впрочем, если пользователь сам не берется за создание про­грамматора для такой микросхемы, он может о страничном характере па­мяти и не догадываться. А для пользовательских данных применяют EEPROM либо с возможностью чтения произвольного байта, либо секцио­нированную, но на очень маленькие блоки - например, по 4 байта. При этом для пользователя все равно доступ остается побайтным. Характерной чертой такой памяти является довольно медленная (порядка миллисекунд) процедура записи, в то время как чтение протекает ничуть не медленнее любых других операций в МК.

Развитие технологий flash-памяти имело огромное значения для удешевления и доступности микроконтроллеров. В дальнейшем мы будем иметь дело с энергонезависимой памятью не только в виде встроенных в микроконтроллер памяти программ и данных, но и с отдельными микросхемами, позволяющи­ми записывать довольно большие объемы информации.

Энергонезависимая
  • EEPROM
  • Первые разработки
  • Перспективные
    • CBRAM
    • SONOS
    • Беговая память (Racetrack)
  • Из истории
    • Память на магнитной проволоке
    • Пузырьковая память
    • Память на твисторах
  • Изменение заряда («запись» и «стирание») производится приложением между затвором и истоком большого потенциала чтобы напряженность электрического поля в тонком диэлектрике между каналом транзистора и карманом оказалась достаточна для возникновения туннельного эффекта . Для усиления эффекта тунеллирования электронов в карман при записи применяется небольшое ускорение электронов путем пропускания тока через канал полевого транзистора (эффект Hot carrier injection (англ.) русск. ).

    Чтение выполняется полевым транзистором , для которого карман выполняет роль затвора. Потенциал плавающего затвора изменяет пороговые характеристики транзистора что и регистрируется цепями чтения.

    Основная особенность классической ячейки EEPROM - наличие второго транзистора который помогает управлять режимами записи и стирания. Некоторые реализации выполнялись в виде одного трехзатворного полевого транзистора (один затвор плавающий и два обычных).

    Эта конструкция снабжается элементами которые позволяют ей работать в большом массиве таких же ячеек. Соединение выполняется в виде двумерной матрицы, в которой на пересечении столбцов и строк находится одна ячейка. Поскольку ячейка EEPROM имеет третий затвор то помимо подложки к каждой ячейке подходят 3 проводника (один проводник столбцов и 2 проводника строк).

    Список производителей EEPROM

    • Mikron Sitronics
    • Aplus Flash Technology
    • Maxwell Technologies
    • Renesas Technology
    • ROHM Electronics
    • SmarfTech
    • Seiko Instruments
    • Winbond
    • Catalyst Semiconductor Inc

    Примечания


    Wikimedia Foundation . 2010 .

    Смотреть что такое "EEPROM" в других словарях:

      EEPROM - (also written E2PROM and pronounced e e prom or simply e squared), which stands for Electrically Erasable Programmable Read Only Memory, is a type of non volatile memory used in computers and other electronic devices to store small amounts of… … Wikipedia

      EEPROM - das, spezielle Ausführung eines EPROM. Wie bei diesem Speicherchip lässt sich auch der Inhalt eines EEPROM im… … Universal-Lexikon

      EEPROM - son las siglas de electrically erasable programmable read only memory (ROM programable y borrable eléctricamente). Es un tipo de memoria ROM que puede ser programado, borrado y reprogramado eléctricamente, a diferencia de la EPROM que ha de… … Enciclopedia Universal

      EEPROM - ● EEPROM nom féminin invariable (abréviation de electrically erasable programmable read only memory) Type de mémoires électroniques mortes reprogrammables, effaçables électriquement … Encyclopédie Universelle

      EEPROM - der; , s Kurzw. aus engl. electrically erasable programmable read only memory »elektrisch löschbarer (u. wieder) programmierbarer Nurlesespeicher«> Festwertspeicher, der mit einem elektrischen Signal gelöscht werden kann (EDV) … Das große Fremdwörterbuch

      EEPROM - (Electrically Erasable Programmable Read Only Memo) type of Read Only Memory that can be erased using electronic methods … English contemporary dictionary

      EEPROM - (computing) abbrev Electronically erasable programmable read only memory * * * [ˌē ē präm; ēˌpräm; dəbəl ē präm] n. Computing a read only memory whose contents can be erased and reprogrammed using a pulsed voltage Origin: acronym from… … Useful english dictionary

      EEPROM - Ein Flash EEPROM (links) und ein EPROM (rechts). EEPROM (Electrically Erasable Programmable Read Only Memory, wörtlich: elektrisch löschbarer, programmierbarer Nur Lese Speicher, auch E2PROM genannt) ist ein nichtflüchtiger, elektronischer… … Deutsch Wikipedia

      EEPROM - Electrically erasable programmable read only memory Types de mémoire RAM et ROM Volatiles DRAM eDRAM SRAM 1T SRAM à venir: Z RAM Non Volatiles ROM PROM EPROM EEPROM à venir … Wikipédia en Français

      EEPROM - Este artículo o sección necesita referencias que aparezcan en una publicación acreditada, como revistas especializadas, monografías, prensa diaria o páginas de Internet fidedignas. Puedes añadirlas así o avisar … Wikipedia Español

    Микросхемы разного назначения применяются в составе электроники современной техники. Огромное многообразие такого рода компонентов дополняют микросхемы памяти. Этот вид радиодеталей (среди электронщиков и в народе) зачастую называют просто – чипы. Основное назначение чипов памяти – хранение определённой информации с возможностью внесения (записи), изменения (перезаписи) или полного удаления (стирания) программными средствами. Всеобщий интерес к чипам памяти понятен. Мастерам, знающим как программировать микросхемы памяти, открываются широкие просторы в области ремонта и настройки современных электронных устройств.

    Микросхема памяти — это электронный компонент, внутренняя структура которого способна сохранять (запоминать) внесённые программы, какие-либо данные или одновременно то и другое.

    По сути, загруженные в чип сведения представляют собой серию команд, состоящих из набора вычислительных единиц микропроцессора.

    Следует отметить: чипы памяти всегда являются неотъемлемым дополнением микропроцессоров – управляющих микросхем. В свою очередь микропроцессор является основой электроники любой современной техники.

    Набор электронных компонентов на плате современного электронного устройства. Где-то среди этой массы радиодеталей приютился компонент, способный запоминать информацию

    Таким образом, микропроцессор управляет , а чип памяти хранит сведения, необходимые микропроцессору.

    Программы или данные хранятся в чипе памяти как ряд чисел — нулей и единиц (биты). Один бит может быть представлен логическими нулем (0) либо единицей (1).

    В единичном виде обработка битов видится сложной. Поэтому биты объединяются в группы. Шестнадцать бит составляют группу «слов», восемь бит составляют байт — «часть слова», четыре бита — «кусочек слова».

    Программным термином для чипов, что используется чаще других, является байт. Это набор из восьми бит, который может принимать от 2 до 8 числовых вариаций, что в общей сложности даёт 256 различных значений.

    Для представления байта используется шестнадцатеричная система счисления, где предусматривается использование 16 значений из двух групп:

    1. Цифровых (от 0 до 9).
    2. Символьных (от А до F).

    Поэтому в комбинациях двух знаков шестнадцатеричной системы также укладываются 256 значений (от 00h до FFh). Конечный символ «h» указывает на принадлежность к шестнадцатеричным числам.

    Организация микросхем (чипов) памяти

    Для 8-битных чипов памяти (наиболее распространенный тип) биты объединяются в байты (8 бит) и сохраняются под определённым «адресом».

    По назначенному адресу открывается доступ к байтам. Вывод восьми битов адреса доступа осуществляется через восемь портов данных.


    Организация структуры запоминающего устройства. На первый взгляд сложный и непонятный алгоритм. Но при желании разобраться, понимание приходит быстро

    В прошлый раз, когда я писал свой "развёрнутый ответ на вопрос" о том, как забэкапить прошивку с "Меги" меня упрекнули, что я не упомянул про бэкап EEPROM. В тот раз я не сделал этого сознательно, т.к. справедливо рассудил, что не стоит всё усложнять на этапе первоначального "подхода к снаряду". Дело в том, что не для всех очевиден тот факт, что EEPROM не прошивается при компиляции и заливки прошивки из Arduino IDE. То есть, это означает, что абсолютно ничего в EEPROM не заливается, когда прошивка заливается из IDE. А манипуляции с EEPROM (если его использование вообще включено в прошивке) производятся абсолютно на другом уровне. И следовательно, для бэкапа голой прошивки без тонких настроек, которые ВОЗМОЖНО (только возможно) могут храниться в EEPROM, вполне было достаточно сохранить только голую прошивку. Но раз уж возник вопрос, то почему бы его не "разжевать". Давайте пройдёмся по порядку.Что такое EEPROM и зачем вести о нём речь?
    EEPROM - (Electrically Erasable Programmable Read-Only Memory) область энергонезависимой памяти микроконтроллера, в которую можно записать и прочитать информацию. Зачастую его используют для того, чтобы хранить настройки программы, которые могут меняться в процессе эксплуатации, и которые необходимо хранить при отключенном питании.

    Как 3D принтер использует EEPROM?
    Рассмотрим на примере Marlin"а. В Marlin Firmware "из коробки" EEPROM не используется. Параметры конфигуратора (Configuration.h), которые включают возможность его использования, по умолчанию, закомментированы.

    #define EEPROM_SETTINGS
    #define EEPROM_CHITCHAT

    Если включено использование EEPROM, то принтер может хранить и использовать следующие настройки (подсмотрено у буржуев):

    • Количество шагов на миллиметр
    • Максимальная/минимальная скорость подачи [мм/с]
    • Максимальное ускорение [мм/с^2]
    • Ускорение
    • Ускорение при ретракте
    • Настройки PID
    • Отступ домашней позиции
    • Минимальная скорость подачи во время перемещения [мм/с]
    • Минимальное время участка [мс]
    • Максимальный скачок скорости по осям X-Y [мм/с]
    • Максимальный скачок скорости по оси Z [мм/с]
    Редактировать эти настройки можно, используя экран принтера и органы управления. При включенном использовании EEPROM, в меню должны отображаться пункты:
    • Store memory
    • Load memory
    • Restore Failsafe
    Так же, можно использовать GCode для работы напрямую (через Pronterface).
    • M500 Сохраняет текущие настройки в EEPROM до следующего запуска или выполнения команды M501.
    • M501 Читает настройки из EEPROM.
    • M502 Сбрасывает настройки на значения по-умолчанию, прописанные в Configurations.h. Если выполнить после неё M500, в EEPROM будут занесены значения по-умолчанию.
    • M503 Выводит текущие настройки – ""Те, что записаны в EEPROM.""
    О EEPROM в Repitier firmware можно почитать .

    Как считать и записать данные в EEPROM?
    Аналогично, описанному в , методу бэкапа прошивки, используя ключ -U . Только в данном случае после него будет указатель на то, что считывать нужно EEPROM.

    avrdude.exe -p atmega2560 -c wiring -PCOM5 -b115200 -Ueeprom:r:"printer_eeprom".eep:i

    Этой командой производится чтение данных EEPROM"а в файл "printer_eeprom.eep". В случае успеха, на экране вы увидите примерно следующее.

    Запись тоже не представляет из себя ничего сложного и выполняется аналогичной командой, которая отличается только тем, что в ключе -U стоит не "r", а "w".

    avrdude.exe -p atmega2560 -c wiring -PCOM5 -b115200 -Ueeprom:w:"printer_eeprom".eep:i

    В случае успеха, на экране вы увидите примерно следующее сообщение.

    Как и зачем стирать EEPROM?
    Для начала,- "зачем это делать?". Стирать EEPROM нужно в том случае, если предыдущая прошивка тоже его использовала, и в памяти мог остаться мусор. Где-то я уже натыкался на людей с проблемами, что после перехода с одной прошивки на другую (с Marlin на Repitier ЕМНИП), у них принтер начинал вести себя, скажем так, "творчески". Это связанно с тем, что разные прошивки хранят свои данные под разными адресами. И при попытке читать данные из неверного адреса начинается свистопляска.
    Затереть EEPROM можно только программно из прошивки, но для этого придётся - на время залить в контроллер специальный скетч. Подробно об этом можно прочитать в официальной документации по Arduino .
    Если же стирается EEPROM не в Arduino плате, а в каком-то абстрактном контроллере, то код скетча нужно будет изменить с учётом размера EEPROM в конкретном контроллере на плате. Для этого нужно будет поменять условие окончания в цикле "For". Например, для ATmega328, у которой 1kb памяти EEPROM, цикл будет выглядеть так:
    Вывод.
    Я довольно долго распинался, а всё для чего? Для того, чтобы подвести к заключению о том, что при бэкапе прошивки, EEPROM тоже можно сохранить, но только в том случае если вам нужны сохранённые в нём настройки. Если же вы готовы ими пожертвовать, то забейте на это. Так же, если вы меняете одну прошивку на другую, или переходите с версии не версию, не поленитесь очистить EEPROM перед заливкой новой прошивки. Ну и заодно мы узнали много нового.