Jump to content

DebugWIRE: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Geekabit (talk | contribs)
started with minimal article
 
Citation bot (talk | contribs)
Removed parameters. | Use this bot. Report bugs. | Suggested by Whoop whoop pull up | Category:Debugging | #UCB_Category 3/62
 
(41 intermediate revisions by 28 users not shown)
Line 1: Line 1:
{{Lowercase|DebugWIRE}}
debugWIRE is a debugging protocol for [[Atmel AVR]]s.
{{short description|Communication protocol for on-chip debugging}}
'''debugWIRE''' is a serial communications protocol, designed by [[Atmel]]. It is used for [[on-chip debugging]] of [[AVR microcontrollers]].


== Protocol ==
== Protocol ==
debugWIRE is designed as a simpler alternative to [[JTAG]], aimed at [[microcontrollers]] (MCUs) with limited resources. It is supported by the classic [[ATtiny]] and some smaller ATmega MCUs, such as the [[ATmega328]]. By using debugWIRE one has full read and write access to all memory and full control over the execution flow. It supports single-step, run-to-cursor, step-out, and software break instructions. A [[breakpoint]] (run-to-cursor) will be set by reprogramming the ''BREAK''<ref>[https://ww1.microchip.com/downloads/en/DeviceDoc/AVR-InstructionSet-Manual-DS40002198.pdf AVR Instruction Set Manual]</ref> [[opcode]] into the [[flash memory]] of the MCU. Care must be taken due to the limited number of guaranteed write cycles (10000) of the device.<ref>[http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet-Summary.pdf ATtiny25-ATtiny45-ATtiny85_Datasheet-Summary.pdf ]</ref>
debugWIRE is used for on-chip [[debugging]] (OCD) of Atmel AVR microprocessors. It is simpler than [[JTAG]] and only uses a single pin. It is aimed at small processors where full JTAG is not an option. It is supported by most modern 8-bit AVRs. By using debugWIRE you have full read and write access to all memory and full control over the execution flow.


== Programmers ==
== Programmer models ==
debugWIRE is supported by all modern hardware debuggers from [[Microchip Technology|Microchip]]. This includes Atmel-ICE,<ref>[https://www.microchip.com/en-us/development-tool/ATATMEL-ICE Atmel-ICE]</ref> JTAGICE3, AVR Dragon, JTAGICE mkII, and SNAP.<ref>[http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB%20Snap%20In-Circuit%20Debugger%20IS%20DS50002787A.pdf MPLAB SNAP In-Circuit Debugger]</ref> It is also possible to build a cheap debugWIRE hardware debugger<ref>[https://hinterm-ziel.de/index.php/2022/01/13/a-debugwire-hardware-debugger-for-less-than-10-e/ A debugWIRE Hardware Debugger for Less Than 10 €]</ref> based on an open-source [[Arduino]] sketch.<ref>[https://github.com/felias-fogg/dw-link dw-link---An Arduino-based debugWIRE debugger]</ref>
There are 2 programmers that support debugWIRE: the AVR Dragon and JTAGICE mkII.

== debugWIRE specifications ==
debugWIRE is activated by setting (programming to zero) of the fuse DWEN (debugWIRE enable), normally located in the high fuse byte. After this action the /RESET pin function isn't available anymore and the ISP protocol cannot be used.
debugWIRE can be disabled with any of the mentioned debuggers by sending a special reset command that disables temporarily the debugWIRE function and reenables /RESET and also ISP until next power down cycle. debugWIRE is not able to program the fuses of a device.
If you want to disable debugWIRE permanently you have to disable the function temporarily and program the fuse using the now available ISP function.<ref>[https://www.mikrocontroller.net/articles/DebugWIRE debugWIRE article (in German)]</ref>
debugWIRE uses a 1 wire [[open drain]] serial connection. The default baud rate used is MCU clock/128. Sending a [[Universal asynchronous receiver/transmitter#Break condition|BREAK]] will return 0x55 which is used to detect the baud rate. The MCU will return a BREAK when a breakpoint is hit or a collision is detected on the debugWIRE connection. 0x06 is used to disable debugWIRE and reenable /RESET and ISP, 0x07 resets the MCU, 0xF0 returns the PC, 0xF3 the debugWIRE ID.<ref>[http://www.ruemohr.org/docs/debugwire.html The debugWIRE protocol]</ref><ref>[https://github.com/dcwbrown/dwire-debug Simple stand-alone debugWIRE debugger (open source)]</ref><ref>{{cite web|url=https://www.youtube.com/watch?v=4sMhRCOQCC0|title=Advanced Debugging with Arduino Boards|last=Microchip Makes|date=25 November 2015|publisher=|via=YouTube}}</ref>

== References ==
{{Reflist}}

{{Microcontrollers}}

[[Category:Serial buses]]
[[Category:Debugging]]

Latest revision as of 04:43, 25 December 2022

debugWIRE is a serial communications protocol, designed by Atmel. It is used for on-chip debugging of AVR microcontrollers.

Protocol[edit]

debugWIRE is designed as a simpler alternative to JTAG, aimed at microcontrollers (MCUs) with limited resources. It is supported by the classic ATtiny and some smaller ATmega MCUs, such as the ATmega328. By using debugWIRE one has full read and write access to all memory and full control over the execution flow. It supports single-step, run-to-cursor, step-out, and software break instructions. A breakpoint (run-to-cursor) will be set by reprogramming the BREAK[1] opcode into the flash memory of the MCU. Care must be taken due to the limited number of guaranteed write cycles (10000) of the device.[2]

Programmer models[edit]

debugWIRE is supported by all modern hardware debuggers from Microchip. This includes Atmel-ICE,[3] JTAGICE3, AVR Dragon, JTAGICE mkII, and SNAP.[4] It is also possible to build a cheap debugWIRE hardware debugger[5] based on an open-source Arduino sketch.[6]

debugWIRE specifications[edit]

debugWIRE is activated by setting (programming to zero) of the fuse DWEN (debugWIRE enable), normally located in the high fuse byte. After this action the /RESET pin function isn't available anymore and the ISP protocol cannot be used. debugWIRE can be disabled with any of the mentioned debuggers by sending a special reset command that disables temporarily the debugWIRE function and reenables /RESET and also ISP until next power down cycle. debugWIRE is not able to program the fuses of a device. If you want to disable debugWIRE permanently you have to disable the function temporarily and program the fuse using the now available ISP function.[7] debugWIRE uses a 1 wire open drain serial connection. The default baud rate used is MCU clock/128. Sending a BREAK will return 0x55 which is used to detect the baud rate. The MCU will return a BREAK when a breakpoint is hit or a collision is detected on the debugWIRE connection. 0x06 is used to disable debugWIRE and reenable /RESET and ISP, 0x07 resets the MCU, 0xF0 returns the PC, 0xF3 the debugWIRE ID.[8][9][10]

References[edit]

  1. ^ AVR Instruction Set Manual
  2. ^ ATtiny25-ATtiny45-ATtiny85_Datasheet-Summary.pdf
  3. ^ Atmel-ICE
  4. ^ MPLAB SNAP In-Circuit Debugger
  5. ^ A debugWIRE Hardware Debugger for Less Than 10 €
  6. ^ dw-link---An Arduino-based debugWIRE debugger
  7. ^ debugWIRE article (in German)
  8. ^ The debugWIRE protocol
  9. ^ Simple stand-alone debugWIRE debugger (open source)
  10. ^ Microchip Makes (25 November 2015). "Advanced Debugging with Arduino Boards" – via YouTube.