pyedbglib.protocols¶
pyedbglib.protocols.ati¶
Wrapper for the Asynchronous Transport Interface (ATI)
- class pyedbglib.protocols.ati.AsynchronousTransportInterface(transport)¶
Bases:
DapWrapper
Generic wrapper class for the Asynchronous Transport Interface (ATI)
- read_buffer(buffer_id, num_bytes=None, buffer_type=0)¶
Read data from a buffer. Will handle chopping of data reads to suit USB endpoint size
- Parameters:
buffer_id – ID of buffer to read from
num_bytes – Number of bytes to read from the buffer
buffer_type – ATI_CTRL_TYPE_DATA, ATI_CTRL_TYPE_METADATA, ATI_CTRL_TYPE_CMDRSP or ATI_CTRL_TYPE_SYS
- Returns:
bytearray of data bytes read from the buffer
- read_data_buffer(buffer_id, num_bytes=None)¶
Read data from data buffer
- Parameters:
buffer_id – ID of data buffer to read from
num_bytes – Number of bytes to read from buffer
- Returns:
bytearray of data bytes read from buffer
- read_metadata_buffer(buffer_id, num_bytes=None)¶
Read data from metadata buffer
- Parameters:
buffer_id – ID of metadata buffer to read from
num_bytes – Number of bytes to read from buffer
- Returns:
bytearray of databytes read from buffer
- read_response_buffer(num_bytes=None)¶
Read data from the response buffer
- Parameters:
num_bytes – Number of bytes to read from buffer
- Returns:
bytearray of data bytes read from the buffer
- receive_fragment(buffer_id, flags, bytes_to_receive)¶
Receive data fragment from buffer. Limited by USB endpoint size
- Parameters:
buffer_id – ID of buffer to receive from
flags – BIT: | 7 | 6 | 5 | 4 3 | 2 1 0 | USE: | read | EOF | SOF | buffer_type | Buffer ID |
bytes_to_receive – Number of bytes to read from the buffer
- Returns:
bytearray of data bytes read from the buffer
- send_fragment(buffer_id, flags, data)¶
Send a fragment of data to a buffer. Limited by USB endpoint size
- Parameters:
buffer_id – ID of buffer to send data to
flags – BIT: | 7 | 6 | 5 | 4 3 | 2 1 0 | USE: | read | EOF | SOF | buffer_type | Buffer ID |
data – bytearray of data bytes to write to the buffer
- write_buffer(buffer_id, data, buffer_type=0)¶
Write data to a buffer. Will handle chopping of data to suit USB endpoint size
- Parameters:
buffer_id – ID of buffer to write data to
data – bytearray of data bytes to be written
buffer_type – ATI_CTRL_TYPE_DATA, ATI_CTRL_TYPE_METADATA, ATI_CTRL_TYPE_CMDRSP or ATI_CTRL_TYPE_SYS
- write_command_buffer(data)¶
Write data to command buffer
- Parameters:
data – bytearray of data bytes to write to the buffer
- write_data_buffer(buffer_id, data)¶
Write data to data buffer
- Parameters:
buffer_id – ID of data buffer to write to
data – bytearray of data bytes to write to buffer
- write_metadata_buffer(buffer_id, data)¶
Write data to metadata buffer
- Parameters:
buffer_id – ID of metadata buffer to write to
data – Data bytes to be written to the buffer (bytearray)
- pyedbglib.protocols.ati.get_ati_header(handler, handler_variant=0)¶
Generates an ATI header for an ATI consumer
- Parameters:
handler – Which handler to invoke
handler_variant – Variant (flags) of that handler
- Returns:
ATI header frame (bytearray)
pyedbglib.protocols.avr32protocol¶
Implements Avr32 Protocol, a sub-protocol in the JTAGICE3 family of protocols.
- class pyedbglib.protocols.avr32protocol.Avr32Protocol(transport)¶
Bases:
Jtagice3Protocol
Implements AVR32 protocol functionality on the JTAGICE3 protocol family
- AVR32_AWIRE_BASE = 16¶
- AVR32_CONTEXT_DEVICE = 130¶
- AVR32_CONTEXT_PHYSICAL = 128¶
- AVR32_CONTEXT_SESSION = 4¶
- AVR32_CONTEXT_USB = 3¶
- AVR32_FAILURE_OK = 0¶
- AVR32_FLASH_CTRL_BASE = 2¶
- AVR32_FLASH_PAGEBYTES = 6¶
- AVR32_FLASH_PAGES = 11¶
- AVR32_MEMTYPE_BLOCK = 131¶
- AVR32_MEMTYPE_BYTE = 132¶
- AVR32_MEMTYPE_FUSES = 148¶
- AVR32_MEMTYPE_HALF_WORD = 133¶
- AVR32_MEMTYPE_INTERNAL_FLASH = 144¶
- AVR32_MEMTYPE_MEMORY_SERVICE = 130¶
- AVR32_MEMTYPE_NEXUS = 129¶
- AVR32_MEMTYPE_REGFILE = 146¶
- AVR32_MEMTYPE_SAB = 128¶
- AVR32_MEMTYPE_SYSREG = 145¶
- AVR32_MEMTYPE_USER_PAGE = 147¶
- AVR32_PHYSICAL_AWIRE_BAUD = 4¶
- AVR32_PHYSICAL_AWIRE_MAX_BAUD = 2¶
- AVR32_PHYSICAL_AWIRE_VERSION = 5¶
- AVR32_PHYSICAL_DAISY = 3¶
- AVR32_PHYSICAL_EXTERNAL_RESET = 12¶
- AVR32_PHYSICAL_JTAG_CLOCK = 1¶
- AVR32_PHYSICAL_PHYSICAL = 0¶
- AVR32_PHY_INTF_AWIRE = 7¶
- AVR32_PHY_INTF_JTAG = 4¶
- AVR32_PHY_INTF_NONE = 0¶
- AVR32_QUERY_COMMANDS = 0¶
- AVR32_QUERY_COMMAND_VERSIONS = 8¶
- AVR32_QUERY_CONFIGURATION = 5¶
- AVR32_QUERY_DEVICE = 4¶
- AVR32_QUERY_FAMILIES = 1¶
- AVR32_QUERY_FUNCTIONS = 2¶
- AVR32_QUERY_INTERFACES = 3¶
- AVR32_QUERY_READ_MEMTYPES = 6¶
- AVR32_QUERY_WRITE_MEMTYPES = 7¶
- AVR32_RESET_DOMAINS = 10¶
- AVR32_SESSION_RUN_LED = 0¶
- AVR32_TAP_DR = 1¶
- AVR32_TAP_IR = 0¶
- AVR32_USB_MAX_READ = 0¶
- AVR32_USB_MAX_WRITE = 1¶
- CMD_AVR32_ACTIVATE_PHYSICAL = 3¶
- CMD_AVR32_DEACTIVATE_PHYSICAL = 4¶
- CMD_AVR32_ERASE = 17¶
- CMD_AVR32_ERASE_SECTION = 25¶
- CMD_AVR32_GET = 2¶
- CMD_AVR32_GET_ID = 16¶
- CMD_AVR32_HALT = 18¶
- CMD_AVR32_IS_PROTECTED = 24¶
- CMD_AVR32_QUERY = 0¶
- CMD_AVR32_READ = 21¶
- CMD_AVR32_RESET = 19¶
- CMD_AVR32_SET = 1¶
- CMD_AVR32_STEP = 20¶
- CMD_AVR32_TAP = 23¶
- CMD_AVR32_WRITE = 22¶
- RSP_AVR32_DATA = 132¶
- RSP_AVR32_DATA_PROBED = 133¶
- RSP_AVR32_FAILED = 160¶
- RSP_AVR32_ID = 130¶
- RSP_AVR32_LIST = 129¶
- RSP_AVR32_OK = 128¶
- RSP_AVR32_PC = 131¶
- activate_physical(use_reset=False)¶
Activates the physical interface
- Parameters:
use_reset – reset
- deactivate_physical()¶
Deactivates the physical interface
- erase()¶
Chip erase
- get_id()¶
Reads the device ID
- Returns:
device ID
- halt(value)¶
Apply a Halt request to the device
- is_protected()¶
Checks if the device is protected
- Returns:
boolean True if protected, False if not
- jtag_dr(bits, data)¶
Raw JTAG DR operation
- Parameters:
bits – number of bits to shift
data – data to shift
- Returns:
data shifted out
- jtag_ir(bits, data)¶
Raw JTAG IR operation
- Parameters:
bits – number of bits to shift
data – data to shift
- memory_read(memtype, address, num_bytes)¶
Read memory form the target
- Parameters:
memtype – memory type (section)
address – start address
num_bytes – number of bytes
- Returns:
memory read
- memory_write(memtype, address, data)¶
Write memory to target
- Parameters:
memtype – memory type / region to access
address – start address
data – data to write
- reset(value)¶
Apply a Reset request to the device
- step()¶
Single steps the device
- Returns:
new PC value
pyedbglib.protocols.avr32protocolerrors¶
Mapping AVR32protocol error codes to more human friendly strings
pyedbglib.protocols.avr8protocol¶
Implements Avr8Protocol, a sub-protocol in the JTAGICE3 family of protocols.
- class pyedbglib.protocols.avr8protocol.Avr8Protocol(transport)¶
Bases:
Jtagice3Protocol
Implements AVR8 protocol functionality on the JTAGICE3 protocol family.
- AVR8_CONFIG_FUNCTION = 1¶
- AVR8_CONFIG_VARIANT = 0¶
- AVR8_CTXT_CONFIG = 0¶
- AVR8_CTXT_DEVICE = 2¶
- AVR8_CTXT_OPTIONS = 3¶
- AVR8_CTXT_PHYSICAL = 1¶
- AVR8_CTXT_SESSION = 4¶
- AVR8_CTXT_TEST = 128¶
- AVR8_FAILURE_ACK_ERROR = 71¶
- AVR8_FAILURE_BOOT_ERROR = 70¶
- AVR8_FAILURE_CLOCK_ERROR = 33¶
- AVR8_FAILURE_COLLISION = 26¶
- AVR8_FAILURE_CRC_FAILURE = 67¶
- AVR8_FAILURE_CS_ERROR = 66¶
- AVR8_FAILURE_DAISY_CHAIN_CONFIG = 37¶
- AVR8_FAILURE_DAISY_CHAIN_TOO_LONG = 36¶
- AVR8_FAILURE_DMA_ERROR = 29¶
- AVR8_FAILURE_DW_PHY_ERROR = 16¶
- AVR8_FAILURE_EB_ERROR = 24¶
- AVR8_FAILURE_FRAMING_ERROR = 28¶
- AVR8_FAILURE_ILLEGAL_BREAKPOINT = 128¶
- AVR8_FAILURE_ILLEGAL_ID = 58¶
- AVR8_FAILURE_ILLEGAL_MEMORY_RANGE = 56¶
- AVR8_FAILURE_ILLEGAL_OCD_STATUS = 61¶
- AVR8_FAILURE_ILLEGAL_STATE = 50¶
- AVR8_FAILURE_ILLEGAL_VALUE = 57¶
- AVR8_FAILURE_INVALID_ADDRESS = 54¶
- AVR8_FAILURE_INVALID_ALIGNMENT = 55¶
- AVR8_FAILURE_INVALID_CLOCK_SPEED = 59¶
- AVR8_FAILURE_INVALID_CONFIG = 51¶
- AVR8_FAILURE_INVALID_MEMTYPE = 52¶
- AVR8_FAILURE_INVALID_PHYSICAL_STATE = 49¶
- AVR8_FAILURE_INVALID_SIZE = 53¶
- AVR8_FAILURE_JTAGM_ERROR = 18¶
- AVR8_FAILURE_JTAGM_INIT_ERROR = 17¶
- AVR8_FAILURE_JTAGM_TIMEOUT = 21¶
- AVR8_FAILURE_JTAGM_VERSION = 20¶
- AVR8_FAILURE_JTAG_BIT_BANGER_TIMEOUT = 22¶
- AVR8_FAILURE_JTAG_ERROR = 19¶
- AVR8_FAILURE_KEY_ERROR = 69¶
- AVR8_FAILURE_NOT_ATTACHED = 35¶
- AVR8_FAILURE_NOT_IMPLEMENTED = 145¶
- AVR8_FAILURE_NOT_SUPPORTED = 144¶
- AVR8_FAILURE_NO_DEVICE_FOUND = 32¶
- AVR8_FAILURE_NO_OCD_CONTROL = 80¶
- AVR8_FAILURE_NO_TARGET_POWER = 34¶
- AVR8_FAILURE_NO_VOUT_SET = 82¶
- AVR8_FAILURE_NVM_DISABLE = 65¶
- AVR8_FAILURE_NVM_ENABLE = 64¶
- AVR8_FAILURE_OCD_LOCKED = 68¶
- AVR8_FAILURE_OK = 0¶
- AVR8_FAILURE_PARITY_ERROR = 23¶
- AVR8_FAILURE_PC_READ_FAILED = 96¶
- AVR8_FAILURE_PDI_ENABLE = 27¶
- AVR8_FAILURE_PDI_TIMEOUT = 25¶
- AVR8_FAILURE_PLEASE_TOGGLE_POWER = 81¶
- AVR8_FAILURE_READ_ERROR = 112¶
- AVR8_FAILURE_REGISTER_READ_FAILED = 97¶
- AVR8_FAILURE_TIMEOUT = 60¶
- AVR8_FAILURE_TOO_MANY_BREAKPOINTS = 129¶
- AVR8_FAILURE_UNKNOWN = 255¶
- AVR8_FAILURE_VOUT_ERROR = 83¶
- AVR8_FAILURE_VTG_TOO_LOW_FOR_FEATURE = 84¶
- AVR8_FAILURE_WRITE_ERROR = 113¶
- AVR8_FAILURE_WRITE_TIMEOUT = 114¶
- AVR8_FUNC_DEBUGGING = 2¶
- AVR8_FUNC_NONE = 0¶
- AVR8_FUNC_PROGRAMMING = 1¶
- AVR8_MEMTYPE_APPL_FLASH = 192¶
- AVR8_MEMTYPE_APPL_FLASH_ATOMIC = 194¶
- AVR8_MEMTYPE_BOOT_FLASH = 193¶
- AVR8_MEMTYPE_BOOT_FLASH_ATOMIC = 195¶
- AVR8_MEMTYPE_BOOT_ROW = 200¶
- AVR8_MEMTYPE_CALIBRATION_SIGNATURE = 198¶
- AVR8_MEMTYPE_CAN = 182¶
- AVR8_MEMTYPE_CS = 208¶
- AVR8_MEMTYPE_EEPROM = 34¶
- AVR8_MEMTYPE_EEPROM_ATOMIC = 196¶
- AVR8_MEMTYPE_EEPROM_PAGE = 177¶
- AVR8_MEMTYPE_FLASH_PAGE = 176¶
- AVR8_MEMTYPE_FUSES = 178¶
- AVR8_MEMTYPE_IO_SHADOW = 48¶
- AVR8_MEMTYPE_LOCKBITS = 179¶
- AVR8_MEMTYPE_OCD = 209¶
- AVR8_MEMTYPE_OCD_PC = 20¶
- AVR8_MEMTYPE_OCD_SP = 24¶
- AVR8_MEMTYPE_OCD_SREG = 28¶
- AVR8_MEMTYPE_OSCCAL = 181¶
- AVR8_MEMTYPE_REGFILE = 184¶
- AVR8_MEMTYPE_SIB = 211¶
- AVR8_MEMTYPE_SIGNATURE = 180¶
- AVR8_MEMTYPE_SPM = 160¶
- AVR8_MEMTYPE_SRAM = 32¶
- AVR8_MEMTYPE_TBUS = 183¶
- AVR8_MEMTYPE_USER_SIGNATURE = 197¶
- AVR8_OPT_12V_UPDI_ENABLE = 6¶
- AVR8_OPT_CHIP_ERASE_TO_ENTER = 7¶
- AVR8_OPT_DISABLE_DBP = 1¶
- AVR8_OPT_ENABLE_IDR = 3¶
- AVR8_OPT_HV_UPDI_ENABLE = 6¶
- AVR8_OPT_POLL_INT = 4¶
- AVR8_OPT_POWER_NAP = 5¶
- AVR8_OPT_RUN_TIMERS = 0¶
- AVR8_PHY_DW_CLK_DIV = 16¶
- AVR8_PHY_INTERFACE = 0¶
- AVR8_PHY_INTF_DW = 5¶
- AVR8_PHY_INTF_JTAG = 4¶
- AVR8_PHY_INTF_NONE = 0¶
- AVR8_PHY_INTF_PDI = 6¶
- AVR8_PHY_INTF_PDI_1W = 8¶
- AVR8_PHY_INTF_PDI_3W = 10¶
- AVR8_PHY_JTAG_DAISY = 1¶
- AVR8_PHY_MEGA_DBG_CLK = 33¶
- AVR8_PHY_MEGA_PRG_CLK = 32¶
- AVR8_PHY_XM_JTAG_CLK = 48¶
- AVR8_PHY_XM_PDI_CLK = 49¶
- AVR8_TEST_TGT_RUNNING = 0¶
- AVR8_VARIANT_LOOPBACK = 0¶
- AVR8_VARIANT_MEGAOCD = 2¶
- AVR8_VARIANT_NONE = 255¶
- AVR8_VARIANT_TINYOCD = 1¶
- AVR8_VARIANT_TINYX = 5¶
- AVR8_VARIANT_UPDI = 5¶
- AVR8_VARIANT_XMEGA = 3¶
- CMD_AVR8_ACTIVATE_PHYSICAL = 16¶
- CMD_AVR8_ATTACH = 19¶
- CMD_AVR8_CRC = 36¶
- CMD_AVR8_DEACTIVATE_PHYSICAL = 17¶
- CMD_AVR8_DETACH = 20¶
- CMD_AVR8_DISABLE_DEBUGWIRE = 23¶
- CMD_AVR8_ERASE = 32¶
- CMD_AVR8_EXECUTE_PATCH = 112¶
- CMD_AVR8_GET = 2¶
- CMD_AVR8_GET_ID = 18¶
- CMD_AVR8_HW_BREAK_CLEAR = 65¶
- CMD_AVR8_HW_BREAK_SET = 64¶
- CMD_AVR8_MEMORY_READ = 33¶
- CMD_AVR8_MEMORY_READ_MASKED = 34¶
- CMD_AVR8_MEMORY_WRITE = 35¶
- CMD_AVR8_PAGE_ERASE = 80¶
- CMD_AVR8_PC_READ = 53¶
- CMD_AVR8_PC_WRITE = 54¶
- CMD_AVR8_PROG_MODE_ENTER = 21¶
- CMD_AVR8_PROG_MODE_LEAVE = 22¶
- CMD_AVR8_QUERY = 0¶
- CMD_AVR8_RESET = 48¶
- CMD_AVR8_RUN = 50¶
- CMD_AVR8_RUN_TO_ADDRESS = 51¶
- CMD_AVR8_SET = 1¶
- CMD_AVR8_STEP = 52¶
- CMD_AVR8_STOP = 49¶
- CMD_AVR8_SW_BREAK_CLEAR = 68¶
- CMD_AVR8_SW_BREAK_CLEAR_ALL = 69¶
- CMD_AVR8_SW_BREAK_SET = 67¶
- ERASE_APP = 1¶
- ERASE_APP_PAGE = 4¶
- ERASE_BOOT = 2¶
- ERASE_BOOT_PAGE = 5¶
- ERASE_CHIP = 0¶
- ERASE_EEPROM = 3¶
- ERASE_EEPROM_PAGE = 6¶
- ERASE_USERSIG = 7¶
- EVT_AVR8_BREAK = 64¶
- EVT_AVR8_BREAK_CAUSE = 5¶
- EVT_AVR8_BREAK_EVT_ID = 0¶
- EVT_AVR8_BREAK_EXT_INFO = 6¶
- EVT_AVR8_BREAK_PC = 1¶
- EVT_AVR8_IDR = 65¶
- RSP_AVR8_DATA = 132¶
- RSP_AVR8_FAILED = 160¶
- RSP_AVR8_LIST = 129¶
- RSP_AVR8_OK = 128¶
- RSP_AVR8_PC = 131¶
- UPDI_12V_NONE = 0¶
- UPDI_HV_AUTO_POWER_TOGGLE = 2¶
- UPDI_HV_NONE = 0¶
- UPDI_HV_SIMPLE_PULSE = 1¶
- UPDI_HV_USER_POWER_TOGGLE = 3¶
- activate_physical(use_reset=False)¶
Activates the physical interface
- Parameters:
use_reset – reset
- attach(do_break=False)¶
Attaches the debugger to the target
- Parameters:
do_break – break execution on attach?
- configure_daisy_chain(settings)¶
Sets the daisy-chain fields in the physical context
- Parameters:
settings – array of daisy-chain info
- deactivate_physical()¶
Deactivates the physical interface
- debugwire_disable()¶
Disables debugWIRE interface temporarily
- decode_break_event(event)¶
- Decodes a break event in JTAGICE3 format
BRK 0x40 version PC[0] PC[1] PC[2] PC[3] cause ext-info H ext-info L
- Parameters:
event – event information for parsing
- Returns:
Program Counter value if it is a break event, None otherwise
- detach()¶
Detaches the debugger from the target
- enter_progmode()¶
Enters programming mode
- erase(mode=0, address=0)¶
Erase target flash
- Parameters:
mode – flash erase mode to use
address – start address to erase from
- error_as_string(code)¶
Get the response error as a string (error code translated to descriptive string)
- Returns:
error code as descriptive string
- get_id()¶
Reads the device ID
- Returns:
device ID
- leave_progmode()¶
Exits programming mode
- memory_read(memtype, address, num_bytes)¶
Read memory form the target
- Parameters:
memtype – memory type (section)
address – start address
num_bytes – number of bytes
- Returns:
memory read
- memory_write(memtype, address, data)¶
Write memory to target
- Parameters:
memtype – memory type / region to access
address – start address
data – data to write
- program_counter_read()¶
Reads out the program counter
- Returns:
PC value
- program_counter_write(program_counter)¶
Writes the program counter
- Parameters:
program_counter – new program counter value
- regfile_read()¶
Reads out the AVR register file (R0::R31)
- Returns:
32 bytes of register file content as bytearray
- regfile_write(data)¶
Writes the AVR registe file (R0::R31)
- Parameters:
data – 32 byte register file content as bytearray
- Raises:
ValueError – if 32 bytes are not given
- reset()¶
Resets the core and holds it in reset
- run()¶
Resumes core execution
- run_to(address)¶
Runs to the given address.
A BREAK event will be generated when/if it reaches the address.
- Parameters:
address – address to run to
- set_function(debugger_function)¶
Sets the function field in the config context
- Parameters:
debugger_function – function of this session (prog / debug)
- set_interface(interface)¶
Sets the function field in the physical context
- Parameters:
interface – physical interface setting
- set_variant(variant)¶
Sets the variant field in the config context
- Parameters:
variant – type of device
- software_breakpoint_clear(address)¶
Removes a software breakpoint from the given address
- Parameters:
address – breakpoint address
- software_breakpoint_clear_all()¶
Clears all software breakpoints
- software_breakpoint_set(address)¶
Insert a software breakpoint at the given address
- Parameters:
address – breakpoint address
- step()¶
Executes a single-step on the core.
A BREAK event will be generated when it has completed. This behaviour originates from previous debuggers which could do C level stepping which took time.
- stop()¶
Requests a core halt.
A BREAK even will be generated when it has successfully stopped.
- write_device_data(data)¶
Write device info into the device context
- Parameters:
data – device data content
pyedbglib.protocols.avr8protocolerrors¶
Mapping AVR8protocol error codes to more human friendly strings
pyedbglib.protocols.avrcmsisdap¶
CMSIS-DAP wrapper for custom commands (using vendor extensions) This mechanism is used to pass JTAGICE3-style commands for AVR devices over the CMSIS-DAP interface
- class pyedbglib.protocols.avrcmsisdap.AvrCommand(transport, no_timeouts=False)¶
Bases:
CmsisDapUnit
Wraps AVR command and responses
- AVR_CMD_COMMAND_HEADER_CMD = 0¶
- AVR_CMD_COMMAND_HEADER_FRAGMENT_NUMBER = 1¶
- AVR_CMD_COMMAND_HEADER_PAYLOAD_START = 4¶
- AVR_CMD_COMMAND_HEADER_SIZE = 2¶
- AVR_CMD_RESPONSE_FRAGMENT_CODE = 1¶
- AVR_CMD_RESPONSE_HEADER_CMD = 0¶
- AVR_COMMAND = 128¶
- AVR_COMMAND_RESPONSE_MAX_PAYLOAD = 512¶
- AVR_EVENT = 130¶
- AVR_EVENT_COMMAND_HEADER_EVT = 0¶
- AVR_EVENT_RESPONSE_HEADER_EVT = 0¶
- AVR_EVENT_RESPONSE_HEADER_PAYLOAD_START = 3¶
- AVR_EVENT_RESPONSE_HEADER_SIZE = 1¶
- AVR_EVENT_RESPONSE_MAX_SIZE = 61¶
- AVR_EVENT_RESPONSE_MIN_SIZE = 6¶
- AVR_FINAL_FRAGMENT = 1¶
- AVR_MORE_FRAGMENTS = 0¶
- AVR_RESPONSE = 129¶
- AVR_RETRY_DELAY_MS = 50¶
- AVR_RSP_COMMAND_HEADER_RSP = 0¶
- AVR_RSP_RESPONSE_HEADER_FRAGMENT_NUMBER = 1¶
- AVR_RSP_RESPONSE_HEADER_PAYLOAD_START = 4¶
- AVR_RSP_RESPONSE_HEADER_RSP = 0¶
- AVR_RSP_RESPONSE_HEADER_SIZE = 2¶
- avr_command_response(command)¶
Sends an AVR command and receives a response
- Parameters:
command – Command bytes to send
- Returns:
Response bytes received
- poll_events()¶
Polling for events from AVRs
- Returns:
bytearray containing a received event, or None
- exception pyedbglib.protocols.avrcmsisdap.AvrCommandError¶
Bases:
Exception
Exception type for AVR command-response wrapping
pyedbglib.protocols.avrispprotocol¶
Simple wrapper for AVR ISP programming protocol over JTAGICE3 transport
- Important note:
The AVR ISP protocol dates back to very early AVR devices. Many of the parametric information included in the protocol metadata applies only to those old devices. This is not a universal implementation, and does not draw any such information from the XML descriptions included in Atmel Studio (ATDF) and MPLABX. It does work on ATmega328P and close relatives.
TODO: use SPI CLOCK settings TODO: add more memory types
- class pyedbglib.protocols.avrispprotocol.AvrIspProtocol(transport)¶
Bases:
Jtagice3Protocol
Protocol wrapper
- AVR_ERASE_COMMAND = [172, 128]¶
- AVR_ERASE_DELAY = 45¶
- AVR_ERASE_POLLMODE = 1¶
- AVR_LOAD_PAGE_COMMAND = 64¶
- AVR_POLL_VALUE = 83¶
- AVR_POST_LEAVE_DELAY_MS = 1¶
- AVR_PRE_LEAVE_DELAY_MS = 1¶
- AVR_PROG_ENABLE_COMMAND = [172, 83, 0, 0]¶
- AVR_READ_CALIBRATION_BYTE_COMMAND = [56, 0, 0, 0]¶
- AVR_READ_EEPROM_COMMAND = 160¶
- AVR_READ_FLASH_COMMAND = 32¶
- AVR_READ_FUSE_COMMANDS = [[80, 0, 0, 0], [88, 8, 0, 0], [80, 8, 0, 0]]¶
- AVR_READ_LOCK_COMMAND = [88, 0, 0, 0]¶
- AVR_READ_SIGNATURE_COMMAND = [48, 0, 0, 0]¶
- AVR_REPLY_OFFSET = 3¶
- AVR_WRITE_FUSE_COMMANDS = [[172, 160, 0], [172, 168, 0], [172, 164, 0]]¶
- AVR_WRITE_LOCK_COMMAND = [172, 224, 0]¶
- AVR_WRITE_PAGE_COMMAND = 76¶
- BYTE_DELAY = 0¶
- FUNC_DELAY = 25¶
- PIN_DELAY = 100¶
- SPI_CMD_CHIP_ERASE = 18¶
- SPI_CMD_ENTER_PROGMODE = 16¶
- SPI_CMD_GET_BAUD = 30¶
- SPI_CMD_LEAVE_PROGMODE = 17¶
- SPI_CMD_LOAD_ADDRESS = 6¶
- SPI_CMD_PROGRAM_EEPROM = 21¶
- SPI_CMD_PROGRAM_FLASH = 19¶
- SPI_CMD_PROGRAM_FUSE = 23¶
- SPI_CMD_PROGRAM_LOCK = 25¶
- SPI_CMD_READ_EEPROM = 22¶
- SPI_CMD_READ_FLASH = 20¶
- SPI_CMD_READ_FUSE = 24¶
- SPI_CMD_READ_LOCK = 26¶
- SPI_CMD_READ_OSCCAL = 28¶
- SPI_CMD_READ_SIGNATURE = 27¶
- SPI_CMD_SET_BAUD = 29¶
- SPI_CMD_SIGN_ON = 1¶
- SPI_STATUS_BAUD_INVALID = 205¶
- SPI_STATUS_CLOCK_ERROR = 204¶
- SPI_STATUS_CMD_FAILED = 192¶
- SPI_STATUS_CMD_OK = 0¶
- SPI_STATUS_CMD_TOUT = 128¶
- SPI_STATUS_CMD_UNKNOWN = 201¶
- SPI_STATUS_PHY_ERROR = 203¶
- SPI_STATUS_RDY_BSY_TOUT = 129¶
- SYNC_LOOPS = 32¶
- enter_progmode()¶
Enter programming mode
- erase()¶
Chip erase
- get_id()¶
Read device ID
- leave_progmode()¶
Leave programming mode
- load_address(address)¶
Loads the address pointer (stored in FW)
- read_calibration_bytes(offset, numbytes)¶
Read device calibration bytes
- Parameters:
offset – offset to read from
numbytes – number of bytes to read
- read_eeprom_chunk(byte_address, numbytes)¶
Reads a chunk of eeprom memory
- Parameters:
byte_address – start address
numbytes – number of bytes
- Returns:
data read
- read_flash_chunk(byte_address, numbytes)¶
Reads a chunk of flash memory
- Parameters:
byte_address – start address
numbytes – number of bytes
- Returns:
data read
- read_fuse_byte(offset)¶
Read fuse bytes
- Parameters:
offset – offset to read from
- read_lockbits()¶
Read lockbits
- read_signature_bytes(offset, numbytes)¶
Read device signature bytes
- Parameters:
offset – offset to read from
numbytes – number of bytes to read
- write_eeprom_page(byte_address, data)¶
Writes a page of eeprom
- Parameters:
byte_address – start address
data – data to write
- write_flash_page(byte_address, data)¶
Writes a page of flash
- Parameters:
byte_address – start address
data – data to write
- write_fuse_byte(offset, data)¶
Write fuse byte
- Parameters:
offset – offset to write to
data – data value to write
- write_lockbits(data)¶
Write lockbits
- Parameters:
data – data value to write
- exception pyedbglib.protocols.avrispprotocol.AvrIspProtocolError¶
Bases:
Exception
Exception type for AVRISP command-response wrapping
pyedbglib.protocols.cmsisdap¶
CMSIS DAP access protocol
Interfaces with CMSIS-DAP standard debuggers over HID
- class pyedbglib.protocols.cmsisdap.CmsisDapDebugger(transport)¶
Bases:
CmsisDapUnit
ARM-specific cmsis-dap implementation
- CDBGPWRUPACK = 536870912¶
- CDBGPWRUPREQ = 268435456¶
- CDBGRSTACK = 134217728¶
- CDBGRSTREQ = 67108864¶
- CM0P_DAPID = 197203063¶
- CSW_16BIT = 1¶
- CSW_32BIT = 2¶
- CSW_8BIT = 0¶
- CSW_ADDRINC_OFF = 0¶
- CSW_ADDRINC_ON = 16¶
- CSYSPWRUPACK = 2147483648¶
- CSYSPWRUPREQ = 1073741824¶
- DAP_SWJ_SWCLK_TCK = 1¶
- DAP_SWJ_SWDIO_TMS = 2¶
- DAP_SWJ_TDI = 4¶
- DAP_SWJ_TDO = 8¶
- DAP_SWJ_nRESET = 128¶
- DAP_SWJ_nTRST = 32¶
- DAP_TRANSFER_A2 = 4¶
- DAP_TRANSFER_A3 = 8¶
- DAP_TRANSFER_APnDP = 1¶
- DAP_TRANSFER_ERROR = 8¶
- DAP_TRANSFER_FAULT = 4¶
- DAP_TRANSFER_INVALID = 0¶
- DAP_TRANSFER_MATCH_MASK = 32¶
- DAP_TRANSFER_MATCH_VALUE = 16¶
- DAP_TRANSFER_MISMATCH = 16¶
- DAP_TRANSFER_OK = 1¶
- DAP_TRANSFER_RnW = 2¶
- DAP_TRANSFER_WAIT = 2¶
- DP_ABORT = 0¶
- DP_CTRL_STAT = 4¶
- DP_IDCODE = 0¶
- DP_RDBUFF = 12¶
- DP_RESEND = 8¶
- DP_SELECT = 8¶
- DP_WCR = 4¶
- JTAG_ABORT = 8¶
- JTAG_APACC = 11¶
- JTAG_BYPASS = 15¶
- JTAG_DPACC = 10¶
- JTAG_IDCODE = 14¶
- ORUNDETECT = 1¶
- READOK = 64¶
- STICKYCMP = 16¶
- STICKYERR = 32¶
- STICKYORUN = 2¶
- SWD_AP_CSW = 0¶
- SWD_AP_DRW = 12¶
- SWD_AP_TAR = 4¶
- TAR_MAX = 1024¶
- TRNMODE = 4¶
- WDATAERR = 128¶
- dap_read_idcode()¶
Reads the IDCODE from the SWD DP
- dap_read_reg(reg)¶
Reads a DAP AP/DP register
- Parameters:
reg – register to read
- Raises:
PyedbglibError – if the read fails
- dap_reset_target()¶
Reset the target using the DAP
- Raises:
PyedbglibError – if the reset fails
- dap_swd_configure(cfg)¶
Configures the SWD interface
- Parameters:
cfg – turnaround and data phase config parameters
- Raises:
PyedbglibError – if the configuration fails
- dap_swj_clock(clock)¶
Sets up the SWD clock timing
- Parameters:
clock – clock value in Hz
- Raises:
PyedbglibError – if the configuration fails
- dap_target_init()¶
Configures the DAP for use
- dap_transfer_configure(idle, count, retry)¶
Configures SWD transfers
- Parameters:
idle – idle cycles
count – retry count
retry – match retry value
- Raises:
PyedbglibError – if the configuration fails
- dap_write_reg(reg, value)¶
Writes a DAP AP/DP register
- Parameters:
reg – register to write
value – value to write
- Raises:
PyedbglibError – if the write fails
- init_swj()¶
Magic sequence to execute on pins to enable SWD in case of JTAG-default parts
- Raises:
PyedbglibError – if the sequence execution fails
- static multiple_of_four(x)¶
4 byte boundary
- read_block(address, numbytes)¶
Reads a block from the device memory bus
- Parameters:
address – byte address
numbytes – number of bytes
- Raises:
PyedbglibError – if the transfer fails
- read_word(address)¶
Reads a word from the device memory bus
- Parameters:
address – address to read
- write_block(address, data)¶
Writes a block to the device memory bus
- Parameters:
address – byte address
data – data
- write_word(address, data)¶
Writes a word to the device memory bus
- Parameters:
address – address to write
data – data to write
- class pyedbglib.protocols.cmsisdap.CmsisDapSamDebugger(transport)¶
Bases:
CmsisDapDebugger
SAM specific CMSIS-DAP debugger
- dap_reset_ext(extend=False)¶
Reset the target using the hardware
Some SAM devices (for example SAMDx and SAMLx) have an additional ‘reset extension’ capability which is not part of the CMSIS-DAP standard. It is used to prevent the device from running after reset and then overriding its SWD IO. The procedure is simply to hold SW_CLK low while releasing /RESET. This is done here using SWJ pins function IF the extend argument is set.
- Parameters:
extend – boolean flag to extend reset
- class pyedbglib.protocols.cmsisdap.CmsisDapUnit(transport)¶
Bases:
DapWrapper
Communicates with a DAP via standard CMSIS-DAP firmware stack over HID transport
- DAP_ERROR = 255¶
- DAP_ID_BOARD_NAME = 8¶
- DAP_ID_BOARD_VENDOR = 7¶
- DAP_ID_CAPABILITIES = 240¶
- DAP_ID_DEVICE_NAME = 6¶
- DAP_ID_DEVICE_VENDOR = 5¶
- DAP_ID_FW_VER = 4¶
- DAP_ID_PACKET_COUNT = 254¶
- DAP_ID_PACKET_SIZE = 255¶
- DAP_ID_PRODUCT = 2¶
- DAP_ID_PRODUCT_FW_VER = 9¶
- DAP_ID_SER_NUM = 3¶
- DAP_ID_VENDOR = 1¶
- DAP_OK = 0¶
- DAP_PORT_AUTODETECT = 0¶
- DAP_PORT_DISABLED = 0¶
- DAP_PORT_JTAG = 2¶
- DAP_PORT_SWD = 1¶
- ID_DAP_Connect = 2¶
- ID_DAP_Delay = 9¶
- ID_DAP_Disconnect = 3¶
- ID_DAP_HostStatus = 1¶
- ID_DAP_Info = 0¶
- ID_DAP_JTAG_Configure = 21¶
- ID_DAP_JTAG_IDCODE = 22¶
- ID_DAP_JTAG_Sequence = 20¶
- ID_DAP_ResetTarget = 10¶
- ID_DAP_SWD_Configure = 19¶
- ID_DAP_SWJ_Clock = 17¶
- ID_DAP_SWJ_Pins = 16¶
- ID_DAP_SWJ_Sequence = 18¶
- ID_DAP_Transfer = 5¶
- ID_DAP_TransferAbort = 7¶
- ID_DAP_TransferBlock = 6¶
- ID_DAP_TransferConfigure = 4¶
- ID_DAP_WriteABORT = 8¶
- dap_connect()¶
Connects to the DAP
- dap_disconnect()¶
Disconnects from the DAP
- dap_info()¶
Collects the dap info
- dap_led(index, state)¶
Operates the LED
- Parameters:
index – which led
state – what to do with it
pyedbglib.protocols.configprotocol¶
Kit configuration programming protocol layer This protocol is used in manufacturing to provision Curiosity Nano kits. It is not intended for end-user usage - for kit customisation use the pydebuggerconfig package.
- class pyedbglib.protocols.configprotocol.ConfigProtocol(transport)¶
Bases:
DapWrapper
Transport layer for programming and reading device config
- GET_CONFIG = 131¶
- RSP_OK = 0¶
- SET_CONFIG = 132¶
- fix(fix_data)¶
Checks if the incoming data is OK to send
- Parameters:
fix_data – Input data
- Returns:
list of valid data to send
- get_config(offset, byte_count)¶
Low level function to read configuration data from target.
- Parameters:
offset – Offset to read from
byte_count – Number of bytes to read
- Returns:
Response byte + data
- read_config_block(factory=False)¶
Read the configuration block
- Parameters:
factory – Default false, use true for factory programming
- Returns:
Configuration from the target
- read_device_data_block()¶
Read the device data block
- Returns:
Device data block
- set_config(offset, data)¶
Block programming of configuration data
- Parameters:
offset – Offset to start programming
data – Configuration data to program
- set_transport(transport)¶
Set the transport for the protocol if not set at init
- Parameters:
transport – Transport to use
- tool_check()¶
Check if transport has been initialised
- Raises:
IOError – if not initialised
- write_config_block(config, factory=False)¶
Read the configuration block
- Parameters:
config – Configuration data to be written to target
factory – Use true to program the factory section
- write_device_data_block(device_data)¶
Write the device data block
- Parameters:
device_data – Device data to write
- exception pyedbglib.protocols.configprotocol.ConfigProtocolResponseError(msg, code)¶
Bases:
Exception
Exception type for Config protocol responses
- pyedbglib.protocols.configprotocol.create_blank_config_block()¶
Create a blank config block
- Returns:
Blank config block
- pyedbglib.protocols.configprotocol.create_blank_device_data_block()¶
Create a blank device data block
- Returns:
Blank device data block
pyedbglib.protocols.dapcommand¶
DAP information wrapper for any CMSIS-DAP tool
- class pyedbglib.protocols.dapcommand.DapCommand(transport)¶
Bases:
DapWrapper
DAP information wrapper for any CMSIS-DAP tool
- get_all_info()¶
Fetches a set of useful information from the DAP
- Returns:
dictionary of parameters
- info(dap_id)¶
Fetch specific DAP information given by dap_id
- Parameters:
dap_id – code for different DAP_ID_* fields
- Returns:
bytearray with dap information
pyedbglib.protocols.dapwrapper¶
Wrapper for any protocol over CMSIS-DAP
- class pyedbglib.protocols.dapwrapper.DapWrapper(transport)¶
Bases:
object
Base class for any CMSIS-DAP protocol wrapper
- dap_command_read()¶
Receive data
- Returns:
data received
- dap_command_response(packet)¶
Send a command, receive a response
- Parameters:
packet – bytes to send
- Returns:
response received
- dap_command_write(packet)¶
Send a packet
- Parameters:
packet – packed data to sent
- Returns:
bytes sent
pyedbglib.protocols.edbgprotocol¶
Implements EDBG Protocol, a sub-protocol in the JTAGICE3 family of protocols.
- class pyedbglib.protocols.edbgprotocol.EdbgProtocol(transport)¶
Bases:
Jtagice3Protocol
Implements EDBG protocol functionality on the JTAGICE3 protocol family
- AVR_GET_CONFIG = 131¶
- CMD_EDBG_GET = 2¶
- CMD_EDBG_PROGRAM_ID_CHIP = 80¶
- CMD_EDBG_QUERY = 0¶
- CMD_EDBG_READ_ID_CHIP = 126¶
- CMD_EDBG_REFRESH_ID_CHIP = 81¶
- CMD_EDBG_SET = 1¶
- EDBG_CONFIG_KIT_DATA = 32¶
Mapping EDBG error codes to more human friendly strings
- EDBG_CONTROL_EXT_PROG = 1¶
- EDBG_CONTROL_LED_USAGE = 0¶
- EDBG_CONTROL_TARGET_POWER = 16¶
- EDBG_CTXT_CONTROL = 0¶
- EDBG_ERRORS = {0: 'SUCCESS'}¶
Mapping SHA204 response codes to more human friendly strings
- EDBG_QUERY_COMMANDS = 0¶
- RESPONSE_CODE = {0: 'SHA204_SUCCESS', 210: 'SHA204_PARSE_ERROR', 211: 'SHA204_CMD_FAIL', 212: 'SHA204_STATUS_CRC', 224: 'SHA204_FUNC_FAIL', 226: 'SHA204_BAD_PARAM', 228: 'SHA204_INVALID_SIZE', 229: 'SHA204_BAD_CRC', 230: 'SHA204_RX_FAIL', 231: 'SHA204_RX_NO_RESPONSE', 232: 'SHA204_RESYNC_WITH_WAKEUP', 240: 'SHA204_COMM_FAIL', 241: 'SHA204_TIMEOUT', 250: 'ID_DATA_LOCKED', 251: 'ID_CONFIG_LOCKED', 252: 'ID_INVALID_SLOT', 253: 'ID_DATA_PARSING_ERROR', 254: 'ID_DATA_NOT_EQUAL'}¶
- RSP_EDBG_DATA = 132¶
- RSP_EDBG_FAILED = 160¶
- RSP_EDBG_LIST = 129¶
- RSP_EDBG_OK = 128¶
- check_command_exists(command)¶
Check if command is supported
Runs a query to the tool to get a list of supported commands, then looks for the input command in the list. If not supported, it raises NotImplementedError.
- Parameters:
command – The command to test.
- error_as_string(code)¶
Get the response error as a string (error code translated to descriptive string)
- Parameters:
code – error code
- Returns:
error code as descriptive string
- program_id_chip(id_number, data)¶
Program the connected ID device located at the id_number with data.
- Parameters:
id_number – Extension header ID number (Range 1 - 16)
data – A 64-byte data array to be programmed
- Returns:
Response status from the programming
- read_edbg_extra_info()¶
Reads the kit info flash page, containing board specific data
- Returns:
A data array containing the kit info
- read_id_chip(id_number)¶
Reads the ID information from the ID chip connected at id_number
- Parameters:
id_number – Extension header ID number (Range 1 - 16)
- Returns:
A 64-byte data array
- refresh_id_chip()¶
Forces a refresh of the list of connected ID devices.
- Raises:
IOError – if an invalid response is received
- response_as_string(code)¶
Get the response code as a string (response code translated to descriptive string)
- Parameters:
code – response code
- Returns:
error code as descriptive string
pyedbglib.protocols.housekeepingprotocol¶
Implements Housekeeping Protocol, a sub-protocol in the JTAGICE3 family of protocols.
- class pyedbglib.protocols.housekeepingprotocol.Jtagice3HousekeepingProtocol(transport)¶
Bases:
Jtagice3Protocol
Implements housekeeping functionality on the JTAGICE3 protocol family
- CMD_HOUSEKEEPING_END_SESSION = 17¶
- CMD_HOUSEKEEPING_FW_UPGRADE = 80¶
- CMD_HOUSEKEEPING_START_SESSION = 16¶
- HOUSEKEEPING_ABILITY_HV_UPDI_ENABLE = 16¶
- HOUSEKEEPING_ABILITY_RESET_EXTENSION = 0¶
- HOUSEKEEPING_ANALOG_VTG_BUF = 1¶
- HOUSEKEEPING_ANALOG_VTREF = 0¶
- HOUSEKEEPING_ANALOG_VUSB = 2¶
- HOUSEKEEPING_CONFIG_AUX_MCU_FW_MAJ = 32¶
- HOUSEKEEPING_CONFIG_AUX_MCU_FW_MIN = 33¶
- HOUSEKEEPING_CONFIG_AUX_MCU_FW_REV = 34¶
- HOUSEKEEPING_CONFIG_BLDR_MAJ = 6¶
- HOUSEKEEPING_CONFIG_BLDR_MIN = 7¶
- HOUSEKEEPING_CONFIG_BUILD = 3¶
- HOUSEKEEPING_CONFIG_CHIP = 5¶
- HOUSEKEEPING_CONFIG_DEBUG_BUILD = 8¶
- HOUSEKEEPING_CONFIG_FIRMWARE_IMAGE = 9¶
- HOUSEKEEPING_CONFIG_FPGA_FW_MAJ = 16¶
- HOUSEKEEPING_CONFIG_FPGA_FW_MIN = 17¶
- HOUSEKEEPING_CONFIG_FPGA_FW_REV = 18¶
- HOUSEKEEPING_CONFIG_FWREV_MAJ = 1¶
- HOUSEKEEPING_CONFIG_FWREV_MIN = 2¶
- HOUSEKEEPING_CONFIG_HWREV = 0¶
- HOUSEKEEPING_CONTEXT_ANALOG = 1¶
- HOUSEKEEPING_CONTEXT_CONFIG = 0¶
- HOUSEKEEPING_CONTEXT_DIAGNOSTICS = 129¶
- HOUSEKEEPING_CONTEXT_STATEMENT = 2¶
- HOUSEKEEPING_CONTEXT_STATISTICS = 128¶
- HOUSEKEEPING_CONTEXT_USB = 3¶
- HOUSEKEEPING_DIAGNOSTICS_BOD_CTRL = 1¶
- HOUSEKEEPING_DIAGNOSTICS_CPU_CLK = 6¶
- HOUSEKEEPING_DIAGNOSTICS_RESET_CAUSE = 0¶
- HOUSEKEEPING_HOST_ID = 2¶
- HOUSEKEEPING_HOST_REV = 3¶
- HOUSEKEEPING_MODULE_VER_AW = 5¶
- HOUSEKEEPING_MODULE_VER_JTAG = 4¶
- HOUSEKEEPING_QUERY_ANALOG_CHANNELS = 1¶
- HOUSEKEEPING_QUERY_COMMANDS = 0¶
- HOUSEKEEPING_QUERY_SPECIAL_ABILITIES = 2¶
- HOUSEKEEPING_TSUP_VOLTAGE = 32¶
- HOUSEKEEPING_USB_EP_SIZE_CDC = 17¶
- HOUSEKEEPING_USB_EP_SIZE_HID = 16¶
- HOUSEKEEPING_USB_MAX_READ = 0¶
- HOUSEKEEPING_USB_MAX_WRITE = 1¶
- end_session(reset_tool=False)¶
Ends a session with the debugger (sign-off)
- Parameters:
reset_tool – resets the hardware
- enter_upgrade_mode(key=829586448)¶
Puts the debugger into firmware upgrade mode
- Parameters:
key – upgrade key
- list_supported_commands()¶
Uses the query interface to list all supported commands
- read_version_info()¶
Reads version info from the debugger
- start_session()¶
Starts a session with the debugger (sign-on)
pyedbglib.protocols.jtagice3protocol¶
JTAGICE3 protocol mappings
- class pyedbglib.protocols.jtagice3protocol.Jtagice3Command(transport, handler)¶
Bases:
AvrCommand
Sends a “JTAGICE3” command frame, and received a response
- JTAGICE3 protocol header is formatted:
JTAGICE3_TOKEN 0x0E PROTOCOL_VERSION 0 SEQUENCE_NUMBER_L SEQUENCE_NUMBER_H HANDLER_ID PAYLOAD
- Response format is:
JTAGICE3_TOKEN 0x0E SEQUENCE_NUMBER_L echo SEQUENCE_NUMBER_H echo HANDLER_ID PAYLOAD
- EVENT_HANDLER_IDS = [1, 18]¶
- HANDLER_AVR32_GENERIC = 19¶
- HANDLER_AVR8_GENERIC = 18¶
- HANDLER_COPROCESSOR = 33¶
- HANDLER_DISCOVERY = 0¶
- HANDLER_EDBG = 32¶
- HANDLER_HOUSEKEEPING = 1¶
- HANDLER_POWER = 34¶
- HANDLER_SELFTEST = 129¶
- HANDLER_SPI = 17¶
- HANDLER_TPI = 20¶
- JTAGICE3_HEADER_COMMAND_HANDLER_ID = 4¶
- JTAGICE3_HEADER_COMMAND_PAYLOAD_START = 5¶
- JTAGICE3_HEADER_COMMAND_PROTOCOL_VERSION = 1¶
- JTAGICE3_HEADER_COMMAND_SEQUENCE = 2¶
- JTAGICE3_HEADER_COMMAND_SOF_TOKEN = 0¶
- JTAGICE3_HEADER_EVENT_HANDLER_ID = 4¶
- JTAGICE3_HEADER_EVENT_PAYLOAD_START = 5¶
- JTAGICE3_HEADER_EVENT_PROTOCOL_VERSION = 1¶
- JTAGICE3_HEADER_EVENT_SEQUENCE = 2¶
- JTAGICE3_HEADER_EVENT_SOF_TOKEN = 0¶
- JTAGICE3_HEADER_RESPONSE_HANDLER_ID = 3¶
- JTAGICE3_HEADER_RESPONSE_PAYLOAD_START = 4¶
- JTAGICE3_HEADER_RESPONSE_SEQUENCE = 1¶
- JTAGICE3_HEADER_RESPONSE_SOF_TOKEN = 0¶
- JTAGICE3_PROTOCOL_VERSION = 0¶
- JTAGICE3_TOKEN = 14¶
- jtagice3_command_response(command)¶
Sends a JTAGICE3 command and receives the corresponding response, and validates it
- Parameters:
command – bytearray command to send
- jtagice3_command_response_raw(command)¶
Sends a JTAGICE3 command and receives the corresponding response
- Parameters:
command – bytearray command to send
- validate_response(response)¶
Validates the response form the debugger
- Parameters:
response – raw response bytes
- Raises:
PyedbglibError – if validation fails
- class pyedbglib.protocols.jtagice3protocol.Jtagice3Protocol(transport, handler, supports_trailing_status=True)¶
Bases:
Jtagice3Command
Base class for all protocols in the JTAGICE3 family.
All sub-protocols support query, get and set commands.
- CMD_GET = 2¶
- CMD_QUERY = 0¶
- CMD_SET = 1¶
- CMD_VERSION0 = 0¶
- CMD_VERSION1 = 1¶
- FAILURE_OK = 0¶
- JTAGICE3_ERRORS = {0: 'SUCCESS'}¶
- PROTOCOL_DATA = 132¶
- PROTOCOL_FAILED = 160¶
- PROTOCOL_HEADER_RESPONSE_ID = 0¶
- PROTOCOL_HEADER_RESPONSE_PAYLOAD = 2¶
- PROTOCOL_HEADER_RESPONSE_VERSION = 1¶
- PROTOCOL_LIST = 129¶
- PROTOCOL_OK = 128¶
- SETGET_FAILURE_HANDLER_ERROR = 48¶
Mapping JTAGICE3 error codes to more human friendly strings
- SETGET_FAILURE_ILLEGAL_STATE = 33¶
- SETGET_FAILURE_INVALID_CLOCK_SPEED = 32¶
- SETGET_FAILURE_INVALID_VALUE = 35¶
- SETGET_FAILURE_JTAGM_INIT_ERROR = 34¶
- SETGET_FAILURE_NOT_IMPLEMENTED = 16¶
- SETGET_FAILURE_NOT_SUPPORTED = 17¶
- SETGET_FAILURE_OK = 0¶
- check_response(response, expected=None)¶
Checks the response for known errors
- Parameters:
response – response bytes
expected – expected response
- Returns:
data from response
- error_as_string(code)¶
Get the response error as a string (error code translated to descriptive string)
- Parameters:
code – error code
- Returns:
error code as descriptive string
- get_byte(context, offset)¶
Get a single-byte parameter
- Parameters:
context – context (address) to set
offset – offset address to set
- Returns:
value read
- get_le16(context, offset)¶
Get a little-endian 16-bit parameter
- Parameters:
context – context (address) to set
offset – offset address to set
- Returns:
value read
- get_le32(context, offset)¶
Get a little-endian 32-bit parameter
- Parameters:
context – context (address) to set
offset – offset address to set
- Returns:
value read
- peel_response(response, expected=None)¶
Process the response, extracting error codes and data
- Parameters:
response – raw response bytes
expected – expected response
- Returns:
status, data
- poll_events()¶
Polls for JTAGICE3 protocol events
- Events are framed as:
SOF 0x0E version sequence H sequence L HANDLER ID [n] * PAYLOAD
- Returns:
bytearray containing a received event, or None
- query(context)¶
Queries functionality using the QUERY API
- Parameters:
context – Query context
- Returns:
List of supported entries
- Raises:
PyedbglibError – if the query fails
- set_byte(context, offset, value)¶
Sets a single byte parameter
- Parameters:
context – context (address) to set
offset – offset address to set
value – value to set
- set_le16(context, offset, value)¶
Sets a little-endian 16-bit parameter
- Parameters:
context – context (address) to set
offset – offset address to set
value – value to set
- set_le32(context, offset, value)¶
Sets a little-endian 32-bit parameter
- Parameters:
context – context (address) to set
offset – offset address to set
value – value to set
- exception pyedbglib.protocols.jtagice3protocol.Jtagice3ResponseError(msg, code)¶
Bases:
Exception
Exception type for JTAGICE3 responses
pyedbglib.protocols.selftestprotocol¶
Implements SelftestProtocol, a sub-protocol in the JTAGICE3 family of protocols.
- class pyedbglib.protocols.selftestprotocol.SelftestProtocol(transport)¶
Bases:
Jtagice3Protocol
Implementation of the tool selftest protocol. This protocol is used for kit production and firmware testing purposes. Not all tools support all commands.
- CMD_SELFTEST_DELAY_MS = 17¶
- CMD_SELFTEST_DELAY_S = 16¶
- CMD_SELFTEST_DELAY_US = 18¶
- CMD_SELFTEST_DGI_PIN_RAW_READ = 32¶
- CMD_SELFTEST_PLATFORM = 240¶
- CMD_SELFTEST_SHORT_DELAY = 19¶
- CMD_SELFTEST_TIMEOUT_MS = 0¶
- CMD_SELFTEST_TIMER_EXPIRED = 2¶
- CMD_SELFTEST_TIMER_START = 1¶
- HANDLER_SELFTEST = 129¶
- RSP_SELFTEST_DATA = 132¶
- RSP_SELFTEST_FAILED = 160¶
- RSP_SELFTEST_FAILED_WITH_DATA = 161¶
- RSP_SELFTEST_LIST = 129¶
- RSP_SELFTEST_OK = 128¶
- SELFTEST_DGI_PINS = {0: 'DGI_SPI_MOSI', 1: 'DGI_SPI_MISO', 2: 'DGI_SPI_SCK', 3: 'DGI_SPI_SS', 4: 'DGI_USART_TX', 5: 'DGI_USART_RX', 6: 'DGI_USART_CLK', 7: 'DGI_I2C_DATA', 8: 'DGI_I2C_CLK', 9: 'CDC_TX', 10: 'CDC_RX', 11: 'DGI_GPIO0', 12: 'DGI_GPIO1', 13: 'DGI_GPIO2', 14: 'DGI_GPIO3'}¶
- SELFTEST_FAILED_INVALID_PARAMETER_VALUE = 19¶
- SELFTEST_FAILED_NOT_SUPPORTED = 16¶
- SELFTEST_FAILED_OK = 0¶
- VERSION0 = 0¶
- selftest_delay_ms(delay_ms)¶
Issue a delay of delay_ms milliseconds
- Parameters:
delay_ms – Delay value in milliseconds. Max is 2^16 - 1 (65535)
- selftest_delay_s(delay_s)¶
Issue a delay of delay_s seconds
- Parameters:
delay_s – Delay value in seconds. Max is (2^16 - 1) / 1000 (65)
- selftest_delay_us(delay_us)¶
Issue a delay of delay_us microseconds
- Parameters:
delay_us – Delay value in microseconds. Max is 2^32 - 1 (4294967295)
- selftest_short_delay()¶
Issue a delay of 2s generated using loads of the shortest delay function available in the tool
- selftest_timeout_ms(timeout_ms, counter_value=0)¶
Test timer timeout
This function starts a timer with the given timeout value and returns when the timer has expired. Alternatively the timer counter value can be overridden by providing a counter_value value >0
- Parameters:
timeout_ms – Timeout value in milliseconds
counter_value – Value to be written to timer counter register before timer is started. A value of 0 means skip writing any value. The counter_value can be used to test overflow situations
- selftest_timer_expired(timer_id)¶
Check if a timer has expired
- Parameters:
timer_id – ID of timer to check
- Returns:
True if timer has expired, False if not
- selftest_timer_start(timer_id, timeout_ms)¶
Start a timer with the given ID and timeout value