Печать

Биты конфигурации и биты блокировки памяти микроконтроллеров AVR

Опубликовано . Опубликовано в Программирование AVR

Рейтинг:   / 4
ПлохоОтлично 

Биты блокировки памяти (Lock Bits)

Исторически сложилось так, что даже самые первые модели микроконтроллеров имели программируемые ячейки защиты информации. Микроконтроллеры AVR так же имеют такую защиту. Это специальные ячейки, построенные по принципу Flash-памяти (то есть, энергонезависимой памяти с электрическим стиранием информации). Каждый микроконтроллер имеет как минимум две защитные ячейки LB1 и LB2. Запись и чтение этих ячеек возможна только в режиме программирования. При записи нуля в LB1 блокируется запись данных во Flash и EEPROM память. Одновременно блокируется возможность изменять конфигурационные ячейки. Если записать ноль еще и в LB2, то блокируется и возможность чтения всех данных. После этого прочитать содержимое вашей программы становится невозможным. Для повторного использования микроконтроллера нужно выполнить команду «Стирание микросхемы». При этом вся информация, записанная в микросхему теряется, зато способность чтения и модификации восcтанавливается. В микроконтроллерах семейства Mega имеются дополнительные ячейки защиты BLB02, BLB01, BLB12, BLB11. Они служат для ограничения доступа к различным областям памяти программ. Подробнее об этом смотрите в описании конкретной микросхемы.

Кроме ячеек защиты памяти микросхемы имеют, так называемые, конфигурационные ячейки. Дело в том, что все контроллеры AVR имеют множество режимов работы. Некоторые из режимов невозможно переключить программным путем, используя внутренние регистры управления. Например, в некоторых моделях микроконтроллеров синхронизация может осуществляться как от внутреннего генератора с внешним резонатором, так и от автономного внутреннего генератора, не требующего внешних цепей. В таких микросхемах два освободившихся контакта, используемые обычно для подключения внешнего кварцевого (керамического) резонатора можно использовать как дополнительные линии порта ввода/вывода. Кроме того, почти все микросхемы AVR не требуют обязательного наличия внешнего сигнала сброса. Поэтому и этот, третий контакт так же можно переключить в режим, когда он будет выполнять роль дополнительной линии порта ввода/вывода. Естественно, что выбор этих режимов должен производиться еще до подключения микросхемы к схеме налаживаемого устройства. Для переключения режимов фирма Atmel ввела в свои микроконтроллеры новый настроечный элемент: программируемые переключатели режимов. Эти переключатели выполнены в виде специальных ячеек, которые, в совокупности с ячейками защиты, являются еще одним видом перепрограммируемой энергонезависимой памяти. Все конфигурационные ячейки объединяются в байты. Различные микросхемы AVR имеют от одного до трех байтов конфигурационных ячеек. Каждый конфигурационный переключатель предназначен для того, что бы изменять какой либо один параметр или режим работы микроконтроллера. В документации каждый такой переключатель имеет свое определенное имя. Некоторые биты конфигурационных ячеек объединены в группы. Например, группа из четырех битов CKSEL 3…0 позволяет выбирать режимы синхронизации. Разные модели микроконтроллеров имеют различные наборы конфигурационных ячеек. По терминологии фирмы Atmel конфигурационные ячейки называются Fuse Bits. Поэтому для удобства и краткости эти ячейки часто называют «Фьюзами», или Fuse-ячейками.

Запись и чтение ячеек защиты и конфигурационных ячеек возможна только при помощи программатора в режиме программирования. Все незапрограммированные fuse -ячейки и ячейки защиты содержат единицу. При программировании в ячейку записывается ноль. Некоторые ячейки программируются еще на заводе (заводская предустановка). Состояние всех конфигурационных ячеек для каждой конкретной микросхемы смотрите в документации на эту микросхему.

Еще одна группа ячеек – это ячейки идентификации. Любой микроконтроллер имеет три ячейки идентификации. Эти ячейки доступны только для чтения и содержат информацию о производителе и модели микроконтроллера.

Кварцевый генератор

XTAL1 и XTAL2 – вход и выход, соответственно, инвертирующего усилителя, который может быть настроен для использования в качестве встроенного генератора. Для задания частоты может использоваться либо кварцевый либо керамический резонатор. Конфигурационный бит CKOPT выбирает один из двух режимов усилителя генератора. Если CKOPT запрограммирован, то амплитуда колебаний выходного сигнала генератора будет ограничена уровнями питания. Данный режим рекомендуется использовать при высоком уровне окружающих шумов или при использовании выхода XTAL2 в качестве источника синхронизации внешней схемы. Данный режим характеризуется широким частотным диапазоном. Если CKOPT – незапрограммирован, то амплитуда выходных колебаний генератора снижается. Использование данного режима позволяет существенно снизить потребляемую мощность, но при этом ограничен частотный диапазон и нельзя XTAL2 использовать для внешней синхронизации.

При использовании резонаторов максимальная частота равна 8 МГц, если CKOPT – незапрограммирован, и 16 МГц, если CKOPT- запрограммирован. C1 и C2 должны быть всегда равны независимо от использования кварцевого или керамического резонатора. Оптимальное значение емкостей конденсаторов зависит от используемого кварцевого или керамического резонатора, от значения паразитной емкости и от окружающего уровня электромагнитного шума. Рекомендации по выбору номиналов конденсаторов приведены в таблице 8. Для керамических резонаторов необходимо использовать конденсаторы с номиналом, рекомендуемым производителем.

RSTDISBL

RSTDISBL — fuse бит, отключающий сигнал внешнего сброса от вывода микроконтроллера и подключающий к нему схему порта ввода-вывода. Этот бит имеется только в тех МК, у которых вывод аппаратного сброса RESET совмещен с одинм из портов ввода-вывода. Ошибочная установка этого fuse бита может отключить RESET и вы не сможете больше прошивать по ISP. Не устанавливайте этот бит, если намерены продолжать работать с МК при помощи последовательных программаторов. "Оживить" МК с установленным RSTDISBL можно только параллельным программатором и не для всех МК.

Режимы синхронизации и задержки запуска

CKSEL (Select Clock source)

FUSE переключатели CKSEL – в основном определяют режимы работы тактового генератора. Тактовый генератор вырабатывает импульсы для синхронизации работы всех узлов микроконтроллера. Внутренний тактовый генератор AVR может запускаться от нескольких источников опорной частоты (внешний генератор, внешний кварцевый резонатор, внутренняя или внешняя RC-цепочка). Минимальная допустимая частота ничем не ограничена (вплоть до пошагового режима). Максимальная рабочая частота определяется конкретным типом микроконтроллера и указывается Atmel в его характеристиках, хотя практически любой AVR-микроконтроллер с заявленной рабочей частотой, например, в 10 МГц при комнатной температуре легко может быть "разогнан" до 12 МГц и выше.

Если вам не важна точность выдержки тактовой частоты, если для вашего устройства не критично, если тактовая частота будет "плавать" в небольших пределах, то выбирайте режим в котором в качестве частотозадающей цепи используется внутренняя или внешняя RC цепочка. Это дешевле кварца. Особенно, если использовать внутреннюю RC цепь. Внешняя цепочка используется если в режимах работы отсутствует нужная вам тактовая частота.

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

SUT (Select start-up time)

Основное назначение переключателей SUT – определение задержки после старта. Если ваш блок питания обеспечивает качественное питание, то задержку можно выбрать самую маленькую. Качественное питание – это питание, которое очень быстро достигает рабочих значений после включения. Чаще всего так оно и есть. Задержка включения предусмотрена для тех случаев, когда питание не качественное. В любом случае переходные процессы на выходе источника питания должны полностью заканчиваться к моменту окончания выбранной вами задержки включения микроконтроллера.

Защита от стирания EEPROM

EESAVE

FUSE переключатель EESAVE предназначен для облегчения процесса отладки программ. Он влияет на процесс стирания памяти. По умолчанию бит запрограммирован.(равен 0). И поэтому когда от программатора на микроконтроллер поступает команда "Стереть кристалл", стираются сразу и FLASH память (память программ) и EEPROM (энергонезависимая память данных). Это удобно в процессе производства неких партий одинаковых устройств на микроконтроллере. Можно сразу стереть всю память и прошить и программу и данные.

В процессе отладки же обычно программист меняет и перепрошивает программу. А данные в EEPROM редко нужно менять. В большинстве случаев эти данные вообще записывает сам микроконтроллер в процессе работы разрабатываемой вами программы, а не с помощью программатора. Однако, прежде, чем записать новую версию программы, память программ нужно стереть. Если не менять значение FUSE переключателя EESAVE, то при стирании программной памяти так же сотрется и EEPROM. В результате его тоже придется каждый раз заново записывать. Это занимает лишнее время и расходует ресурс памяти (количество циклов записи/стирания ограничено). Поэтому программист просто устанавливает значение бита EESAVE в единицу (делает незапрограммированным). Теперь при получении команды "Стереть кристалл" микроконтроллер стирает только FLASH а содержимое EEPROM оставляет без изменений.

Система контроля питания.

Большинство микроконтроллеров AVR имеет встроенную систему контроля питания. Так называемый BOD (Brown-out Detection). Назначение этой системы - повышение стабильности и надежности работы микропроцессорных систем при понижении напряжения питания. Эта система осуществляет постоянное сравнение напряжения питания с неким пороговым уровнем. Уровень порога срабатывания схемы BOD можно устанавливать при помощи fuse-переключателей BODLEVEL. Если напряжение снизится ниже порога, система контроля питания автоматически вырабатывает внутренний сигнал сброса, который останавливает выполнение программы. После того, как напряжение питания повысится, сигнал сброса еще действует некоторое время (TTOUT) и не позволяет процессору работать по программе. Любое новое снижение напряжения ниже порога запускает отсчет задержки сначала. Если напряжение питания восстановит свое нормальное значение и в течение всего периода задержки больше не упадет ниже контрольного уровня, сигнал сброса заканчивается и микроконтроллер начинает выполнение программы. Причем программа выполняется с самого начала. То есть, с того места, с которого она начинает работу при начальном сбросе. Для того что бы микроконтроллер мог учесть в своей работы сам факт сбоя по напряжению питания, многие модели AVR имеют специальный регистр, в котором хранится код источника сигнала сброса.

BODLEVEL

Значение периода задержки TTOUT фиксировано. Его можно посмотреть в документации на конкретный контроллер. Порог срабатывания системы BOD обычно не один. Для переключения нескольких вариантов порога служат FUSE переключатели BODLEVEL. Обычно это несколько битов (BODLEVEL1, BODLEVEL2 …). Режим работы определяется различным сочетанием их значений.

BODEN

Если вам не нужен контроль напряжения, вы можете ее выключить. В некоторых моделях выключение BOD – это один из режимов, определяемый фьюзами BODLEVEL. В других же моделях для включения и отключения BOD имеется специальный фьюз, который называется BODEN. Если имеется BODEN и его значение равно нулю (он запрограммирован), система работает. Если значение BODEN равно единице, то BOD отключен, и состояние фьюзов BODLEVEL не на что не влияет.

Рекомендации по выбору режимов

Если после прочтения всего вышесказанного вы так и не решили, какой же режим выбрать именно вам, тогда смело отключайте систему контроля напряжения. В процессе опробывания, отладки и доводки программы система BOD только может помешать и ввести в заблуждение. И только если сама жизнь (по результатам эксплуатации или по просьбе заказчика) потребует от вас включение такой защиты, начинайте экспериментировать.

Гистерезис

Как уже было сказано выше, в систему BOD заложено несколько вариантов уровня срабатывания. Нужный вам уровень вы выбираете при помощи фьюзов BODLEVEL. Однако, если бы система срабатывала по этому одному уровню, это могло бы привести к многократному перезапуску программы в случае, если напряжение питания "гуляет" вблизи порога срабатывания. Поэтому в системе защиты введен гистерезис. И существует такой параметр, как величина гистерезиса. В документации фирмы Atmel эта величина называется VHYST. Для получения эффекта гистерезиса в системе BOD вводится два порога срабатывания. Порог включения и порог выключения. Разница между этими порогами как раз равна VHYST. Если выбранное вами пороговое напряжение равно VBOT, то порог включения и порог выключения соответственно будут равны:

VBOT+ = VBOT + VHYST/2
VBOT- = VBOT - VHYST/2

Система BOD срабатывает в момент, когда напряжение питания упадет ниже VBOT- . В этот момент вырабатывается сигнал внутреннего сброса и выполнение программ приостанавливается. Когда напряжение питания повысится и станет выше порога VBOT+ , начинается отсчет специального таймера. По окончании этой выдержки (tTOUT) внутренний сброс заканчивается и процессор возобновляет выполнение программы. На рисунке ниже показан весь процесс работы BOD.

Секция загрузчика.

FUSE переключатели BOOTSZ, BOOTRST и SELFPRGEN

Эти два вида FUSE переключателей предназначены для выбора режимов работы так называемой секции загрузчика. Секция загрузчика появилась после того, как в микроконтроллеры была введена функция самопрограммирования. Самопрограммирование - это возможность микроконтроллера самому "перешивать" свою собственную программу. Это очень удобно в тех системах, в которые сами, без участия сервисных служб и специальных программаторов могут сами обновлять свою программу, получая ее автоматически из внешних каналов. Например, современные мобильные телефоны могут получать и автоматически устанавливать новые версии прошивок прямо через телефонного оператора или по USB или через Блютуз (Bluetooth) из интернета. Используя современные процессоры вы сами можете создать подобную систему.

SELFPRGEN

В некоторых моделях микроконтроллеров для включения режима самопрограммирования используется FUSE переключатель SELFPRGEN.

В процессе самопрограммирования возможен следующий конфликт: Если программа сама себя переписывает, то в процессе работы она должна будет стереть саму себя! Ведь процесс записи FLASH памяти всегда начинается со стирания. Технология многоразового стираемого ПЗУ такова, что стирать нужно сразу все ячейки. Именно по этому память приходится делить на две части: область основной программы и область загрузчика. Основная программа располагается в своей области. Она выполняет все основные функции. Когда же наступает необходимость перезаписать основную программу, она передает управление в область загрузчика. Программа, загруженная в эту область автоматически стирает область основной программы, получает любым из способов (через один из последовательных каналов или через любой из портов) побайтно коды новой версии и прошивает это все на место старой.

BOOTSZ

Многие модели микроконтроллеров AVR имеют возможность выбирать размер области загрузчика из нескольких вариантов. Этим обеспечивается определенная гибкость для разработчика. Размер области загрузки определяется при помощи группы фьюзов BOOTSZ (BOOTSZ1, BOOTSZ2...).

BOOTRST

В некоторых случаях нужно что бы после сброса микроконтроллер начинал выполнение программы не с нулевого адреса, как это установлено по умолчанию, а с начала области загрузчика. Для того, что бы включить данный режим используется фьюз BOOTRST. Если этот бит прошить (сделать равным нулю) то вектор начального сброса изменится и после сброса контроллер начнет выполнение программы с начала области загрузки.

В этом случае программа загрузчика обычно делается таким образом, что она сама проверяет необходимость перезаписи основной программы. Например, запросив у внешнего источника наличие новой версии. Если перезапись не требуется, загрузчик передает управление основной программе. Именно так устроен микроконтроллерный комплект проекта Ардуино. Этот интересный проект как раз использует режим самопрограммирования. Предназначен он для начинающих констукторов. Авторы проекта даже утверждают, что используя Ардуино любой желающий, даже очень далекий от микроконтроллерной техники, не знакомый с паяльником и измерительными приборами может создать и использовать свое собственное микроконтроллерное устройство. Для этого он просто покупает один из вариантов модуля Ардуино, подключает его непосредственно к любому компьютеру. При этом не нужно никаких программаторов. Модуль подключается либо через последовательный (COM) порт, либо USB. Небольшая бесплатная программа, которую легко скачать с сайта проекта поможет создать простую программу и прошить ее в микроконтроллер. А помогает в этом программа-загрузчик заранее прошитая в модуль Ардуино при его производстве. Она принимает разработанную вами программу из компьютера по последовательному порту или через USB и записывает в область основной программы. А затем запускает вновь записанную программу.

Сторожевой таймер.

Сторожевой таймер (по английски WatchDog - сторожевая собака) позволяет повысить устойчивость микроконтроллера против сбоев и зависаний программы. Эта идея не нова. Когда то подобные устройства собирали в виде внешней схемы и подключали к микроконтроллеру. Микроконтроллеры AVR имеют в своем составе встроенный сторожевой таймер. Когда таймер включен, он постоянно отсчитывает специальную задержку перезапуска. Ваша программа должна быть периодически сбрасывать таймер. Для этого в системе команд микроконтроллера имеется специальная команда. Вы просто включаете в основной цикл эту команду с таким расчетом, что бы она сбрасывала сторожевой таймер как можно чаще, что бы таймер не успел досчитать до конца. Если же программа по какой либо причине зависнет, она перестанет сбрасывать сторожевой таймер, он досчитает до конца свою задержку. По окончании задержки таймер вырабатывает сигнал сброса. В результате работа программы возобновляется, причем с самого начала.

WDTON

По умолчанию этот таймер отключен. Для включения сторожевого таймера служит FUSE переключатель WDTON. Так же, как и в случае схемы контроля напряжения питания, не рекомендую включать сторожевой таймер, если ваша программа еще не опробована и не до конца отлажена. Включайте его только когда он действительно необходим. Например, если ваше устройство часто зависает из за помех или по другим причинам.

Интерфейс JTAG

JTAG (произносится «джей-таг»; сокращение от англ. Joint Test Action Group) — специализированный аппаратный интерфейс, разработанный для тестирования собранных печатных плат. Из-за широкой функциональности JTAG стал использоваться для отладки и программирования. На данный момент JTAG-интерфейс применяется при периферийном сканировании (тестироване печатных плат с установленными на них процессорами на наличие в цепях коротких замыканий, непропаек, западаний на 0 или 1). Управление JTAG-интерфейсом описывается в т. н. BSDL-файле, который предоставляется разработчиком каждой конкретной микросхемы. В большинстве случаев эти файлы находятся на сайте производителя микросхемы.

Порт тестирования (TAP — Test Access Port) представляет собой четыре или пять выделенных выводов микросхемы: ТСК, TMS, TDI, TDO. Иногда еще TRST.

Функциональное назначение этих линий:

TDI (test data input — вход тестовых данных) — вход последовательных данных периферийного сканирования. Команды и данные вводятся в микросхему с этого вывода по переднему фронту сигнала TCK;

TDO (test data output — выход тестовых данных) — выход последовательных данных. Команды и данные выводятся из микросхемы с этого вывода по заднему фронту сигнала TCK;

TCK (test clock — тестовое тактирование) — тактирует работу встроенного автомата управления периферийным сканированием. Максимальная частота сканирования периферийных ячеек зависит от используемой аппаратной части и на данный момент ограничена 25…40 МГц[источник?];

TMS (test mode select — выбор режима тестирования) — обеспечивает переход схемы в(из) режим(а) тестирования и переключение между разными режимами тестирования.
В некоторых случаях к перечисленным сигналам добавляется сигнал TRST для инициализации порта тестирования, что необязательно, так как инициализация возможна путем подачи определённой последовательности сигналов на вход TMS.

Работа средств обеспечения интерфейса JTAG подчиняется сигналам автомата управления, встроенного в микросхему. Состояния автомата определяются сигналами TDI и TMS порта тестирования. Определённое сочетание сигналов TMS и TCK обеспечивает ввод команды для автомата и её исполнение

Если на плате установлено несколько устройств, поддерживающих JTAG, они могут быть объединены в общую цепочку. Уникальной особенностью JTAG является возможность программирования не только самого микроконтроллера (или ПЛИС), но и подключённой к его выводам микросхемы флэш-памяти. Причём существует два способа программирования флэш-памяти с использованием JTAG: через загрузчик с последующим обменом данными через память процессора, либо через прямое управление выводами микросхемы.

JTAGEN

Для включения интерфейса JTAG используется FUSE переключатель JTAGEN. Запрограммированный бит JTAGEN включает канал, незапрограммированный отключает. По умолчанию канал включен. Но это не означает, что используемые под этот канал выводы микроконтроллера нельзя использовать по их основному предназначению. Канал активизируется в нужный момент программно.

Рекомендации по применению

Используйте этот интерфейс в том случае, если вам ставится такая задача. Возможно вам заказали некое устройство, которое должно управлять чем то именно по этому интерфейсу. Возможно так же, что ваш программатор работает по интерфейсу JTAG. Есть такие программаторы. Но предпочтительнее применять стандартный программатор, работающий по родному для фирмы Atmel каналу SPI.

Внутрисхемная отладка через JTAG

Еще одно применение JTAG интерфейса - это внутрисхемная отладка (на ряду с родным для Atmel внутрисхемным отладчиком debugWire). В режиме отладки через JTAG адаптер микроконтроллер подключается напрямую к среде программирвания и отладки, например к AVR Studio. После чего микроконтроллер полностью подчиняется AVR Studio и полностью работает под ее управлением. Становится доступным пошаговое выполнение кода, просмотр и изменение всех регистров, работа со всей периферией и все это в реальном микроконтроллере, а не в его программной эмуляции. Можно ставить точки останова (breakpoints) на разные события. К сожалению в AVR микроконтроллерах JTAG доступен далеко не везде, как правило контроллеры с числом ног меньше 40 и обьемом памяти меньше 16КБ интерфейса JTAG не имеют. Там, правда, часто есть debugWire.

Внутрисхемный отладчик debugWIRE

Встроенная система отладки debugWIRE использует двунаправленный однопроводный интерфейс для того, чтобы управлять процессом выполнения программы, выполнять отдельные команды центрального процессора и программировать все виды энергонезависимой памяти.

DWEN

Если FUSE-переключатель разрешения работы системы debug WIRE (DWEN) запрограммирован (т. е. равен нулю), а биты блокировки микросхемы LB1 и LB2 не запрограммированы, включается система отладки debugWIRE.

Вывод RESET в этом режиме представляет собой двунаправленную открытую шину ввода—вывода (с открытым стоком) с подключенным внутренним резистором нагрузки. Эта шина становится шлюзом для обмена информации между отлаживаемой микросхемой и схемой сопряжения с компьютером (эмулятором). Посредством этого интерфейса работа микросхемы берется под контроль отладочной следы, например AVR Studio. Среда автоматически запускает программу на выполнение, в момент остановки программы получает значение всех его регистров. Система поддерживает автоматическую простановку точек останова.

OCDEN

В некоторых моделях AVR система отладки включается при помощи FUSE переключателя OCDEN. Это общий переключатель, включающий режим отладки как по debugWIRE, так и по JTAG.

Точки останова программы

Режим debugWIRE поддерживает программные точки останова, которые формируются при помощи специальной команды BREAK, входящей в систему команд AVR. При создании точки останова в среде программирования AVR Studio в программный код, предназначенной для отладки программы автоматически в нужном месте вписывается команда BREAK. Затем измененная программа, содержащая в нужных местах команды BREAK, помещается в программную память микроконтроллера (перепрошивается). При этом команда, заменяемая на BREAK, сохраняется в памяти компьютера.Контроллер начинает выполнять программу и приостанавливается в том месте, где стоит BREAK. По команде BREAK микроконтроллер останавливается и посылает в AVR Studio сигнал подтверждения останова.Получив эту команду AVR Studio считывает значение всех регистров и отображает из в привычном нам виде.

Когда вы запускаете прерванную программу на дальнейшее выполнение, сначала выполняется сохраненная команда (интерфейс debugWIRE дает такую возможность), а затем уже продолжается выполнение команд из программной памяти микроконтроллера. Вы можете также создать точки останова вручную, помещая команду BREAK в любом месте вашей программы.

Особенностью данной технологии является то, что память программ должна перепрограммироваться каждый раз, когда изменяется размещение точек останова. Среда AVR Studio делает это автоматически посредством debugWIRE-интерфейса. Использование программных точек останова уменьшает возможное количество циклов записи/стирания для программной памяти микроконтроллера. Поэтому при отладке программ подобным способом нужно постоянно следить, чтобы отладчик не израсходовал все ресурсы вашей микросхемы.

Ограничения режима debugWIRE

Вывод микросхемы, обеспечивающий режим debugWIRE (dW), физически объединен с входом внешнего сброса (RESET). Поэтому при использовании режима debugWIRE невозможна если вам необходим внешний сброс.

Система debugWIRE позволяет программе в процессе отладки точно выполнять все функции ввода—вывода и соблюдать все временные соотношения. То есть скорость выполнения программы в режиме отладки не отличается от скорости в реальном режиме работы. Но в тот момент, когда центральный процессор остановлен, необходимо соблюдать осторожность при обращении через отладчик (AVR Studio) к различным регистрам ввода—вывода, чтобы не нарушить работу системы. Подробное описание всех правил работы с регистрами в режиме debugWIRE можно найти в специальной документации по этому режиму. Ее можно найти на сайте фирмы Atmel.

Если fuse-переключатель DWEN запрограммирован (режим debugWIRE включен), то некоторые тактовые сигналы микроконтроллера не отключаются даже в спящих режимах, что увеличивает потребляемую мощность. Поэтому, когда режим debugWire вам больше не нужен, не забывайте перевести в исходное состояние FUSE - переключатель DWEN.

Рекомендации по применению

Уверяю вас, что внутрисхемная отладка как при помощи debugWIRE, так и при помощи JTAG интерфейсов нужна только профессиональным разработчикам при разработке и доводке промышленных образцов, управляющих сложными высокотехнологичными системами. Начинающие и самодеятельные разработцики вполне обойдутся отладчиками с программной эмуляцией. Поэтому этот режим рекомендую не включать. Поэтому оставляйте DWEN (OCDEN) в незапрограммированном состоянии.

Среди любителей микроконтроллерной техники бытует мнение, что при неправильном программировании можно микросхему "убить". То есть повредить безвозвратно. Такое убеждение связано с программированием некоторых конфигурационных (Fuse) переключателей. А точнее с программированием переключателей CKSEL, определяющих режимы работы тактового генератора.

Заводская установка выбрана таким образом, что новая микросхема работает в режиме внутренней синхронизации. Если вы используете последовательное программирование, то вам достаточно лишь подать питание на микросхему и подключить ее к программатору по последовательному каналу. Однако помните: при отсутствии синхросигнала программирование микросхемы в последовательном режиме невозможно! Если в процессе программирования конфигурационных ячеек вы, случайно либо намеренно измените состояние ячеек CKSEL3...0, вы переведете микросхему в один из режимов, требующих либо наличия внешнего кварцевого (пьезо) резонатора, либо внешней RC-цепочки, либо внешнего тактового генератора. При этом, если требуемые внешние цепи отсутствуют, тактовые колебания сорвутся и дальнейшее программирование микросхемы и изменение состояния конфигурационных ячеек станет невозможным. Но не волнуйтесь! Микросхема не вышла из строя. Если микросхема перестала отзываться на команды программатора, вам придется вспомнить, какое значение вы записали в переключатели CKSEL3...0 в последнем сеансе изменения конфигурационных ячеек. Обычно бывает так: Вы забыли вообще установить их значение и нажали кнопку " Write". В этом случае все "птички" отсутствовали и во все четыре ячейки CKSEL3...0 были записаны единицы. Это соответствует внешнему кварцевому резонатору. Подключите к выводам XTAL0 и XTAL1 кварцевый резонатор и согласующие конденсаторы в соответствии с технической документацией. После этого управляемость микросхемой восстановится. Если вы записали в ячейки CKSEL3...0 другие значения, то вам придется подключить либо внешнюю RC-цепочку, либо внешний генератор. В зависимости от того, в какой режим вы случайно перевели вашу микросхему.

Второй вариант, когда микросхема кажется "убитой" - программирование назначения вывода "Reset". В некоторых микросхемах, таких, как ATmega8, ATmega325, ATmega645, ATmega329 и некоторых других функция вывода RESET может быть изменена. Для изменения функции вывода Reset используется Fuse-переключатель RSTDISBL. Если запрограммировать этот бит (сделать равным нулю) вывод Reset превращается в еще одну дополнительную линию порта ввода/вывода. Но одновременно микросхема теряет способность последовательного программирования. Это связано с тем, что в режиме последовательного программирования активно учувствует сигнал Reset (низкий уровень на этом входе не только приводит к системному сбросу, но и переводит микросхему в режим программирования). Когда же вывод становится входом порта, то такой режим невозможен, так как иначе от внешнего нулевого сигнала микросхема постоянно будет переходить в режим программирования. В таком случае микросхему можно запрограммировать лишь в параллельном режиме. Если ваш программатор работает только в последовательном режиме, то случайно прошив Fuse-переключатель RSTDISBL вы потеряете связь с микросхемой и после этого такую микросхему вернуть в обычный режим можно только при помощи программатора работающего в параллельном режиме. Кстати, если программатор имеет панельку, куда вы должны вставить микросхему для программирования, то это еще не значит, что он работает в параллельном режиме. Поддерживаемые режимы работы программатора можно узнать из его документации.

Источник: "Самоучитель разработчика устройств на микроконтроллерах AVR"

Рекомендуем посмотреть