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