AVR® Fuses

AVR® Fuses are the locations in non-volatile memory that define the hardware configuration of an AVR device.

Fuses are placed in a select section of memory and consist of a few registers. Each bit of the register represents a different fuse setting. Detailed information on which fuses are available in the different programming modes and their functions can be found in the device datasheet. Instruction clock speed, watchdog timer and debug mode are just a few of the fuse settings available on most devices.
Fuses are changed at programming time with a connected programmer such as the ICE Debugger/Programmer using Atmel Studio 7 IDE. They are latched in place after programming and also at power-up of the device.

Unless careful consideration is made of which Fuse bits are programmed, it is easy for the novice programmer to brick their device (i.e. render the MCU un-programmable/un-debuggable in his/her application circuit).

Brief AVR Fuses Summary

Fuse Programming

The Device Programming window (also known as the programming dialog), gives you the most low-level control over the debugging and programming tools. With it, you can program the device's different memories, fuses and lock bits, erase memories, and write user signatures. It can also adjust some of the starter kit properties such as voltage and clock generators.

The programming dialog is accessible from the Device Programming Icon on the standard toolbar or in the ToolsDevice Programming drop-down menu selection.

Device Programming Icon

programavr.png

Menu Selection

programavr2.png

The Programming Window will appear with various programming options listed on the left.

programavr3.png

Select the Fuses option and the fuses page will appear showing the fuses of the selected device. Fuse settings are presented as check boxes or as drop down lists. The Fuse register settings also appear in the lower pane as hexadecimal values.

programming_fuses.png

Read the Fuses

Press the Read button, in the lower right corner, to read the current value of the fuses. If the Auto read box is checked, the fuse settings will be read from the device each time you enter the fuse page.

Changing the Fuses

From the drop down boxes the fuse settings can be changed. Some selections require a box to be checked or unchecked.
Note - A fuse bit that is selected is set to a "0" in the register.

Program the Fuses

After any changes are made to the settings, press the Program button to write the current fuse setting to the device. If the Verify after programming box is checked, the settings will be verified after a programming operation is completed.

Latching of Fuses

The fuse values are latched when the device enters programming mode and changes of the fuse values will have no effect until the part leaves Programming mode. This does not apply to the EESAVE Fuse which will take effect once it is programmed. The fuses are also latched on Power-Up in Normal mode.

Bricking a Device

The following fuse bytes (and default fuse bit settings) are shown for the ATmega328PB. Key fuse bit settings which could brick the device are highlighted:

FUSE LOW Byte

R/P-0 R/P-1 R/P-1 R/P-0 R/P-0 R/P-0 R/P-1 R/P-0
CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
bit 7 bit 0
  • CKSELn [n=3:0] – Selects clock source for the system clock
  • SUTn [n=1:0] - Selects the delay period from when the External Reset is released (not active anymore) until the Internal Reset is released
  • CKOUT – Enables clock output on PB0
  • CKDIV8 – Configures the CPU clock to be pre-scaled by 8
  • Fuse bit = 1 is un-programmed (inactive/disabled)
  • Fuse bit = 0 is programmed (active/enabled)

FUSE HIGH Byte

R/P-1 R/P-1 R/P-0 R/P-1 R/P-1 R/P-0 R/P-0 R/P-1
RSTDISBL DWEN SPIEN WDTON EESAVE BOOTSZ1 BOOTSZ0 BOOTRST
bit 7 bit 0
  • BOOTRST - If you use a bootloader to flash MCU, this bit must be enabled
  • BOOTSZn [n=1:0] - These bits select the bootloader section size
  • EESAVE – Exclude the EEPROM during a chip erase procedure
  • WDTON – Enable Watchdog Timer by HW
  • SPIEN – Enable/Disable In-Circuit Serial Programming (ISP) mode
  • DWEN – Enable/Disable DebugWire debug interface
  • RSTDISBL – Enable/Disable nRESET pin usage as IO

FUSE EXTENDED Byte

U-1 U-1 U-1 U-1 U-1 R/P-1 R/P-1 R/P-1
- - - - - BODLEVEL2 BODLEVEL1 BODLEVEL0
bit 7 bit 0
  • BODLEVELn [n=2:0] - They select the brown-out voltage level when the VDD supply is no longer suitable for operation and the MCU is reset

 Learn More

 
Help! I've Bricked my MCU!
Learn more >
© 2017 Microchip Technology, Inc.
Information contained on this site regarding device applications and the like is provided only for your convenience and may be superseded by updates. It is your responsibility to ensure that your application meets with your specifications. MICROCHIP MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED, WRITTEN OR ORAL, STATUTORY OR OTHERWISE, RELATED TO THE INFORMATION, INCLUDING BUT NOT LIMITED TO ITS CONDITION, QUALITY, PERFORMANCE, MERCHANTABILITY OR FITNESS FOR PURPOSE. Microchip disclaims all liability arising from this information and its use. Use of Microchip devices in life support and/or safety applications is entirely at the buyer's risk, and the buyer agrees to defend, indemnify and hold harmless Microchip from any and all damages, claims, suits, or expenses resulting from such use. No licenses are conveyed, implicitly or otherwise, under any Microchip intellectual property rights.