jtagmkii_private.h

来自「这是一个非常有价值的参考代码」· C头文件 代码 · 共 291 行

H
291
字号
/* * avrdude - A Downloader/Uploader for AVR device programmers * Copyright (C) 2005 Joerg Wunsch <j@uriah.heep.sax.de> * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *//* $Id: jtagmkII_private.h,v 1.3 2005/05/11 20:48:05 joerg_wunsch Exp $ *//* * JTAG ICE mkII definitions * Taken from Appnote AVR067 *//* * Communication with the JTAG ICE works in frames.  The protocol * somewhat resembles the STK500v2 protocol, yet it is sufficiently * different to prevent a direct code reuse. :-( * * Frame format: * *  +---------------------------------------------------------------+ *  |   0   |  1  .  2  |  3 . 4 . 5 . 6  |   7   | ... | N-1 .  N  | *  |       |           |                 |       |     |           | *  | start | LSB   MSB | LSB ....... MSB | token | msg | LSB   MSB | *  | 0x1B  | sequence# | message size    | 0x0E  |     |   CRC16   | *  +---------------------------------------------------------------+ * * Each request message will be returned by a response with a matching * sequence #.  Sequence # 0xffff is reserved for asynchronous event * notifications that will be sent by the ICE without a request * message (e.g. when the target hit a breakpoint). * * The message size excludes the framing overhead (10 bytes). * * The first byte of the message is always the request or response * code, which is roughly classified as: * * . Messages (commands) use 0x00 through 0x3f.  (The documentation *   claims that messages start at 0x01, but actually CMND_SIGN_OFF is *   0x00.) * . Internal commands use 0x40 through 0x7f (not documented). * . Success responses use 0x80 through 0x9f. * . Failure responses use 0xa0 through 0xbf. * . Events use 0xe0 through 0xff. */#define MESSAGE_START 0x1b#define TOKEN 0x0e/* * Max message size we are willing to accept.  Prevents us from trying * to allocate too much VM in case we received a nonsensical packet * length.  We have to allocate the buffer as soon as we've got the * length information (and thus have to trust that information by that * time at first), as the final CRC check can only be done once the * entire packet came it. */#define MAX_MESSAGE 100000/* ICE command codes */#define CMND_CHIP_ERASE 0x13#define CMND_CLEAR_EVENTS 0x22#define CMND_CLR_BREAK 0x1A#define CMND_ENTER_PROGMODE 0x14#define CMND_ERASEPAGE_SPM 0x0D#define CMND_FORCED_STOP 0x0A#define CMND_GET_BREAK 0x12#define CMND_GET_PARAMETER 0x03#define CMND_GET_SIGN_ON 0x01#define CMND_GET_SYNC 0x0f#define CMND_GO 0x08#define CMND_LEAVE_PROGMODE 0x15#define CMND_READ_MEMORY 0x05#define CMND_READ_PC 0x07#define CMND_RESET 0x0B#define CMND_RESTORE_TARGET 0x23#define CMND_RUN_TO_ADDR 0x1C#define CMND_SELFTEST 0x10#define CMND_SET_BREAK 0x11#define CMND_SET_DEVICE_DESCRIPTOR 0x0C#define CMND_SET_N_PARAMETERS 0x16#define CMND_SET_PARAMETER 0x02#define CMND_SIGN_OFF 0x00#define CMND_SINGLE_STEP 0x09#define CMND_SPI_CMD 0x1D#define CMND_WRITE_MEMORY 0x04#define CMND_WRITE_PC 0x06/* ICE responses */#define RSP_DEBUGWIRE_SYNC_FAILED 0xAC#define RSP_FAILED 0xA0#define RSP_GET_BREAK 0x83#define RSP_ILLEGAL_BREAKPOINT 0xA8#define RSP_ILLEGAL_COMMAND 0xAA#define RSP_ILLEGAL_EMULATOR_MODE 0xA4#define RSP_ILLEGAL_JTAG_ID 0xA9#define RSP_ILLEGAL_MCU_STATE 0xA5#define RSP_ILLEGAL_MEMORY_TYPE 0xA2#define RSP_ILLEGAL_MEMORY_RANGE 0xA3#define RSP_ILLEGAL_PARAMETER 0xA1#define RSP_ILLEGAL_POWER_STATE 0xAD#define RSP_ILLEGAL_VALUE 0xA6#define RSP_MEMORY 0x82#define RSP_NO_TARGET_POWER 0xAB#define RSP_OK 0x80#define RSP_PARAMETER 0x81#define RSP_PC 0x84#define RSP_SELFTEST 0x85#define RSP_SET_N_PARAMETERS 0xA7#define RSP_SIGN_ON 0x86#define RSP_SPI_DATA 0x88/* ICE events */#define EVT_BREAK 0xE0#define EVT_DEBUG 0xE6#define EVT_ERROR_PHY_FORCE_BREAK_TIMEOUT 0xE2#define EVT_ERROR_PHY_MAX_BIT_LENGTH_DIFF 0xED#define EVT_ERROR_PHY_OPT_RECEIVE_TIMEOUT 0xF9#define EVT_ERROR_PHY_OPT_RECEIVED_BREAK 0xFA#define EVT_ERROR_PHY_RECEIVED_BREAK 0xF8#define EVT_ERROR_PHY_RECEIVE_TIMEOUT 0xF7#define EVT_ERROR_PHY_RELEASE_BREAK_TIMEOUT 0xE3#define EVT_ERROR_PHY_SYNC_OUT_OF_RANGE 0xF5#define EVT_ERROR_PHY_SYNC_TIMEOUT 0xF0#define EVT_ERROR_PHY_SYNC_TIMEOUT_BAUD 0xF4#define EVT_ERROR_PHY_SYNC_WAIT_TIMEOUT 0xF6#define EVT_RESULT_PHY_NO_ACTIVITY 0xFB#define EVT_EXT_RESET 0xE7#define EVT_ICE_POWER_ERROR_STATE 0xEA#define EVT_ICE_POWER_OK 0xEB#define EVT_IDR_DIRTY 0xEC#define EVT_NONE 0xEF#define EVT_PDSB_BREAK 0xF2#define EVT_PDSMB_BREAK 0xF3#define EVT_PROGRAM_BREAK 0xF1#define EVT_RUN 0xE1#define EVT_TARGET_POWER_OFF 0xE5#define EVT_TARGET_POWER_ON 0xE4#define EVT_TARGET_SLEEP 0xE8#define EVT_TARGET_WAKEUP 0xE9/* memory types for CMND_{READ,WRITE}_MEMORY */#define MTYPE_IO_SHADOW 0x30	/* cached IO registers? */#define MTYPE_SRAM 0x20		/* target's SRAM or [ext.] IO registers */#define MTYPE_EEPROM 0x22	/* EEPROM, what way? */#define MTYPE_EVENT 0x60	/* ICE event memory */#define MTYPE_SPM 0xA0		/* flash through LPM/SPM */#define MTYPE_FLASH_PAGE 0xB0	/* flash in programming mode */#define MTYPE_EEPROM_PAGE 0xB1	/* EEPROM in programming mode */#define MTYPE_FUSE_BITS 0xB2	/* fuse bits in programming mode */#define MTYPE_LOCK_BITS 0xB3	/* lock bits in programming mode */#define MTYPE_SIGN_JTAG 0xB4	/* signature in programming mode */#define MTYPE_OSCCAL_BYTE 0xB5	/* osccal cells in programming mode */#define MTYPE_CAN 0xB6		/* CAN mailbox *//* (some) ICE parameters, for CMND_{GET,SET}_PARAMETER */#define PAR_HW_VERSION 0x01#define PAR_FW_VERSION 0x02#define PAR_EMULATOR_MODE 0x03# define EMULATOR_MODE_DEBUGWIRE 0x00# define EMULATOR_MODE_JTAG 0x01# define EMULATOR_MODE_UNKNOWN 0x02# define EMULATOR_MODE_SPI 0x03#define PAR_IREG 0x04#define PAR_BAUD_RATE 0x05# define PAR_BAUD_2400 0x01# define PAR_BAUD_4800 0x02# define PAR_BAUD_9600 0x03# define PAR_BAUD_19200 0x04	/* default */# define PAR_BAUD_38400 0x05# define PAR_BAUD_57600 0x06# define PAR_BAUD_115200 0x07# define PAR_BAUD_14400 0x08#define PAR_OCD_VTARGET 0x06#define PAR_OCD_JTAG_CLK 0x07#define PAR_OCD_BREAK_CAUSE 0x08#define PAR_TIMERS_RUNNING 0x09#define PAR_BREAK_ON_CHANGE_FLOW 0x0A#define PAR_BREAK_ADDR1 0x0B#define PAR_BREAK_ADDR2 0x0C#define PAR_COMBBREAKCTRL 0x0D#define PAR_JTAGID 0x0E#define PAR_UNITS_BEFORE 0x0F#define PAR_UNITS_AFTER 0x10#define PAR_BIT_BEFORE 0x11#define PAR_BIT_ATER 0x12#define PAR_EXTERNAL_RESET 0x13#define PAR_FLASH_PAGE_SIZE 0x14#define PAR_EEPROM_PAGE_SIZE 0x15#define PAR_UNUSED1 0x16#define PAR_PSB0 0x17#define PAR_PSB1 0x18#define PAR_PROTOCOL_DEBUG_EVENT 0x19#define PAR_MCU_STATE 0x1A# define STOPPED 0x00# define RUNNING 0x01# define PROGRAMMING 0x02#define PAR_DAISY_CHAIN_INFO 0x1B#define PAR_BOOT_ADDRESS 0x1C#define PAR_TARGET_SIGNATURE 0x1D#define PAR_DEBUGWIRE_BAUDRATE 0x1E#define PAR_PROGRAM_ENTRY_POINT 0x1F#define PAR_PACKET_PARSING_ERRORS 0x40#define PAR_VALID_PACKETS_RECEIVED 0x41#define PAR_INTERCOMMUNICATION_TX_FAILURES 0x42#define PAR_INTERCOMMUNICATION_RX_FAILURES 0x43#define PAR_CRC_ERRORS 0x44#define PAR_POWER_SOURCE 0x45# define POWER_EXTERNAL 0x00# define POWER_USB 0x01#define PAR_CAN_FLAG 0x22# define DONT_READ_CAN_MAILBOX 0x00# define READ_CAN_MAILBOX 0x01#define PAR_ENABLE_IDR_IN_RUN_MODE 0x23# define ACCESS_OSCCAL 0x00# define ACCESS_IDR 0x01#define PAR_ALLOW_PAGEPROGRAMMING_IN_SCANCHAIN 0x24# define PAGEPROG_NOT_ALLOWED 0x00# define PAGEPROG_ALLOWED 0x01/* * In appnote AVR067, struct device_descriptor is written with * int/long field types.  We cannot use them directly, as they were * neither properly aligned for portability, nor did they care for * endianess issues.  We thus use arrays of unsigned chars, plus * conversion macros. */struct device_descriptor{  unsigned char ucReadIO[8]; /*LSB = IOloc 0, MSB = IOloc63 */  unsigned char ucReadIOShadow[8]; /*LSB = IOloc 0, MSB = IOloc63 */  unsigned char ucWriteIO[8]; /*LSB = IOloc 0, MSB = IOloc63 */  unsigned char ucWriteIOShadow[8]; /*LSB = IOloc 0, MSB = IOloc63 */  unsigned char ucReadExtIO[52]; /*LSB = IOloc 96, MSB = IOloc511 */  unsigned char ucReadIOExtShadow[52]; /*LSB = IOloc 96, MSB = IOloc511 */  unsigned char ucWriteExtIO[52]; /*LSB = IOloc 96, MSB = IOloc511 */  unsigned char ucWriteIOExtShadow[52];/*LSB = IOloc 96, MSB = IOloc511 */  unsigned char ucIDRAddress; /*IDR address */  unsigned char ucSPMCRAddress; /*SPMCR Register address and dW BasePC */  unsigned char ucRAMPZAddress; /*RAMPZ Register address in SRAM I/O */				/*space */  unsigned char uiFlashPageSize[2]; /*Device Flash Page Size, Size = */				/*2 exp ucFlashPageSize */  unsigned char ucEepromPageSize; /*Device Eeprom Page Size in bytes */  unsigned char ulBootAddress[4]; /*Device Boot Loader Start Address */  unsigned char uiUpperExtIOLoc[2]; /*Topmost (last) extended I/O */				/*location, 0 if no external I/O */  unsigned char ulFlashSize[4]; /*Device Flash Size */  unsigned char ucEepromInst[20]; /*Instructions for W/R EEPROM */  unsigned char ucFlashInst[3]; /*Instructions for W/R FLASH */  unsigned char ucSPHaddr; /* stack pointer high */  unsigned char ucSPLaddr; /* stack pointer low */  /* new as of 16-02-2004 */  unsigned char uiFlashpages[2]; /* number of pages in flash */  unsigned char ucDWDRAddress; /* DWDR register address */  unsigned char ucDWBasePC; /* base/mask value of the PC */  /* new as of 30-04-2004 */  unsigned char ucAllowFullPageBitstream; /* FALSE on ALL new */				/*parts */  unsigned char uiStartSmallestBootLoaderSection[2]; /* */  /* new as of 18-10-2004 */  unsigned char EnablePageProgramming; /* For JTAG parts only, */				/* default TRUE */  unsigned char ucCacheType;	/* CacheType_Normal 0x00, */				/* CacheType_CAN 0x01, */				/* CacheType_HEIMDALL 0x02 */				/* new as of 27-10-2004 */  unsigned char uiSramStartAddr[2]; /* Start of SRAM */  unsigned char ucResetType; /* Selects reset type. ResetNormal = 0x00 */                             /* ResetAT76CXXX = 0x01 */  unsigned char ucPCMaskExtended; /* For parts with extended PC */  unsigned char ucPCMaskHigh; /* PC high mask */  unsigned char ucEindAddress; /* Selects reset type. [EIND address...] */  /* new as of early 2005, firmware 4.x */  unsigned char EECRAddress[2]; /* EECR memory-mapped IO address */};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?