5.1.2.1 Flash Verification Fails in MPLAB® X

Verification errors may be reported in MPLAB® X when writing fuses/configuration bits on AVR16EB32 Curiosity Nano revision 2, which is caused by the debugger incorrectly masking/protecting the configuration memory of the AVR device. There are several possible workarounds for this issue. Workarounds 1 and 2 are persistent on the AVR16EB32 Curiosity Nano, while workaround 3 affects only the current project and does not persist on the kit.
Info: You can see this message during the verification of reserved locations not required to be written for regular operation. You may assume that Flash programming has succeeded unless seeing a Flash memory verification failure.

Workaround 1

The Curiosity Nano debugger can be re-provisioned by the end-user with updated masks using a binary utility.

Procedure:
  1. Navigate to github.com/microchip-pic-avr-tools/debuggerconfigfix and download the debuggerconfigfix utility for the appropriate operating system.
  2. Connect the Curiosity Nano kit to the host PC and reprovision the debugger by opening a command-line/terminal and executing the binary
    debuggerconfigfix.exe
  3. Check the console output for success indication:
    *** Debugger configuration SUCCESS ***
  4. Unplug the Curiosity Nano kit and plug it in again for the new mask to take effect.

Workaround 2

The Curiosity Nano debugger can be re-provisioned by the end-user with updated masks using a Python-based utility.

Requirements:
  • Python 3.8 or later installed

Procedure:

  1. Install the pydebuggerconfig Python package using:

    pip install pydebuggerconfig
    Note: If the pydebuggerconfig package is already installed, update it to version 3.11 or newer.
  2. Connect the Curiosity Nano kit to the host PC and reprovision the debugger using
     pydebuggerconfig write -d AVR16EB32-device-blob.xml
  3. Unplug the Curiosity Nano kit and plug it in again for the new mask to take effect.

Workaround 3

When writes to reserved locations are skipped by the debugger, this issue occurs, and the verification fails as unexpected values read back. You can avoid verification errors by providing the reserved fuse values already in the MCU in the project being programmed.

For example, in a project, a structure like this specifies the fuse values:
FUSES = 
{
  ...
};
The values already programmed in reserved locations can be added to this structure (in this case 0xFF) by adding:
  .reserved_1 = {0xFF, 0xFF},
  .reserved_2 = 0xFF,

During verification, the specified values will match the values already programmed, and no verification issues will be seen.