Рис. 11.10. Процесс стирания в элементарной ячейке EEPROM
Старые образцы EEPROM именно так и работали: запись производилась «горячей инжекцией», а стирание — «квантовым туннелированием». Оттого они были довольно сложны в эксплуатации — разработчики со стажем помнят, что первые микросхемы EEPROM требовали два, а то и три питающих напряжения, причем подавать их при записи и стирании требовалось в определенной последовательности. Мало того, цена таких чипов была в свете нынешних тенденций почти запредельной. Автор этих строк сам покупал в середине 1990-х полумегабитную (т. е. 64-килобайтную) энергонезависимую память по цене 20 долл. за микросхему. Не забудьте еще про «битые» ячейки, возникновение которых в процессе эксплуатации приходилось все время отслеживать. Неудивительно, что на этом фоне разработчики предпочитали более дешевую, удобную, скоростную и надежную статическую память (SRAM), пристраивая к ней резервное питание от литиевых батареек, которые к тому времени уже достаточно подешевели.
Превращение EEPROM во Flash происходило по трем разным направлениям. В первую очередь — в направлении совершенствования конструкции самой ячейки. Для начала избавились от самой «противной» стадии — «горячей инжекции». Вместо нее запись стали осуществлять «квантовым туннелированием», как и при стирании. На рис. 11.10 внизу показан этот процесс: если при открытом транзисторе подать на управляющий затвор достаточно высокое (но значительно меньшее, чем при «горячей инжекции») напряжение, то часть электронов, двигающихся через открытый транзистор от истока к стоку, «просочится» через изолятор и окажется на плавающем затворе. Потребление тока при записи снизилось на несколько порядков. Изолятор, правда, пришлось сделать еще тоньше, что обусловило довольно большие трудности с внедрением этой технологии в производство.
Второе направление — ячейку сделали несколько сложнее, пристроив к ней второй транзистор (обычный, не двухзатворный), который разделил вывод стока и считывающую шину всей микросхемы. Благодаря этому (вместе с отказом от «горячей инжекции») удалось добиться значительного повышения долговечности — до сотен тысяч, а в настоящее время и до миллионов циклов записи/стирания (правда, последнее — при наличии схем коррекции ошибок, которые замедляют работу памяти). Кроме того, схемы формирования высокого напряжения и соответствующие генераторы импульсов записи/стирания перенесли внутрь микросхемы, отчего пользоваться этими типами памяти стало несравненно удобнее, т. к. они стали питаться от одного напряжения (5 или 3,3 В).
И, наконец, третье, чуть ли не самое главное усовершенствование заключалось в изменении организации доступа к ячейкам на кристалле, вследствие чего этот тип памяти и заслужил наименование — flash («молния»), ныне известное каждому владельцу цифровой камеры или карманного МРЗ-плеера. Так в середине 1980-х назвали разновидность EEPROM, в которой стирание и запись производились сразу целыми блоками — страницами. Процедура чтения из произвольной ячейки, впрочем, по понятным причинам замедлилась — для его ускорения приходится на кристаллах flash-памяти располагать промежуточную (буферную) SRAM. Для flash-накопителей это не имеет особого значения, т. к. там все равно данные читаются и пишутся сразу большими массивами, но для микроконтроллеров может оказаться неудобным.
Тем более там неудобен самый быстродействующий вариант технологии Flash— т. н. память типа NAND (от наименования логической функции «И-НЕ»), где читать и записывать память в принципе возможно только блоками по 512 байт (это обычная величина сектора на жестком диске, также читаемого и записываемого целиком за один раз— отсюда можно понять основное назначение NAND).
В МК обычно применяют традиционную (типа NOR) flash-пэмять программ, в которой страницы относительно невелики по размерам (порядка 64—256 байт). Впрочем, если пользователь сам не взялся за изобретение программатора для такой микросхемы, он может о страничном характере памяти и не догадываться. А для пользовательских данных применяют EEPROM либо с возможностью чтения произвольного байта, либо секционированную на очень маленькие блоки (например, по 4 байта), что также для пользователя значения не имеет.
Развитие технологий flash-памяти имело огромное значение для удешевления и повышения доступности микроконтроллеров. В дальнейшем мы будем иметь дело с энергонезависимой памятью не только в виде встроенных в микроконтроллер памяти программ и данных, но и с отдельными микросхемами, позволяющими записывать довольно большие объемы информации.
Глава 12Знакомство с микроконтроллером
Примерно в середине 70-х один из сотрудников предложил мне идею того, что, по сути дела, являлось персональным компьютером. Смысл идеи сводился к оснащению процессора 8080 монитором и клавиатурой и последующей продаже его в качестве прибора для дома. Я спросил: «И что же с ним делать?» Он ответил только, что домохозяйка, например, смогла бы хранить там кулинарные рецепты. Я не увидел в этом никакой пользы, и мы к данному вопросу больше не возвращались.
Из воспоминаний Гордона Мура, основателя Fairchild и Intel
Общее число существующих семейств микроконтроллеров оценивается приблизительно в 100 с лишним, причем ежегодно появляются все новые и новые. Каждое из этих семейств может включать десятки разных моделей. В 2002–2003 гг. в мире выпускалось ежегодно 3,2 млрд штук микроконтроллеров. Сравните — объем выпуска микропроцессоров для ПК в 2005–2006 гг. можно оценить в 200 млн единиц в год, т. е. всего около 6 % рынка. В то время как в финансовом исчислении, по данным Ассоциации полупроводниковой промышленности США, мировой объем рынка процессоров для ПК в 2006 году равнялся 33 млрд долларов, а микроконтроллеров — всего 12 млрд. Типичная цена рядового МК — порядка 2–5 долл., отдельные их представители могут стоить как существенно меньше, так и больше, но в любом случае их цена не достигает сотен долларов, как для отдельных моделей микропроцессоров от Intel и AMD.
Если говорить о ведущих компаниях, выпускающих микроконтроллеры, то первое место среди производителей 8-разрядных чипов традиционно принадлежит Motorola. Компания Microchip с очень популярным среди радиолюбителей семейством PIC занимает третье место, a Atmel, о продукции которой мы будем говорить далее — лишь шестое. Тем не менее эта формальная статистика еще ни о чем не говорит. Так, среди МК со встроенной flash-памятью Atrfiel принадлежит треть мирового рынка (и в 1995 году она была первой, кто вообще выпустил МК такой категории на рынок), при этом надо учитывать, что среди лидеров рассматриваемое семейство AVR-контроллеров самое молодое — первый Atmel AVR был выпущен в 1997 году. Так как рынок МК весьма консервативен (в рекламу на ТВ не вставишь что-нибудь вроде «в данном пылесосе используется последняя модель RISC-микроконтроллера с 32-разрядной шиной данных», поэтому мода тут играет далеко не ведущую роль), и шестое место в мировом масштабе можно рассматривать, как огромный успех.
Кроме 8-разрядных МК AVR, Atmel выпускает еще несколько их разновидностей, в том числе относящихся к таким популярным семействам, как ARM-процессоры и заметно модифицированные наследники старинного 8051, для которого в мире накоплен огромный объем программного обеспечения. Мы здесь ограничимся лишь 8-разрядными AVR, как одними из самых удобных в радиолюбительской и полупрофессиональной практике (например, для изготовления научного, производственного и другого спецоборудования в единичных экземплярах) — на этой почве они конкурируют лишь с упомянутыми PIC, однако для начального освоения опытные конструкторы рекомендуют именно AVR.
По вычислительной мощности ядро AVR-контроллеров, выполненное по RISC-архитектуре (Reduced Instruction System Command — «система с сокращенным набором команд»), заметно превышает 8-разрядные процессоры первых персональных компьютеров 80-х годов (i8086 в первых моделях IBM PC и 6502 в персоналках Apple), и сравнимо с производительностью 16-разрядного процессора i286, поскольку большинство инструкций выполняются за один такт, а рабочие частоты более высокие (обычно до 16 МГц, за небольшими исключениями, а у некоторых моделей — до 20 МГц). В AVR имеется 32 регистра общего назначения (часть из которых может также выполнять специализированные функции). Это позволяет в простых программах вообще не обращаться к памяти, что особенно удобно для начинающих.
Линейка AVR делится на три семейства: Classic, Mega и Tuny. МК семейства Classic (они именовались, как AT90S
Рис. 12.1.Различные корпуса микроконтроллеров Atmel AVR и панельки для них
Полная совместимость обеспечивается специальным установочным битом (из набора т. н. Fuse-битов), при программировании которого Mega-процессор начинает функционировать как Classic (подробнее об этом — в главе 13). Для вновь разрабатываемых устройств обычно никакого смысла в режиме совместимости нет, однако такой прием в ряде случаев может оказаться полезным для начинающих, т. к. МК Classic устроены проще и не заставляют пользователя отвлекаться на ненужные подробности, не имеющие отношения к делу. Поэтому часть примеров в этой книге, особенно начального уровня, будут ориентированы на семейство Classic.