Unified Program and Debug Interface (UPDI) High-Voltage Activation Information
The Unified Program and Debug Interface (UPDI) one-wire interface is implemented on AVR® devices in various forms:
- Dedicated UPDI pin. This implementation is generally used on devices with a large number of pins. The UPDI line is always present, and thus the concept of high-voltage programming does not apply. Examples include megaAVR® 0-series devices and AVR DA and DB family devices.
- Shared UPDI pin. This implementation is generally used on devices with smaller packages. The UPDI pin can be re-configured into a GPIO or /RESET pin. In this case, the UPDI functionality is disabled, and a high-voltage source is required to re-enable it. Examples include tinyAVR 0-series, 1-series, and 2-series devices.
High-Voltage Activation Mechanism Overview
When a high-voltage pulse is detected on the disabled UPDI pin, the pad switches its behaviour over from its previous functionality (GPIO or /RESET) into UPDI mode. However, in order to safeguard against an ESD discharge event disabling functionality in doing so, a valid UPDI key must be clocked in within a 65 ms window after the high-voltage event. Either the NVM enable key or chip erase key can be used. Once a key is clocked into UPDI, a UPDI reset must be issued for the key action to be activated. Once the reset has been processed successfully, the UPDI pin is enabled properly for that session.
In the event that a valid key is not clocked into UPDI within the window, the high-voltage event is assumed to be an ESD discharge, and the device will be reset. The functionality of the UPDI pin will once again be loaded from the fuses and the user code will start to execute as expected.
Volatility of UPDI Pin Functionality
After the UPDI high-voltage sequence has been successful, the UPDI pin functionality is available for programming and debugging. However, it should be noted that this state is volatile, and the original UPDI pin behaviour will be reloaded from fuses when any one of these conditions occur:
- Power toggle
- Reset
- Leave programming mode
This is evident in some front-end implementations (for example Atmel Studio) which may enter and leave programming mode several times in order to perform certain tasks, like read-modify-write of fuse bits. In this case, a high-voltage re-entry may be required several times.
High-Voltage Activation Signal Requirements
High voltage activation for UPDI is a simple pulse, rising from Vdd to the high-voltage threshold, and falling back to Vdd. Unlike some other high-voltage interfaces, the high-voltage source plays no part in the programming of memory, it is simply an activation mechanism for UPDI physical interface.
The amplitude of the high-voltage pulse required is process dependent, so the device datasheet should be consulted for exact details for the part in question.
High-Voltage Activation for an Input Pin
When the UPDI pin is configured as /RESET or a GPIO that is input, it will not drive a logic level out, and thus contention with the high-voltage signal is not an issue. This means that a simple high-voltage pulse can be applied safely at any time to the UPDI pin to activate the interface, provided that no other components are connected. The power toggle procedure below is of course also valid in this case, but not required by any means.
High-Voltage Activation for an Output Pin
When the UPDI pin is configured as a GPIO, it can be driven either high or low by the application. When using UPDI high-voltage activation on a device driving out any logic level, there is a risk that contention may damage both the pad on the device and possibly the programming tool being used. We highly advise against applying a simple high-voltage pulse to a part in this state!
To cater to this, the UPDI pad has a built-in hold-off time of about 10 ms after reset during which it is incapable of driving out its given logic value, making it safe to apply a high-voltage. However, if the UPDI pin is configured as /RESET, then it is by definition an input, and applying a simple high-voltage pulse is always safe, so the only valid form of reset is thus a power-on reset.
To support this, two modes can be supported by development tools:
- user-power toggle - the user is prompted to toggle power
- auto-power-toggle - the development tool toggles power itself
In both of these modes, Vdd of the target system is monitored as it rises after toggling power. Once Vdd is detected to be above a minimum threshold, the high-voltage mechanism generates a pulse and enters the key, enabling UPDI.
High-Voltage Support in Microchip Tools
The following Microchip hardware tools support UPDI high-voltage activation:
- MPLAB® PICkit™ 4 - this tool can apply a variable voltage to the UPDI line for high-voltage activation. However, due to a hardware limitation, high-voltage drive is not possible when the target operating voltage is below 2.8 V. PICkit4 does not provide power to target devices, so only the simple-pulse and user-power-toggle modes are supported.
- Power Debugger - this tool can apply a fixed 12 V pulse to the UPDI line for high-voltage activation. Simple-pulse and user-power-toggle modes are always supported, and if the target device is powered using the on-board power supply (VOUT), then the auto-power toggle mode can also be used for safer high-voltage activation.
The following Microchip software development tools support UPDI high-voltage activation:
- MPLAB X IDE
- Atmel Studio debugger
- Atmel Studio device programming dialog
- atprogram command line programming utility
- pymcuprog python programming package