Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
34 Часть I. Общие принципы устройства и функционирования Atmel AVR EEPROM отличается от Flash возможностью выборочного программирования по- байтно (вообще-то даже побитно, но здесь этот способ недоступен пользовате- лю, — подробно об этом рассказано в главе 12 ). Для единообразия технологическо- го процесса EEPROM в AVR-контроллерах просто эмулируется за счет части flash- памяти, отсюда некоторые ее особенности в сравнении с «обычной» EEPROM (на- пример, то, что запись в EEPROM не может выполняться одновременно с записью во flash-память). Но на практике, как при загрузке по последовательному каналу (т. е. через SPI-интерфейс программирования), так и при записи или чтении EEPROM из программы, эта особенность не имеет значения, и доступ осуществля- ется побайтно. Чтение из EEPROM формально осуществляется в течение одного машинного цикла (правда, на практике оно растягивается на 4 цикла, во время которых CPU просто останавливается, но программисту следить за этим специально не требуется). А вот запись в EEPROM протекает значительно медленнее и к тому же с разной ско- ростью у разных моделей — цикл стирания/записи может занимать от ~3,4 до ~8,5 мс (в среднем меньшая величина у Tiny и более новых Mega, и большая — у старых Mega, но если эта величина критична, то необходимо ее уточнять для каждой конкретной модели). К тому же процесс записи регулируется встроенным RC-генератором, частота которого нестабильна (при более низком напряжении пи- тания можно ожидать, что время записи будет больше). За такое время при обыч- ных тактовых частотах МК успевает выполнить несколько тысяч команд, так что программирование процедуры записи требует аккуратности — например, нужно следить, чтобы в момент записи не «вклинилось» прерывание (подробнее об этом рассказано в главах 6 и 8 ). Главная же сложность при работе с EEPROM — возможность повреждения ее со- держимого при недостаточно быстром снижении напряжения питания в момент выключения. Обусловлено это тем, что при уменьшении напряжения питания до некоторого порога (ниже порога стабильной работы, но недостаточного для полно- го выключения) из-за колебаний напряжения МК начинает выполнять произволь- ные команды, в том числе может осуществить процедуру записи в EEPROM. Если учесть, что типовая команда МК AVR выполняется за десятые доли микросекунды, то ясно, что никакой реальный источник питания не может обеспечить снижение напряжения до нуля за нужное время. В экспериментах автора с семейством Classic при питании от обычного стабилизатора типа LM7805 с рекомендованными значе- ниями емкости конденсаторов на входе и на выходе содержимое EEPROM неиз- бежно портилось примерно в половине случаев. В современных семействах Mega и Tiny вероятность порчи куда ниже, в основном из-за наличия встроенного монито- ра питания (Brown-out Detector, BOD — см. о нем далее в этой главе), но тоже не равна нулю, отчего в критичных случаях приходится принимать дополнительные меры (подробнее об этом рассказано далее — в разд. «Сброс» этой главы, а также в главе 10 ). Отметим, что, хотя в документации это не отражено, вероятность порчи содержи- мого, видимо, резко снижается, если в программе отсутствуют процедуры записи в EEPROM, а константы записывают в нее только при программировании МК.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==