О конфигурационных битах в МК

June 27, 2010 by admin Комментировать »

Эта напасть свалилась на нас с появлением семейств Tiny и Mega, в «класси­ческих» AVR ничего такого не было (точнее, было, но можно было специ­ально не заботиться об установке этих битов). В англоязычной инструкции конфигурационные биты называют fuse-битами. Их появление привело к многочисленным проклятиям на голову фирмы Atmel со стороны армии лю­бителей, который стали один за другим «запарывать» кристаллы при про­граммировании. Положение усугублялось тем, что в описании этих сущно­стей используется извращенная логика— как мы знаем, любая чистая EEPROM (по принципу ее устройства) содержит единицы, и слово «запро­граммированный» по отношению к такой ячейке означает, что в нее записали логический ноль. Термины запрограммированный/незапрограммированный как раз и применяются в фирменных описаниях AVR, и оттуда перекочевали в ряд самодеятельных программаторов: готовьтесь к тому, что в некоторых программаторах отмеченный галочкой в меню программы бит означает его равенство логической единице, а в других — запрограммированное состоя­ние, то есть логический ноль. Поэтому разработчики программаторов AS из фирмы Argussoft даже специально написали в окне программирования кон­фигурационных ячеек памятку на этот счет (см. рис. 19.1).

clip_image002

Рис. 19.1. Окно типового состояния конфигурационных ячеек в нормальном режиме работы ATmega8535

На этом рисунке приведено безопасное рабочее состояние конфигурацион­ных ячеек для ATmega8535, причем выпуклая кнопка означает единичное состояние ячейки, а нажатая — нулевое (и не путайтесь с этим самым «за­программированным» состоянием!). Для разных моделей набор fuse-бит раз­личный, но означают они одно и то же, потому мы разберем типовое их со­стояние на этом примере. Перед первым программированием нового кристалла просто один раз установите эти ячейки в нужное состояние, даль­ше их уже менять не потребуется.

Самые необходимые пункты тут такие. По умолчанию любая микросхема семейств Mega или Tiny запрограммирована на работу от внутренней RC-цепочки, за что разработчикам большое спасибо, иначе было бы невозмож­ным первичное программирование по SPI — только через параллельный программатор. Для работы с обычным «кварцем», присоединенным по ти­повой схеме, как мы говорили в главе 18, требуется установить все ячейки cksel0-3 в единицы (что согласно логике разработчиков означает незапро-граммированное их состояние). Заметим, что это и ведет к критической ошибке— решив при поверхностном чтении написанного по-английски руководства, что установка всех единиц означает запрограммировать все ячейки, пользователь смело устанавливает их на самом деле в нули, отчего микросхема переходит в состояние работы от внешнего генератора и раз­будить ее через SPI-интерфейс уже невозможно. Легче всего в этом случае переустановить fuse-биты с помощью параллельного программатора либо, за неимением такового, попробовать-таки подключить внешний генератор, как описано в руководстве.

Это самая крупная ошибка, которую можно допустить, но есть и другие менее распространенные. Ячейка spien разрешает/запрещает последова­тельное программирование по SPI и должна оставаться в нулевом состоя­нии, иначе МК не «разбудишь» никак, только опять же с помощью парал­лельного программатора (говорят, правда, и через SPI ее отключить невозможно). Ячейка s8535c (в других моделях она будет иметь другое на­звание или вовсе отсутствовать)— очень важна и определяет режим со­вместимости с семейством Classic (в данном случае с AT90S8535). Если ее установить в нулевое состояние, то МК семейства Mega перейдет в режим совместимости. Увы, в ATtiny2313, потомке «классического» AT90S2313, такого бита совместимости нет (но, как мы увидим, это не очень сущест­венно). При использовании режима совместимости следует учесть, что со­стояния МК нельзя перемешивать: если fuse-бит совместимости запро­граммирован (равен 0), то программа компилируется полностью, как для семейства Classic (в том числе с использованием соответствующего inc-файла, см. далее), иначе она может не заработать.

Еще одна важная ячейка — eesave, которая на рис. 19.1 установлена в единицу (режим по умолчанию), но ее целесообразно перевести в нулевое состояние — тогда при программировании памяти программ не будет стираться содержимое EEPROM. Ячейки sut определяют длительность задержки сброса, и в боль­шинстве случаев принципиального значения их состояние не имеет. \

Наконец, для нас в дальнейшем будет иметь значение состояние ячеек boden и bodlevel. Псрвая, будучи установлсна в ноль, разрешает работу т. н. схемы BOD (Brown-out Detection), которая сбрасывает контроллер при снижении питания ниже допустимого порога. Ячейка bodlevel и определяет этот самый порог — при установленной в О ячейке он равен 4 В, при установленной в 1 — 2,7 В. При питании 5 В надо выбирать первое значение, при питании 3,3 В — второе. Это предохраняет контроллер от «недопустимых операций» при выключении питания, но для обеспечения полной сохранности содержи­мого EEPROM таких мер может оказаться недостаточно, и приходится про­изводить дополнительные действия (см. также главу 18),.

Все остальные ячейки следует оставить по умолчанию (и тем более ни в коем случае не трогать Lock-биты, при установке которых доступ к программе и fuse-битам вообще отключается навсегда!). Только учтите, что в разных кон­троллерах один и те же узлы могут программироваться по-разному. Так, в рассматриваемом далее ATtiny2313 (и некоторых других, в основном из тех, что способны работать при напряжении питания до 1,8 В) схема BOD уст­роена иначе: ячеек bodlevel там целых три, причем описанная ранее bodlevel соответствует bodlevel0, а при тех же значениях порога ячейки b0dlevel2: b0dlevel1 должны быть в состоянии 10. Ячейки boden там нет, а выключенному состоянию схемы BOD соответствуют все единицы во всех трех ячейках. Зато там есть любопытный fuse-бит скоит, который при про­граммировании (установке в ноль) подключает к выводу 6 (PD2) выход так­тового генератора, и еще бит ckdivs, который в том же случае снижает так­товую частоту в восемь раз (например, при кварце 8 МГц МК заработает, как от 1 МГц, что снижает потребление). Поэтому для каждого конкретного кон­троллера следует сверяться с техническим описанием.

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

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты