AVR8GENERIC ID Definitions

This section includes the header file defining the different command, response, and event IDs for the AVR8 protocol. It also defines the different possible failure codes.

enum Avr8GenericCommands {
    CMD_AVR8_QUERY                      = 0x00, //! Capability discovery 
    CMD_AVR8_SET                        = 0x01, //! Set parameters
    CMD_AVR8_GET                        = 0x02, //! Get parameters
    CMD_AVR8_ACTIVATE_PHYSICAL          = 0x10, //! Connect physically
    CMD_AVR8_DEACTIVATE_PHYSICAL        = 0x11, //! Disconnect physically
    CMD_AVR8_GET_ID                     = 0x12, //! Read the ID
    CMD_AVR8_ATTACH                     = 0x13, //! Attach to OCD module
    CMD_AVR8_DETACH                     = 0x14, //! Detach from OCD module
    CMD_AVR8_PROG_MODE_ENTER            = 0x15, //! Enter programming mode
    CMD_AVR8_PROG_MODE_LEAVE            = 0x16, //! Leave programming mode
    CMD_AVR8_DISABLE_DEBUGWIRE          = 0x17, //! Disable debugWIRE interface
    CMD_AVR8_ERASE                      = 0x20, //! Erase the chip
    CMD_AVR8_MEMORY_READ                = 0x21, //! Read memory
    CMD_AVR8_MEMORY_READ_MASKED         = 0x22, //! Read memory while via a mask
    CMD_AVR8_MEMORY_WRITE               = 0x23, //! Write memory
    CMD_AVR8_CRC                        = 0x24, //! Calculate CRC
    CMD_AVR8_RESET                      = 0x30, //! Reset the MCU
    CMD_AVR8_STOP                       = 0x31, //! Stop the MCU
    CMD_AVR8_RUN                        = 0x32, //! Resume execution
    CMD_AVR8_RUN_TO_ADDRESS             = 0x33, //! Resume with breakpoint 
    CMD_AVR8_STEP                       = 0x34, //! Single step
    CMD_AVR8_PC_READ                    = 0x35, //! Read PC
    CMD_AVR8_PC_WRITE                   = 0x36, //! Write PC
    CMD_AVR8_HW_BREAK_SET               = 0x40, //! Set breakpoints
    CMD_AVR8_HW_BREAK_CLEAR             = 0x41, //! Clear breakpoints
    CMD_AVR8_SW_BREAK_SET               = 0x43, //! Set software breakpoints
    CMD_AVR8_SW_BREAK_CLEAR             = 0x44, //! Clear software breakpoints
    CMD_AVR8_SW_BREAK_CLEAR_ALL         = 0x45, //! Clear all software breakpoints
    CMD_AVR8_PAGE_ERASE                 = 0x50  //! Erase page
};

// Protocol responses
enum Avr8GenericResponses {
    RSP_AVR8_OK                         = 0x80, //! All OK
    RSP_AVR8_LIST                       = 0x81, //! List of items returned
    RSP_AVR8_DATA                       = 0x84, //! Data returned
    RSP_AVR8_PC                         = 0x83, //! PC value returned
    RSP_AVR8_FAILED                     = 0xA0  //! Command failed to execute
};

// Protocol events
enum Avr8GenericEvents {
    EVT_AVR8_BREAK                      = 0x40, //! Break message
    EVT_AVR8_IDR                        = 0x41  //! IO Data Register message
};

// Failure response codes (RSP_FAILED)
enum Avr8GenericFailureCodes {
    AVR8_FAILURE_OK                      = 0x00, //! All OK
    AVR8_FAILURE_DW_PHY_ERROR            = 0x10, //! debugWIRE physical error
    AVR8_FAILURE_JTAGM_INIT_ERROR        = 0x11, //! JTAGM failed to initialise
    AVR8_FAILURE_JTAGM_ERROR             = 0x12, //! JTAGM did something strange
    AVR8_FAILURE_JTAG_ERROR              = 0x13, //! JTAG low level error
    AVR8_FAILURE_JTAGM_VERSION           = 0x14, //! Unsupported version of JTAGM
    AVR8_FAILURE_JTAGM_TIMEOUT           = 0x15, //! JTAG master timed out
    AVR8_FAILURE_JTAG_BIT_BANGER_TIMEOUT = 0x16, //! JTAG bit banger timed out
    AVR8_FAILURE_PARITY_ERROR            = 0x17, //! Parity error in received data
    AVR8_FAILURE_EB_ERROR                = 0x18, //! Did not receive EMPTY byte
    AVR8_FAILURE_PDI_TIMEOUT             = 0x19, //! PDI physical timed out
    AVR8_FAILURE_COLLISION               = 0x1A, //! Collision on physical level
    AVR8_FAILURE_PDI_ENABLE              = 0x1B, //! PDI enable failed
    AVR8_FAILURE_NO_DEVICE_FOUND         = 0x20, //! devices == 0!
    AVR8_FAILURE_CLOCK_ERROR             = 0x21, //! Failure when increasing baud
    AVR8_FAILURE_NO_TARGET_POWER         = 0x22, //! Target power not detected
    AVR8_FAILURE_NOT_ATTACHED            = 0x23, //! Must run attach command first
    AVR8_FAILURE_DAISY_CHAIN_TOO_LONG    = 0x24, //! Devices > 31
    AVR8_FAILURE_DAISY_CHAIN_CONFIG      = 0x25, //! Configured device bits do not add up to detected bits
    AVR8_FAILURE_INVALID_PHYSICAL_STATE  = 0x31, //! Physical not activated
    AVR8_FAILURE_ILLEGAL_STATE           = 0x32, //! Illegal run / stopped state
    AVR8_FAILURE_INVALID_CONFIG          = 0x33, //! Invalid config for activate phy
    AVR8_FAILURE_INVALID_MEMTYPE         = 0x34, //! Not a valid memtype
    AVR8_FAILURE_INVALID_SIZE            = 0x35, //! Too many or too few bytes
    AVR8_FAILURE_INVALID_ADDRESS         = 0x36, //! Asked for a bad address
    AVR8_FAILURE_INVALID_ALIGNMENT       = 0x37, //! Asked for badly aligned data
    AVR8_FAILURE_ILLEGAL_MEMORY_RANGE    = 0x38, //! Address not within legal range
    AVR8_FAILURE_ILLEGAL_VALUE           = 0x39, //! Illegal value given
    AVR8_FAILURE_ILLEGAL_ID              = 0x3A, //! Illegal target ID
    AVR8_FAILURE_INVALID_CLOCK_SPEED     = 0x3B, //! Clock value out of range
    AVR8_FAILURE_TIMEOUT                 = 0x3C, //! A timeout occurred
    AVR8_FAILURE_ILLEGAL_OCD_STATUS      = 0x3D, //! Read an illegal OCD status 
    AVR8_FAILURE_NVM_ENABLE              = 0x40, //! NVM failed to be enabled
    AVR8_FAILURE_NVM_DISABLE             = 0x41, //! NVM failed to be disabled
    AVR8_FAILURE_CS_ERROR                = 0x42, //! Illegal control/status bits 
    AVR8_FAILURE_CRC_FAILURE             = 0x43, //! CRC mismatch
    AVR8_FAILURE_OCD_LOCKED              = 0x44, //! Failed to enable OCD
    AVR8_FAILURE_NO_OCD_CONTROL          = 0x50, //! Device is not under control
    AVR8_FAILURE_PC_READ_FAILED          = 0x60, //! Error when reading PC
    AVR8_FAILURE_REGISTER_READ_FAILED    = 0x61, //! Error when reading register
    AVR8_FAILURE_READ_ERROR              = 0x70, //! Error while reading
    AVR8_FAILURE_WRITE_ERROR             = 0x71, //! Error while writing
    AVR8_FAILURE_WRITE_TIMEOUT           = 0x72, //! Timeout while reading
    AVR8_FAILURE_ILLEGAL_BREAKPOINT      = 0x80, //! Invalid breakpoint configuration
    AVR8_FAILURE_TOO_MANY_BREAKPOINTS    = 0x81, //! Not enough available resources
    AVR8_FAILURE_NOT_SUPPORTED           = 0x90, //! This feature is not available
    AVR8_FAILURE_NOT_IMPLEMENTED         = 0x91, //! Command has not been implemented
    AVR8_FAILURE_UNKNOWN                 = 0xFF  //! Disaster.
};

// QUERY types on this protocol
enum Avr8GenericQueryContexts {
    AVR8_QUERY_COMMANDS                 = 0x00, //! Supported command list
    AVR8_QUERY_CONFIGURATION            = 0x05, //! Supported configuration list
    AVR8_QUERY_READ_MEMTYPES            = 0x07, //! Supported read memtypes list
    AVR8_QUERY_WRITE_MEMTYPES           = 0x08  //! Supported write memtypes list
};

// Context definitions 
enum Avr8GenericSetGetContexts {
    AVR8_CTXT_CONFIG                    = 0x00, //! Configuration
    AVR8_CTXT_PHYSICAL                  = 0x01, //! Physical interface related
    AVR8_CTXT_DEVICE                    = 0x02, //! Device specific settings
    AVR8_CTXT_OPTIONS                   = 0x03, //! Option-related settings
    AVR8_CTXT_SESSION                   = 0x04, //! Session-related settings
};

enum Avr8GenericConfigContextParameters {
    AVR8_CONFIG_VARIANT                 = 0x00, //! Device family/variant
    AVR8_CONFIG_FUNCTION                = 0x01  //! Functional intent
};

enum Avr8GenericPhysicalContextParameters {
    AVR8_PHY_INTERFACE                  = 0x00, //! Physical interface selector
    AVR8_PHY_JTAG_DAISY                 = 0x01, //! JTAG daisy chain settings
    AVR8_PHY_DW_CLK_DIV                 = 0x10, //! debugWIRE clock divide ratio
    AVR8_PHY_MEGA_PRG_CLK               = 0x20, //! Clock for programming megaAVR
    AVR8_PHY_MEGA_DBG_CLK               = 0x21, //! Clock for debugging megaAVR
    AVR8_PHY_XM_JTAG_CLK                = 0x30, //! JTAG clock for AVR XMEGA
    AVR8_PHY_XM_PDI_CLK                 = 0x31  //! PDI clock for AVR XMEGA and AVR devices with UPDI
};

enum Avr8GenericOptionsContextParameters {
    AVR8_OPT_RUN_TIMERS                 = 0x00, //! Keep timers running when stopped
    AVR8_OPT_DISABLE_DBP                = 0x01, //! No data breaks during reset
    AVR8_OPT_ENABLE_IDR                 = 0x03, //! Relay IDR messages
    AVR8_OPT_POLL_INT                   = 0x04  //! Configure polling interval
};

enum Avr8GenericSessionContextParameters {
    AVR8_SESS_MAIN_PC                   = 0x00  //! Address of main() function (deprecated)
};

enum Avr8GenericConfigTestParameters {
    AVR8_TEST_TGT_RUNNING               = 0x00  //! Is target running?
};

enum Avr8GenericVariantValues {
    AVR8_VARIANT_LOOPBACK               = 0x00, //! Dummy device
    AVR8_VARIANT_DW                     = 0x01, //! tinyAVR or megaAVR with debugWIRE
    AVR8_VARIANT_MEGAJTAG               = 0x02, //! megaAVR with JTAG
    AVR8_VARIANT_XMEGA                  = 0x03, //! AVR XMEGA
    AVR8_VARIANT_UPDI                   = 0x05, //! AVR devices with UPDI
    AVR8_VARIANT_NONE                   = 0xFF  //! No device
};

enum Avr8GenericFunctionValues {
    AVR8_FUNC_NONE                      = 0x00, //! Not configured
    AVR8_FUNC_PROGRAMMING               = 0x01, //! I want to program only
    AVR8_FUNC_DEBUGGING                 = 0x02  //! I want a debug session
};

// Physical modes
enum Avr8GenericPhysicalInterfaces {
    AVR8_PHY_INTF_NONE                  = 0x00, //! Not configured
    AVR8_PHY_INTF_JTAG                  = 0x04, //! JTAG
    AVR8_PHY_INTF_DW                    = 0x05, //! debugWIRE
    AVR8_PHY_INTF_PDI                   = 0x06  //! PDI
    AVR8_PHY_INTF_PDI_1W                = 0x08, //! UPDI (one-wire)
};

enum Avr8GenericMegaBreakpointTypes {        
    AVR8_HWBP_PROG_BP               = 0x01  //! Program breaks
};

enum Avr8GenericMegaBreakCauses {
    AVR8_BREAK_CAUSE_UNKNOWN        = 0x00, //! Unspecified
    AVR8_BREAK_CAUSE_PROGRAM        = 0x01  //! Program break
};

enum Avr8GenericXtendedEraseModes {
    ERASE_CHIP                     = 0x00, //! Erase entire chip 
    ERASE_APP                      = 0x01, //! Erase application section only
    ERASE_BOOT                     = 0x02, //! Erase boot section only
    ERASE_EEPROM                   = 0x03, //! Erase EEPROM section only
    ERASE_APP_PAGE                 = 0x04, //! Erase a single app section page
    ERASE_BOOT_PAGE                = 0x05, //! Erase a single boot section page
    ERASE_EEPROM_PAGE              = 0x06, //! Erase a single EEPROM page
    ERASE_USERSIG                  = 0x07  //! Erase the user signature section
};

// Memory types
enum Avr8GenericMemtypes {
    MEMTYPE_SRAM                    = 0x20, //! SRAM
    MEMTYPE_EEPROM                  = 0x22, //! EEPROM memory
    MEMTYPE_SPM                     = 0xA0, //! Flash memory in a debug session
    MEMTYPE_FLASH_PAGE              = 0xB0, //! Flash memory programming
    MEMTYPE_EEPROM_PAGE             = 0xB1, //! EEPROM memory pages
    MEMTYPE_FUSES                   = 0xB2, //! Fuse memory
    MEMTYPE_LOCKBITS                = 0xB3, //! Lock bits
    MEMTYPE_SIGNATURE               = 0xB4, //! Device signature
    MEMTYPE_OSCCAL                  = 0xB5, //! Oscillator calibration values
    MEMTYPE_REGFILE                 = 0xB8, //! Register file
    MEMTYPE_APPL_FLASH              = 0xC0, //! Application section flash
    MEMTYPE_BOOT_FLASH              = 0xC1, //! Boot section flash
    MEMTYPE_APPL_FLASH_ATOMIC       = 0xC2, //! Application page with auto-erase
    MEMTYPE_BOOT_FLASH_ATOMIC       = 0xC3, //! Boot page with auto-erase
    MEMTYPE_EEPROM_ATOMIC           = 0xC4, //! EEPROM page with auto-erase
    MEMTYPE_USER_SIGNATURE          = 0xC5, //! User signature secion
    MEMTYPE_CALIBRATION_SIGNATURE   = 0xC6  //! Calibration section
};