Напомним, что EEPROM отличается от flash-памяти возможностью выборочного программирования побайтно (вообще-то, даже побитно, но эта возможность скрыта от пользователя). Чтение из EEPROM осуществляется с такой же скоростью, как и чтение из РОН, — в течение одного машинного цикла (правда, на практике оно растягивается на 4 цикла, но программисту следить за этим специально не требуется). А вот запись в EEPROM протекает значительно медленнее и к тому же с неопределенной скоростью — цикл записи одного байта может занимать от 2 до 4 и более миллисекунд. Процесс записи регулируется встроенным RC-генератором, частота которого нестабильна (при низком напряжении питания можно ожидать, что время записи будет больше). За такое время при обычных тактовых частотах МК успевает выполнить несколько тысяч команд, поэтому программирование процедуры записи требует аккуратности — например, нужно следить, чтобы в момент записи не «вклинилось» прерывание (подробнее об этом далее).
Главная же сложность при использовании EEPROM — то, что при недостаточно быстром снижении напряжения питания в момент выключения содержимое ее может быть испорчено. Обусловлено это тем, что при снижении напряжения питания ниже некоторого порога (ниже порога стабильной работы, но недостаточного для полного выключения) и вследствие его дребезга МК начинает выполнять произвольные команды, в том числе может выполнить и процедуру записи в EEPROM, если она имеется в программе. Если учесть, что типовая команда МК AVR выполняется за десятые доли микросекунды, то ясно, что никакой реальный источник питания не может обеспечить снижение напряжения до нуля за нужное время. По опыту автора при питании от обычного стабилизатора типа LM7805 с рекомендованными значениями емкости конденсаторов на входе и на выходе содержимое EEPROM будет испорчено примерно в половине случаев.
Этой проблемы не должно существовать, если запись констант в EEPROM производится при программировании МК, а процедура записи в программе отсутствует. Во всех же остальных случаях (а их, очевидно, абсолютное большинство — EEPROM чаще всего используется для хранения пользовательских установок и текущей конфигурации при выключении питания) приходится принимать специальные меры. Встроенный детектор падения напряжения (
Каноническим способом тактирования МК является подключение кварцевого резонатора к соответствующим выводам (рис. 18.11,
В большинстве моделей
Вместо кварцевого можно применить керамический резонатор. Автору этих строк удавалось запускать МК на нестандартных частотах, используя вместо кварца в том же подключении миниатюрную индуктивность (при ее значении в 4,7 мкГ и емкостях конденсаторов 91 пФ частота получается около 10 МГц).
Рис. 18.11.
а
— кварцевого резонатора; б — внешнего генератора; в — RC-цепочкиЕстественно, тактировать МК можно и от внешнего генератора (рис. 18.11,
Наоборот, когда точность не требуется, можно задействовать внешнюю RC-цепочку (рис. 18.11,