Перейти к содержанию

debugWIRE

debugWIRE — интерфейс отладки небольших AVR, которому хватает одного вывода — RESET. Через него отладчик останавливает программу, читает и меняет регистры и память, ставит точки останова. Но у такого удобства есть цена, о которой нужно знать заранее.

Обновлено Редакция GAW

debugWIRE — однопроводной интерфейс отладки микроконтроллеров AVR с небольшим числом выводов: ATmega328P, многих ATtiny. Когда запрограммирован фьюз DWEN, вывод RESET превращается в двунаправленную линию с открытым стоком и подтяжкой, через которую отладчик останавливает программу, выполняет её по шагам, читает регистры и программирует память (DS40002061B, глава 25). Работают с ним Atmel-ICE, JTAGICE3 и AVR Dragon.

Ограничения

  • Линия RESET. Подтяжка на RESET — не меньше 10 кОм; конденсаторы и внешние источники сброса нужно отключить, а RESET нельзя подключать прямо к питанию.
  • ISP недоступен. Пока DWEN запрограммирован, RESET не работает как сброс, и прошить кристалл по ISP нельзя, пока отладчик не выключит debugWIRE.
  • Флеш-память. Точки останова — это записанная во флеш команда BREAK, и каждая их смена перезаписывает страницу, что сокращает срок хранения данных.
  • Потребление. Пока DWEN запрограммирован, тактовый генератор работает и во сне, поэтому фьюз выключают, когда отладка закончена.

Другие интерфейсы отладки

У многовыводных ATmega — ATmega128, ATmega2560, ATmega32U4 — для отладки есть JTAG, у новых серий tinyAVR 0/1/2 и megaAVR 0 — UPDI, у микроконтроллеров на ядре ARM Cortex-M — SWD. Сравнение интерфейсов прошивки и отладки AVR — в статье «Как прошить AVR».

Частые вопросы

Почему после включения debugWIRE не работает программатор?

При запрограммированном фьюзе DWEN вывод RESET становится линией debugWIRE, и внешний сброс не поддерживается, а без сброса не работает ISP. Снять фьюз DWEN и вернуть ISP можно отладчиком с поддержкой debugWIRE или высоковольтным программатором.

Почему debugWIRE не работает на плате Arduino?

На Arduino Uno сигнал DTR моста USB–UART подключён к выводу RESET через конденсатор 100 нФ для автоматического сброса перед загрузкой. А даташит требует для debugWIRE отключить от RESET конденсаторы и все внешние источники сброса. Поэтому для отладки по debugWIRE цепь автосброса на плате приходится разрывать.

Портит ли debugWIRE флеш-память?

Точки останова реализуются записью команды BREAK во флеш-память, поэтому каждая их смена перезаписывает страницу. По даташиту это сокращает срок хранения данных во флеш-памяти, и кристаллы, на которых шла отладка, не рекомендуется ставить в изделия для заказчиков.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — гл. 25 — debugWIRE: фьюз DWEN, вывод RESET как двунаправленная линия с открытым стоком, требования к подтяжке не меньше 10 кОм, точки останова командой BREAK
  2. AVRDUDE 8.3: руководство avrdude.1 и файл avrdude.conf (github.com/avrdudes/avrdude) — отладчики Atmel-ICE, JTAGICE3, AVR Dragon; поддержка debugWIRE
  3. Arduino. Arduino/Genuino Uno: описание платы (arduino.cc, архив 2017) — автосброс через DTR и конденсатор 100 нФ

Нашли ошибку?