Just4Trionic - CAN and BDM FLASH programmer for Saab cars

Dependencies:   mbed

Committer:
Just4pLeisure
Date:
Sat Apr 25 17:07:08 2015 +0000
Revision:
5:1775b4b13232
Parent:
4:682d96ff6d79
Child:
6:2fbcbebed28c
Version 1.5 Is a significant milestone.; ; Supports BDM and CAN read and write of T5.x, T7 and T8 ECU's plus T8 recovery.; A Target Resident Driver for BDM gives a big speed boost.; Supports many alternative replacement FLASH chips for T5.x ECU's;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Just4pLeisure 1:d5452e398b76 1 /*******************************************************************************
Just4pLeisure 1:d5452e398b76 2
Just4pLeisure 1:d5452e398b76 3 bdm.cpp
Just4pLeisure 1:d5452e398b76 4 (c) 2010 by Sophie Dexter
Just4pLeisure 1:d5452e398b76 5
Just4pLeisure 1:d5452e398b76 6 BDM functions for Just4Trionic by Just4pLeisure
Just4pLeisure 1:d5452e398b76 7
Just4pLeisure 1:d5452e398b76 8 A derivative work based on:
Just4pLeisure 1:d5452e398b76 9 //-----------------------------------------------------------------------------
Just4pLeisure 1:d5452e398b76 10 // Firmware for USB BDM v2.0
Just4pLeisure 1:d5452e398b76 11 // (C) johnc, 2009
Just4pLeisure 1:d5452e398b76 12 // $id$
Just4pLeisure 1:d5452e398b76 13 //-----------------------------------------------------------------------------
Just4pLeisure 1:d5452e398b76 14
Just4pLeisure 1:d5452e398b76 15 ********************************************************************************
Just4pLeisure 1:d5452e398b76 16
Just4pLeisure 1:d5452e398b76 17 WARNING: Use at your own risk, sadly this software comes with no guarantees.
Just4pLeisure 1:d5452e398b76 18 This software is provided 'free' and in good faith, but the author does not
Just4pLeisure 1:d5452e398b76 19 accept liability for any damage arising from its use.
Just4pLeisure 1:d5452e398b76 20
Just4pLeisure 1:d5452e398b76 21 *******************************************************************************/
Just4pLeisure 1:d5452e398b76 22
Just4pLeisure 1:d5452e398b76 23 #include "bdm.h"
Just4pLeisure 1:d5452e398b76 24
Just4pLeisure 1:d5452e398b76 25 // constants
Just4pLeisure 1:d5452e398b76 26 #define CMD_BUF_LENGTH 32 ///< command buffer size
Just4pLeisure 1:d5452e398b76 27
Just4pLeisure 1:d5452e398b76 28 // LED constants and macros
Just4pLeisure 1:d5452e398b76 29 #define LED_ONTIME 5 ///< LED 'on' time, ms
Just4pLeisure 1:d5452e398b76 30 #define LED_TCNT (255 - (unsigned char)((unsigned long)(LED_ONTIME * 1000L) \
Just4pLeisure 1:d5452e398b76 31 / (1000000L / (float)((unsigned long)XTAL_CPU / 1024L))))
Just4pLeisure 1:d5452e398b76 32
Just4pLeisure 1:d5452e398b76 33 // command characters
Just4pLeisure 1:d5452e398b76 34 #define CMDGROUP_ADAPTER 'a' ///< adapter commands
Just4pLeisure 1:d5452e398b76 35 #define CMD_VERSION 'v' ///< firmware version
Just4pLeisure 1:d5452e398b76 36 #define CMD_PINSTATUS 's' ///< momentary status of BDM pins
Just4pLeisure 1:d5452e398b76 37 #define CMD_BKPTLOW '1' ///< pull BKPT low
Just4pLeisure 1:d5452e398b76 38 #define CMD_BKPTHIGH '2' ///< pull BKPT high
Just4pLeisure 1:d5452e398b76 39 #define CMD_RESETLOW '3' ///< pull RESET low
Just4pLeisure 1:d5452e398b76 40 #define CMD_RESETHIGH '4' ///< pull RESET high
Just4pLeisure 5:1775b4b13232 41 #define CMD_BERR_LOW '5' ///< pull BERR low
Just4pLeisure 5:1775b4b13232 42 #define CMD_BERR_HIGH '6' ///< pull BERR high
Just4pLeisure 5:1775b4b13232 43 #define CMD_BERR_INPUT '7' ///< make BERR an input
Just4pLeisure 5:1775b4b13232 44
Just4pLeisure 1:d5452e398b76 45
Just4pLeisure 1:d5452e398b76 46 #define CMDGROUP_MCU 'c' ///< target MCU management commands
Just4pLeisure 1:d5452e398b76 47 #define CMD_STOPCHIP 'S' ///< stop
Just4pLeisure 1:d5452e398b76 48 #define CMD_RESETCHIP 'R' ///< reset
Just4pLeisure 1:d5452e398b76 49 #define CMD_RUNCHIP 'r' ///< run from given address
Just4pLeisure 1:d5452e398b76 50 #define CMD_RESTART 's' ///< restart
Just4pLeisure 1:d5452e398b76 51 #define CMD_STEP 'b' ///< step
Just4pLeisure 1:d5452e398b76 52
Just4pLeisure 1:d5452e398b76 53 #define CMDGROUP_FLASH 'f'
Just4pLeisure 1:d5452e398b76 54 #define CMD_GETVERIFY 'v' ///< gets verification status
Just4pLeisure 1:d5452e398b76 55 #define CMD_SETVERIFY 'V' ///< sets verification on/off
Just4pLeisure 1:d5452e398b76 56 #define CMD_DUMP 'd' ///< dumps memory contents
Just4pLeisure 1:d5452e398b76 57 #define CMD_ERASE 'E' ///< erase entire flash memory
Just4pLeisure 1:d5452e398b76 58 #define CMD_WRITE 'w' ///< writes to flash memory
Just4pLeisure 1:d5452e398b76 59
Just4pLeisure 1:d5452e398b76 60 #define CMDGROUP_MEMORY 'm' ///< target MCU memory commands
Just4pLeisure 1:d5452e398b76 61 #define CMD_READBYTE 'b' ///< read byte from memory
Just4pLeisure 1:d5452e398b76 62 #define CMD_READWORD 'w' ///< read word (2 bytes) from memory
Just4pLeisure 1:d5452e398b76 63 #define CMD_READLONG 'l' ///< read long word (4 bytes) from memory
Just4pLeisure 1:d5452e398b76 64 #define CMD_DUMPBYTE 'z' ///< dump byte from memory
Just4pLeisure 1:d5452e398b76 65 #define CMD_DUMPWORD 'x' ///< dump word from memory
Just4pLeisure 1:d5452e398b76 66 #define CMD_DUMPLONG 'c' ///< dump long word from memory
Just4pLeisure 1:d5452e398b76 67 #define CMD_WRITEBYTE 'B' ///< write byte to memory
Just4pLeisure 1:d5452e398b76 68 #define CMD_WRITEWORD 'W' ///< write word to memory
Just4pLeisure 1:d5452e398b76 69 #define CMD_WRITELONG 'L' ///< write long word to memory
Just4pLeisure 1:d5452e398b76 70 #define CMD_FILLBYTE 'f' ///< fill byte in memory
Just4pLeisure 1:d5452e398b76 71 #define CMD_FILLWORD 'F' ///< fill word in memory
Just4pLeisure 1:d5452e398b76 72 #define CMD_FILLLONG 'M' ///< fill long word in memory
Just4pLeisure 1:d5452e398b76 73
Just4pLeisure 1:d5452e398b76 74 #define CMDGROUP_REGISTER 'r' ///< register commands
Just4pLeisure 1:d5452e398b76 75 #define CMD_READSYSREG 'r' ///< read system register
Just4pLeisure 1:d5452e398b76 76 #define CMD_WRITESYSREG 'W' ///< write system register
Just4pLeisure 1:d5452e398b76 77 #define CMD_READADREG 'a' ///< read A/D register
Just4pLeisure 1:d5452e398b76 78 #define CMD_WRITEADREG 'A' ///< write A/D register
Just4pLeisure 5:1775b4b13232 79 #define CMD_DISPLAYREGS 'd' ///< BD32 like display all registers
Just4pLeisure 1:d5452e398b76 80
Just4pLeisure 1:d5452e398b76 81 #define CMDGROUP_TRIONIC 'T'
Just4pLeisure 1:d5452e398b76 82 #define CMD_TRIONICDUMP 'D' ///< dumps memory contents
Just4pLeisure 1:d5452e398b76 83 #define CMD_TRIONICWRITE 'F' ///< writes to flash memory
Just4pLeisure 1:d5452e398b76 84
Just4pLeisure 1:d5452e398b76 85 // static variables
Just4pLeisure 1:d5452e398b76 86 static char cmd_buffer[CMD_BUF_LENGTH]; ///< command string buffer
Just4pLeisure 1:d5452e398b76 87 static uint32_t cmd_addr; ///< address (optional)
Just4pLeisure 1:d5452e398b76 88 static uint32_t cmd_value; ///< value (optional)
Just4pLeisure 1:d5452e398b76 89 static uint32_t cmd_result; ///< result
Just4pLeisure 1:d5452e398b76 90
Just4pLeisure 1:d5452e398b76 91 // private functions
Just4pLeisure 1:d5452e398b76 92 uint8_t execute_bdm_cmd();
Just4pLeisure 1:d5452e398b76 93
Just4pLeisure 1:d5452e398b76 94 void bdm_show_help();
Just4pLeisure 1:d5452e398b76 95 void bdm_show_full_help();
Just4pLeisure 1:d5452e398b76 96
Just4pLeisure 1:d5452e398b76 97 // command argument macros
Just4pLeisure 1:d5452e398b76 98 #define CHECK_ARGLENGTH(len) \
Just4pLeisure 1:d5452e398b76 99 if (cmd_length != len + 2) \
Just4pLeisure 1:d5452e398b76 100 return TERM_ERR
Just4pLeisure 1:d5452e398b76 101
Just4pLeisure 1:d5452e398b76 102 #define GET_NUMBER(target, offset, len) \
Just4pLeisure 1:d5452e398b76 103 if (!ascii2int(target, cmd_buffer + 2 + offset, len)) \
Just4pLeisure 1:d5452e398b76 104 return TERM_ERR
Just4pLeisure 1:d5452e398b76 105
Just4pLeisure 1:d5452e398b76 106
Just4pLeisure 5:1775b4b13232 107 void bdm()
Just4pLeisure 5:1775b4b13232 108 {
Just4pLeisure 1:d5452e398b76 109
Just4pLeisure 1:d5452e398b76 110 bdm_show_help();
Just4pLeisure 1:d5452e398b76 111 // set up LED pins
Just4pLeisure 1:d5452e398b76 112 // SETBIT(LED_DIR, _BV(LED_ERR) | _BV(LED_ACT));
Just4pLeisure 1:d5452e398b76 113 // set up USB_RD and USB_WR pins
Just4pLeisure 1:d5452e398b76 114 // SETBIT(USB_RXTX_DIR, _BV(USB_RD) | _BV(USB_WR));
Just4pLeisure 1:d5452e398b76 115
Just4pLeisure 1:d5452e398b76 116 // enable interrupts
Just4pLeisure 1:d5452e398b76 117 // sei();
Just4pLeisure 1:d5452e398b76 118
Just4pLeisure 1:d5452e398b76 119 // load configuration from EEPROM
Just4pLeisure 1:d5452e398b76 120 // verify_flash = eeprom_read_byte(&ee_verify);
Just4pLeisure 1:d5452e398b76 121
Just4pLeisure 1:d5452e398b76 122 // Set some initial values to help with checking if the BDM connector is plugged in
Just4pLeisure 1:d5452e398b76 123 PIN_PWR.mode(PullDown);
Just4pLeisure 1:d5452e398b76 124 PIN_NC.mode(PullUp);
Just4pLeisure 2:bf3a2b29259a 125 // PIN_DS.mode(PullUp);
Just4pLeisure 1:d5452e398b76 126 PIN_FREEZE.mode(PullUp);
Just4pLeisure 1:d5452e398b76 127 PIN_DSO.mode(PullUp);
Just4pLeisure 1:d5452e398b76 128
Just4pLeisure 1:d5452e398b76 129 verify_flash = true;
Just4pLeisure 1:d5452e398b76 130
Just4pLeisure 1:d5452e398b76 131 // main loop
Just4pLeisure 1:d5452e398b76 132 *cmd_buffer = '\0';
Just4pLeisure 1:d5452e398b76 133 char ret;
Just4pLeisure 1:d5452e398b76 134 char rx_char;
Just4pLeisure 1:d5452e398b76 135 while (true) {
Just4pLeisure 1:d5452e398b76 136 // read chars from USB
Just4pLeisure 1:d5452e398b76 137 if (pc.readable()) {
Just4pLeisure 1:d5452e398b76 138 // turn Error LED off for next command
Just4pLeisure 1:d5452e398b76 139 led4 = 0;
Just4pLeisure 1:d5452e398b76 140 rx_char = pc.getc();
Just4pLeisure 1:d5452e398b76 141 switch (rx_char) {
Just4pLeisure 1:d5452e398b76 142 // 'ESC' key to go back to mbed Just4Trionic 'home' menu
Just4pLeisure 1:d5452e398b76 143 case '\e':
Just4pLeisure 1:d5452e398b76 144 reset_chip();
Just4pLeisure 1:d5452e398b76 145 return;
Just4pLeisure 1:d5452e398b76 146 // end-of-command reached
Just4pLeisure 1:d5452e398b76 147 case TERM_OK :
Just4pLeisure 1:d5452e398b76 148 // execute command and return flag via USB
Just4pLeisure 1:d5452e398b76 149 ret = execute_bdm_cmd();
Just4pLeisure 1:d5452e398b76 150 pc.putc(ret);
Just4pLeisure 1:d5452e398b76 151 // reset command buffer
Just4pLeisure 1:d5452e398b76 152 *cmd_buffer = '\0';
Just4pLeisure 1:d5452e398b76 153 // light up LED
Just4pLeisure 1:d5452e398b76 154 // ret == TERM_OK ? led_on(LED_ACT) : led_on(LED_ERR);
Just4pLeisure 1:d5452e398b76 155 ret == TERM_OK ? led3 = 1 : led4 = 1;
Just4pLeisure 1:d5452e398b76 156 break;
Just4pLeisure 1:d5452e398b76 157 // another command char
Just4pLeisure 1:d5452e398b76 158 default:
Just4pLeisure 1:d5452e398b76 159 // store in buffer if space permits
Just4pLeisure 1:d5452e398b76 160 if (StrLen(cmd_buffer) < CMD_BUF_LENGTH - 1) {
Just4pLeisure 1:d5452e398b76 161 StrAddc(cmd_buffer, rx_char);
Just4pLeisure 1:d5452e398b76 162 }
Just4pLeisure 1:d5452e398b76 163 break;
Just4pLeisure 1:d5452e398b76 164 }
Just4pLeisure 1:d5452e398b76 165 }
Just4pLeisure 1:d5452e398b76 166 }
Just4pLeisure 1:d5452e398b76 167 }
Just4pLeisure 1:d5452e398b76 168
Just4pLeisure 1:d5452e398b76 169 //-----------------------------------------------------------------------------
Just4pLeisure 1:d5452e398b76 170 /**
Just4pLeisure 1:d5452e398b76 171 Executes a command and returns result flag (does not transmit the flag
Just4pLeisure 1:d5452e398b76 172 itself).
Just4pLeisure 1:d5452e398b76 173
Just4pLeisure 1:d5452e398b76 174 @return command flag (success / failure)
Just4pLeisure 1:d5452e398b76 175 */
Just4pLeisure 5:1775b4b13232 176 uint8_t execute_bdm_cmd()
Just4pLeisure 5:1775b4b13232 177 {
Just4pLeisure 1:d5452e398b76 178 uint8_t cmd_length = strlen(cmd_buffer);
Just4pLeisure 1:d5452e398b76 179 char cmd = *(cmd_buffer + 1);
Just4pLeisure 1:d5452e398b76 180
Just4pLeisure 1:d5452e398b76 181 // command groups
Just4pLeisure 1:d5452e398b76 182 switch (*cmd_buffer) {
Just4pLeisure 1:d5452e398b76 183 // adapter commands
Just4pLeisure 1:d5452e398b76 184 case CMDGROUP_ADAPTER:
Just4pLeisure 1:d5452e398b76 185 CHECK_ARGLENGTH(0);
Just4pLeisure 1:d5452e398b76 186 switch (cmd) {
Just4pLeisure 1:d5452e398b76 187 // get firmware version
Just4pLeisure 1:d5452e398b76 188 case CMD_VERSION:
Just4pLeisure 1:d5452e398b76 189 printf("%02x", FW_VERSION_MAJOR);
Just4pLeisure 1:d5452e398b76 190 printf("%02x", FW_VERSION_MINOR);
Just4pLeisure 4:682d96ff6d79 191 printf("\r\n");
Just4pLeisure 1:d5452e398b76 192 return TERM_OK;
Just4pLeisure 1:d5452e398b76 193
Just4pLeisure 1:d5452e398b76 194 // get momentary status of BDM pins 0...5 (for debugging)
Just4pLeisure 1:d5452e398b76 195 case CMD_PINSTATUS:
Just4pLeisure 1:d5452e398b76 196 // printf("%02x", (BDM_PIN & 0x3f));
Just4pLeisure 1:d5452e398b76 197 printf("PWR %d, ", PIN_PWR.read());
Just4pLeisure 1:d5452e398b76 198 printf("NC %d, ", PIN_NC.read());
Just4pLeisure 2:bf3a2b29259a 199 // printf("DS %d, ", PIN_DS.read());
Just4pLeisure 1:d5452e398b76 200 printf("FREEZE %d, ", PIN_FREEZE.read());
Just4pLeisure 1:d5452e398b76 201 printf("DSO %d, ", PIN_DSO.read());
Just4pLeisure 4:682d96ff6d79 202 printf("\r\n");
Just4pLeisure 1:d5452e398b76 203 return TERM_OK;
Just4pLeisure 1:d5452e398b76 204
Just4pLeisure 1:d5452e398b76 205 // pull BKPT low
Just4pLeisure 1:d5452e398b76 206 case CMD_BKPTLOW:
Just4pLeisure 1:d5452e398b76 207 return bkpt_low();
Just4pLeisure 1:d5452e398b76 208
Just4pLeisure 1:d5452e398b76 209 // pull BKPT high
Just4pLeisure 1:d5452e398b76 210 case CMD_BKPTHIGH:
Just4pLeisure 1:d5452e398b76 211 return bkpt_high();
Just4pLeisure 1:d5452e398b76 212
Just4pLeisure 1:d5452e398b76 213 // pull RESET low
Just4pLeisure 1:d5452e398b76 214 case CMD_RESETLOW:
Just4pLeisure 1:d5452e398b76 215 return reset_low();
Just4pLeisure 1:d5452e398b76 216
Just4pLeisure 1:d5452e398b76 217 // pull RESET high
Just4pLeisure 1:d5452e398b76 218 case CMD_RESETHIGH:
Just4pLeisure 1:d5452e398b76 219 return reset_high();
Just4pLeisure 5:1775b4b13232 220
Just4pLeisure 5:1775b4b13232 221 // pull BERR low
Just4pLeisure 5:1775b4b13232 222 case CMD_BERR_LOW:
Just4pLeisure 5:1775b4b13232 223 return berr_low();
Just4pLeisure 5:1775b4b13232 224
Just4pLeisure 5:1775b4b13232 225 // pull BERR high
Just4pLeisure 5:1775b4b13232 226 case CMD_BERR_HIGH:
Just4pLeisure 5:1775b4b13232 227 return berr_high();
Just4pLeisure 5:1775b4b13232 228
Just4pLeisure 5:1775b4b13232 229 // make BERR an input
Just4pLeisure 5:1775b4b13232 230 case CMD_BERR_INPUT:
Just4pLeisure 5:1775b4b13232 231 return berr_input();
Just4pLeisure 1:d5452e398b76 232 }
Just4pLeisure 1:d5452e398b76 233 break;
Just4pLeisure 1:d5452e398b76 234
Just4pLeisure 1:d5452e398b76 235 // MCU management
Just4pLeisure 1:d5452e398b76 236 case CMDGROUP_MCU:
Just4pLeisure 1:d5452e398b76 237 switch (cmd) {
Just4pLeisure 1:d5452e398b76 238 // stop target MCU
Just4pLeisure 1:d5452e398b76 239 case CMD_STOPCHIP:
Just4pLeisure 1:d5452e398b76 240 return stop_chip();
Just4pLeisure 1:d5452e398b76 241
Just4pLeisure 1:d5452e398b76 242 // reset target MCU
Just4pLeisure 1:d5452e398b76 243 case CMD_RESETCHIP:
Just4pLeisure 1:d5452e398b76 244 return reset_chip();
Just4pLeisure 1:d5452e398b76 245
Just4pLeisure 1:d5452e398b76 246 // run target MCU from given address
Just4pLeisure 1:d5452e398b76 247 case CMD_RUNCHIP:
Just4pLeisure 1:d5452e398b76 248 CHECK_ARGLENGTH(8);
Just4pLeisure 1:d5452e398b76 249 GET_NUMBER(&cmd_addr, 0, 8);
Just4pLeisure 1:d5452e398b76 250 return run_chip(&cmd_addr);
Just4pLeisure 1:d5452e398b76 251
Just4pLeisure 1:d5452e398b76 252 // restart
Just4pLeisure 1:d5452e398b76 253 case CMD_RESTART:
Just4pLeisure 1:d5452e398b76 254 return restart_chip();
Just4pLeisure 1:d5452e398b76 255
Just4pLeisure 1:d5452e398b76 256 // step
Just4pLeisure 1:d5452e398b76 257 case CMD_STEP:
Just4pLeisure 1:d5452e398b76 258 return step_chip();
Just4pLeisure 1:d5452e398b76 259 }
Just4pLeisure 1:d5452e398b76 260 break;
Just4pLeisure 1:d5452e398b76 261
Just4pLeisure 1:d5452e398b76 262 // Trionic dumping and flashing
Just4pLeisure 1:d5452e398b76 263 case CMDGROUP_FLASH:
Just4pLeisure 1:d5452e398b76 264 switch (cmd) {
Just4pLeisure 1:d5452e398b76 265 // get verification flag
Just4pLeisure 1:d5452e398b76 266 case CMD_GETVERIFY:
Just4pLeisure 1:d5452e398b76 267 CHECK_ARGLENGTH(0);
Just4pLeisure 1:d5452e398b76 268 printf("%02x", (uint8_t)verify_flash);
Just4pLeisure 4:682d96ff6d79 269 printf("\r\n");
Just4pLeisure 1:d5452e398b76 270 return TERM_OK;
Just4pLeisure 1:d5452e398b76 271
Just4pLeisure 1:d5452e398b76 272 // set verification flag
Just4pLeisure 1:d5452e398b76 273 case CMD_SETVERIFY:
Just4pLeisure 1:d5452e398b76 274 CHECK_ARGLENGTH(2);
Just4pLeisure 1:d5452e398b76 275 GET_NUMBER(&cmd_addr, 0, 2);
Just4pLeisure 1:d5452e398b76 276 verify_flash = (bool)cmd_addr;
Just4pLeisure 1:d5452e398b76 277 // eeprom_write_byte(&ee_verify, verify_flash);
Just4pLeisure 1:d5452e398b76 278 return TERM_OK;
Just4pLeisure 1:d5452e398b76 279
Just4pLeisure 1:d5452e398b76 280 // dump flash contents as block
Just4pLeisure 1:d5452e398b76 281 case CMD_DUMP:
Just4pLeisure 1:d5452e398b76 282 CHECK_ARGLENGTH(16);
Just4pLeisure 1:d5452e398b76 283 GET_NUMBER(&cmd_addr, 0, 8);
Just4pLeisure 1:d5452e398b76 284 GET_NUMBER(&cmd_value, 8, 8);
Just4pLeisure 1:d5452e398b76 285 return dump_flash(&cmd_addr, &cmd_value);
Just4pLeisure 1:d5452e398b76 286
Just4pLeisure 1:d5452e398b76 287 // erase entire flash memory
Just4pLeisure 1:d5452e398b76 288 case CMD_ERASE:
Just4pLeisure 1:d5452e398b76 289 CHECK_ARGLENGTH(22);
Just4pLeisure 1:d5452e398b76 290 GET_NUMBER(&cmd_addr, 6, 8);
Just4pLeisure 1:d5452e398b76 291 GET_NUMBER(&cmd_value, 14, 8);
Just4pLeisure 1:d5452e398b76 292 return erase_flash(cmd_buffer + 2, &cmd_addr, &cmd_value);
Just4pLeisure 1:d5452e398b76 293
Just4pLeisure 1:d5452e398b76 294 // write data block to flash memory
Just4pLeisure 1:d5452e398b76 295 case CMD_WRITE:
Just4pLeisure 1:d5452e398b76 296 CHECK_ARGLENGTH(14);
Just4pLeisure 1:d5452e398b76 297 GET_NUMBER(&cmd_addr, 6, 8);
Just4pLeisure 1:d5452e398b76 298 return write_flash(cmd_buffer + 2, &cmd_addr);
Just4pLeisure 1:d5452e398b76 299 }
Just4pLeisure 1:d5452e398b76 300 break;
Just4pLeisure 1:d5452e398b76 301
Just4pLeisure 1:d5452e398b76 302 // memory
Just4pLeisure 1:d5452e398b76 303 case CMDGROUP_MEMORY:
Just4pLeisure 1:d5452e398b76 304 if (cmd != CMD_FILLBYTE && cmd != CMD_FILLWORD &&
Just4pLeisure 1:d5452e398b76 305 cmd != CMD_FILLLONG && cmd != CMD_DUMPBYTE && cmd != CMD_DUMPWORD &&
Just4pLeisure 1:d5452e398b76 306 cmd != CMD_DUMPLONG) {
Just4pLeisure 1:d5452e398b76 307 // get memory address
Just4pLeisure 1:d5452e398b76 308 if (cmd_length < 10 || !ascii2int(&cmd_addr, cmd_buffer + 2, 8)) {
Just4pLeisure 1:d5452e398b76 309 // broken parametre
Just4pLeisure 1:d5452e398b76 310 return TERM_ERR;
Just4pLeisure 1:d5452e398b76 311 }
Just4pLeisure 1:d5452e398b76 312
Just4pLeisure 1:d5452e398b76 313 // get optional value
Just4pLeisure 1:d5452e398b76 314 if (cmd_length > 10 &&
Just4pLeisure 1:d5452e398b76 315 !ascii2int(&cmd_value, cmd_buffer + 10, cmd_length - 10)) {
Just4pLeisure 1:d5452e398b76 316 // broken parametre
Just4pLeisure 1:d5452e398b76 317 return TERM_ERR;
Just4pLeisure 1:d5452e398b76 318 }
Just4pLeisure 1:d5452e398b76 319 }
Just4pLeisure 1:d5452e398b76 320
Just4pLeisure 1:d5452e398b76 321 switch (cmd) {
Just4pLeisure 1:d5452e398b76 322 // read byte
Just4pLeisure 1:d5452e398b76 323 case CMD_READBYTE:
Just4pLeisure 1:d5452e398b76 324 if (cmd_length != 10 ||
Just4pLeisure 1:d5452e398b76 325 memread_byte((uint8_t*)(&cmd_result), &cmd_addr) != TERM_OK) {
Just4pLeisure 1:d5452e398b76 326 return TERM_ERR;
Just4pLeisure 1:d5452e398b76 327 }
Just4pLeisure 1:d5452e398b76 328 printf("%02x", (uint8_t)cmd_result);
Just4pLeisure 4:682d96ff6d79 329 printf("\r\n");
Just4pLeisure 1:d5452e398b76 330 return TERM_OK;
Just4pLeisure 1:d5452e398b76 331
Just4pLeisure 1:d5452e398b76 332 // read word
Just4pLeisure 1:d5452e398b76 333 case CMD_READWORD:
Just4pLeisure 1:d5452e398b76 334 if (cmd_length != 10 ||
Just4pLeisure 1:d5452e398b76 335 memread_word((uint16_t*)(&cmd_result), &cmd_addr) != TERM_OK) {
Just4pLeisure 1:d5452e398b76 336 return TERM_ERR;
Just4pLeisure 1:d5452e398b76 337 }
Just4pLeisure 1:d5452e398b76 338 printf("%04X", (uint16_t)cmd_result);
Just4pLeisure 4:682d96ff6d79 339 printf("\r\n");
Just4pLeisure 1:d5452e398b76 340 return TERM_OK;
Just4pLeisure 1:d5452e398b76 341
Just4pLeisure 1:d5452e398b76 342 // read long word
Just4pLeisure 1:d5452e398b76 343 case CMD_READLONG:
Just4pLeisure 1:d5452e398b76 344 if (cmd_length != 10 ||
Just4pLeisure 1:d5452e398b76 345 memread_long(&cmd_result, &cmd_addr) != TERM_OK) {
Just4pLeisure 1:d5452e398b76 346 return TERM_ERR;
Just4pLeisure 1:d5452e398b76 347 }
Just4pLeisure 1:d5452e398b76 348 printf("%08X", cmd_result);
Just4pLeisure 4:682d96ff6d79 349 printf("\r\n");
Just4pLeisure 1:d5452e398b76 350 return TERM_OK;
Just4pLeisure 1:d5452e398b76 351
Just4pLeisure 1:d5452e398b76 352 // dump byte
Just4pLeisure 1:d5452e398b76 353 case CMD_DUMPBYTE:
Just4pLeisure 1:d5452e398b76 354 if (cmd_length != 2 ||
Just4pLeisure 1:d5452e398b76 355 memdump_byte((uint8_t*)(&cmd_result)) != TERM_OK) {
Just4pLeisure 1:d5452e398b76 356 return TERM_ERR;
Just4pLeisure 1:d5452e398b76 357 }
Just4pLeisure 1:d5452e398b76 358 printf("%02x", (uint8_t)cmd_result);
Just4pLeisure 4:682d96ff6d79 359 printf("\r\n");
Just4pLeisure 1:d5452e398b76 360 return TERM_OK;
Just4pLeisure 1:d5452e398b76 361
Just4pLeisure 1:d5452e398b76 362 // dump word
Just4pLeisure 1:d5452e398b76 363 case CMD_DUMPWORD:
Just4pLeisure 1:d5452e398b76 364 if (cmd_length != 2 ||
Just4pLeisure 1:d5452e398b76 365 memdump_word((uint16_t*)(&cmd_result)) != TERM_OK) {
Just4pLeisure 1:d5452e398b76 366 return TERM_ERR;
Just4pLeisure 1:d5452e398b76 367 }
Just4pLeisure 1:d5452e398b76 368 printf("%04X", (uint16_t)cmd_result);
Just4pLeisure 4:682d96ff6d79 369 printf("\r\n");
Just4pLeisure 1:d5452e398b76 370 return TERM_OK;
Just4pLeisure 1:d5452e398b76 371
Just4pLeisure 1:d5452e398b76 372 // dump long word
Just4pLeisure 1:d5452e398b76 373 case CMD_DUMPLONG:
Just4pLeisure 1:d5452e398b76 374 if (cmd_length != 2 ||
Just4pLeisure 1:d5452e398b76 375 memdump_long(&cmd_result) != TERM_OK) {
Just4pLeisure 1:d5452e398b76 376 return TERM_ERR;
Just4pLeisure 1:d5452e398b76 377 }
Just4pLeisure 1:d5452e398b76 378 printf("%08X", cmd_result);
Just4pLeisure 4:682d96ff6d79 379 printf("\r\n");
Just4pLeisure 1:d5452e398b76 380 return TERM_OK;
Just4pLeisure 1:d5452e398b76 381
Just4pLeisure 1:d5452e398b76 382 // write byte
Just4pLeisure 1:d5452e398b76 383 case CMD_WRITEBYTE:
Just4pLeisure 1:d5452e398b76 384 return (cmd_length == 12 &&
Just4pLeisure 1:d5452e398b76 385 memwrite_byte(&cmd_addr, cmd_value) == TERM_OK) ?
Just4pLeisure 1:d5452e398b76 386 TERM_OK : TERM_ERR;
Just4pLeisure 1:d5452e398b76 387
Just4pLeisure 1:d5452e398b76 388 // write word
Just4pLeisure 1:d5452e398b76 389 case CMD_WRITEWORD:
Just4pLeisure 1:d5452e398b76 390 return (cmd_length == 14 &&
Just4pLeisure 1:d5452e398b76 391 memwrite_word(&cmd_addr, cmd_value) == TERM_OK) ?
Just4pLeisure 1:d5452e398b76 392 TERM_OK : TERM_ERR;
Just4pLeisure 1:d5452e398b76 393
Just4pLeisure 1:d5452e398b76 394 // write long word
Just4pLeisure 1:d5452e398b76 395 case CMD_WRITELONG:
Just4pLeisure 1:d5452e398b76 396 return (cmd_length == 18 &&
Just4pLeisure 1:d5452e398b76 397 memwrite_long(&cmd_addr, &cmd_value) == TERM_OK) ?
Just4pLeisure 1:d5452e398b76 398 TERM_OK : TERM_ERR;
Just4pLeisure 1:d5452e398b76 399
Just4pLeisure 1:d5452e398b76 400 // fill byte
Just4pLeisure 1:d5452e398b76 401 case CMD_FILLBYTE:
Just4pLeisure 1:d5452e398b76 402 if (cmd_length != 4 || !ascii2int(&cmd_value, cmd_buffer + 2, 2)) {
Just4pLeisure 1:d5452e398b76 403 return TERM_ERR;
Just4pLeisure 1:d5452e398b76 404 }
Just4pLeisure 1:d5452e398b76 405 return (memfill_byte(cmd_value));
Just4pLeisure 1:d5452e398b76 406
Just4pLeisure 1:d5452e398b76 407 // fill word
Just4pLeisure 1:d5452e398b76 408 case CMD_FILLWORD:
Just4pLeisure 1:d5452e398b76 409 if (cmd_length != 6 || !ascii2int(&cmd_value, cmd_buffer + 2, 4)) {
Just4pLeisure 1:d5452e398b76 410 return TERM_ERR;
Just4pLeisure 1:d5452e398b76 411 }
Just4pLeisure 1:d5452e398b76 412 return (memfill_word(cmd_value));
Just4pLeisure 1:d5452e398b76 413
Just4pLeisure 1:d5452e398b76 414 // fill long word
Just4pLeisure 1:d5452e398b76 415 case CMD_FILLLONG:
Just4pLeisure 1:d5452e398b76 416 if (cmd_length != 10 || !ascii2int(&cmd_value, cmd_buffer + 2, 8)) {
Just4pLeisure 1:d5452e398b76 417 return TERM_ERR;
Just4pLeisure 1:d5452e398b76 418 }
Just4pLeisure 1:d5452e398b76 419 return (memfill_long(&cmd_value));
Just4pLeisure 1:d5452e398b76 420 }
Just4pLeisure 1:d5452e398b76 421 break;
Just4pLeisure 1:d5452e398b76 422
Just4pLeisure 1:d5452e398b76 423 // registers
Just4pLeisure 1:d5452e398b76 424 case CMDGROUP_REGISTER:
Just4pLeisure 1:d5452e398b76 425 // get register code
Just4pLeisure 5:1775b4b13232 426 if (cmd_length == 2 && (cmd != CMD_DISPLAYREGS)) {
Just4pLeisure 1:d5452e398b76 427 // broken parametre
Just4pLeisure 1:d5452e398b76 428 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 429 } else {
Just4pLeisure 5:1775b4b13232 430 if (cmd_length < 4 || !ascii2int(&cmd_addr, cmd_buffer + 3, 1)) {
Just4pLeisure 5:1775b4b13232 431 // broken parametre
Just4pLeisure 5:1775b4b13232 432 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 433 }
Just4pLeisure 5:1775b4b13232 434 // get optional value
Just4pLeisure 5:1775b4b13232 435 if (cmd_length > 4 &&
Just4pLeisure 5:1775b4b13232 436 !ascii2int(&cmd_value, cmd_buffer + 4, 8)) {
Just4pLeisure 5:1775b4b13232 437 // broken parametre
Just4pLeisure 5:1775b4b13232 438 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 439 }
Just4pLeisure 1:d5452e398b76 440 }
Just4pLeisure 1:d5452e398b76 441
Just4pLeisure 1:d5452e398b76 442 switch (cmd) {
Just4pLeisure 1:d5452e398b76 443 // read system register
Just4pLeisure 1:d5452e398b76 444 case CMD_READSYSREG:
Just4pLeisure 1:d5452e398b76 445 if (cmd_length != 4 ||
Just4pLeisure 1:d5452e398b76 446 sysreg_read(&cmd_result, (uint8_t)cmd_addr) != TERM_OK) {
Just4pLeisure 1:d5452e398b76 447 return TERM_ERR;
Just4pLeisure 1:d5452e398b76 448 }
Just4pLeisure 1:d5452e398b76 449 printf("%08X", cmd_result);
Just4pLeisure 4:682d96ff6d79 450 printf("\r\n");
Just4pLeisure 1:d5452e398b76 451 return TERM_OK;
Just4pLeisure 1:d5452e398b76 452
Just4pLeisure 1:d5452e398b76 453 // write system register
Just4pLeisure 1:d5452e398b76 454 case CMD_WRITESYSREG:
Just4pLeisure 1:d5452e398b76 455 return (cmd_length == 12 &&
Just4pLeisure 1:d5452e398b76 456 sysreg_write((uint8_t)cmd_addr, &cmd_value) == TERM_OK) ?
Just4pLeisure 1:d5452e398b76 457 TERM_OK : TERM_ERR;
Just4pLeisure 1:d5452e398b76 458
Just4pLeisure 1:d5452e398b76 459 // read A/D register
Just4pLeisure 1:d5452e398b76 460 case CMD_READADREG:
Just4pLeisure 1:d5452e398b76 461 if (cmd_length != 4 ||
Just4pLeisure 1:d5452e398b76 462 adreg_read(&cmd_result, (uint8_t)cmd_addr) != TERM_OK) {
Just4pLeisure 1:d5452e398b76 463 return TERM_ERR;
Just4pLeisure 1:d5452e398b76 464 }
Just4pLeisure 1:d5452e398b76 465 printf("%08X", cmd_result);
Just4pLeisure 4:682d96ff6d79 466 printf("\r\n");
Just4pLeisure 1:d5452e398b76 467 return TERM_OK;
Just4pLeisure 1:d5452e398b76 468
Just4pLeisure 1:d5452e398b76 469 // write A/D register
Just4pLeisure 1:d5452e398b76 470 case CMD_WRITEADREG:
Just4pLeisure 1:d5452e398b76 471 return (cmd_length == 12 &&
Just4pLeisure 1:d5452e398b76 472 adreg_write((uint8_t)cmd_addr, &cmd_value) == TERM_OK) ?
Just4pLeisure 1:d5452e398b76 473 TERM_OK : TERM_ERR;
Just4pLeisure 5:1775b4b13232 474
Just4pLeisure 5:1775b4b13232 475 // Display all registers
Just4pLeisure 5:1775b4b13232 476 case CMD_DISPLAYREGS:
Just4pLeisure 5:1775b4b13232 477 printf(" D0-7");
Just4pLeisure 5:1775b4b13232 478 for (uint8_t i = 0; i < 8; i++) {
Just4pLeisure 5:1775b4b13232 479 if (adreg_read(&cmd_result, i) != TERM_OK) {
Just4pLeisure 5:1775b4b13232 480 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 481 }
Just4pLeisure 5:1775b4b13232 482 printf(" %08X", cmd_result);
Just4pLeisure 5:1775b4b13232 483 }
Just4pLeisure 5:1775b4b13232 484 //
Just4pLeisure 5:1775b4b13232 485 printf("\r\n");
Just4pLeisure 5:1775b4b13232 486 printf(" A0-7");
Just4pLeisure 5:1775b4b13232 487 for (uint8_t i = 8; i < 16; i++) {
Just4pLeisure 5:1775b4b13232 488 if (adreg_read(&cmd_result, i) != TERM_OK) {
Just4pLeisure 5:1775b4b13232 489 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 490 }
Just4pLeisure 5:1775b4b13232 491 printf(" %08X", cmd_result);
Just4pLeisure 5:1775b4b13232 492 }
Just4pLeisure 5:1775b4b13232 493 printf("\r\n");
Just4pLeisure 5:1775b4b13232 494 //
Just4pLeisure 5:1775b4b13232 495 if (sysreg_read(&cmd_result, 0x0) != TERM_OK) {
Just4pLeisure 5:1775b4b13232 496 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 497 }
Just4pLeisure 5:1775b4b13232 498 printf(" RPC %08X", cmd_result);
Just4pLeisure 5:1775b4b13232 499 if (sysreg_read(&cmd_result, 0xC) != TERM_OK) {
Just4pLeisure 5:1775b4b13232 500 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 501 }
Just4pLeisure 5:1775b4b13232 502 printf(" USP %08X", cmd_result);
Just4pLeisure 5:1775b4b13232 503 if (sysreg_read(&cmd_result, 0xE) != TERM_OK) {
Just4pLeisure 5:1775b4b13232 504 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 505 }
Just4pLeisure 5:1775b4b13232 506 printf(" SFC %08X SR 10S--210---XNZVC\r\n", cmd_result);
Just4pLeisure 5:1775b4b13232 507 //
Just4pLeisure 5:1775b4b13232 508 if (sysreg_read(&cmd_result, 0x1) != TERM_OK) {
Just4pLeisure 5:1775b4b13232 509 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 510 }
Just4pLeisure 5:1775b4b13232 511 printf(" CPC %08X", cmd_result);
Just4pLeisure 5:1775b4b13232 512 if (sysreg_read(&cmd_result, 0xD) != TERM_OK) {
Just4pLeisure 5:1775b4b13232 513 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 514 }
Just4pLeisure 5:1775b4b13232 515 printf(" SSP %08X", cmd_result);
Just4pLeisure 5:1775b4b13232 516 if (sysreg_read(&cmd_result, 0xF) != TERM_OK) {
Just4pLeisure 5:1775b4b13232 517 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 518 }
Just4pLeisure 5:1775b4b13232 519 printf(" DFC %08X", cmd_result);
Just4pLeisure 5:1775b4b13232 520 if (sysreg_read(&cmd_result, 0xB) != TERM_OK) {
Just4pLeisure 5:1775b4b13232 521 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 522 }
Just4pLeisure 5:1775b4b13232 523 printf(" %04X ", cmd_result);
Just4pLeisure 5:1775b4b13232 524 for (uint32_t i = 0; i < 16; i++) {
Just4pLeisure 5:1775b4b13232 525 cmd_result & (1 << (15-i)) ? printf("1") : printf("0");
Just4pLeisure 5:1775b4b13232 526 }
Just4pLeisure 5:1775b4b13232 527 printf("\r\n");
Just4pLeisure 5:1775b4b13232 528 //
Just4pLeisure 5:1775b4b13232 529 if (sysreg_read(&cmd_result, 0xA)!= TERM_OK) {
Just4pLeisure 5:1775b4b13232 530 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 531 }
Just4pLeisure 5:1775b4b13232 532 printf(" VBR %08X", cmd_result);
Just4pLeisure 5:1775b4b13232 533 if (sysreg_read(&cmd_result, 0x8)!= TERM_OK) {
Just4pLeisure 5:1775b4b13232 534 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 535 }
Just4pLeisure 5:1775b4b13232 536 printf(" ATEMP %08X", cmd_result);
Just4pLeisure 5:1775b4b13232 537 if (sysreg_read(&cmd_result, 0x9) != TERM_OK) {
Just4pLeisure 5:1775b4b13232 538 return TERM_ERR;
Just4pLeisure 5:1775b4b13232 539 }
Just4pLeisure 5:1775b4b13232 540 printf(" FAR %08X\r\n", cmd_result);
Just4pLeisure 5:1775b4b13232 541 //
Just4pLeisure 5:1775b4b13232 542 printf(" !CONNNECTED:%d", PIN_NC.read());
Just4pLeisure 5:1775b4b13232 543 printf(" POWER:%d", PIN_PWR.read());
Just4pLeisure 5:1775b4b13232 544 printf(" !RESET:%d", PIN_RESET.read());
Just4pLeisure 5:1775b4b13232 545 printf(" !BUSERR:%d", PIN_BERR.read());
Just4pLeisure 5:1775b4b13232 546 printf(" BKPT/DSCLK:%d", PIN_BKPT.read());
Just4pLeisure 5:1775b4b13232 547 printf(" FREEZE:%d", PIN_FREEZE.read());
Just4pLeisure 5:1775b4b13232 548 printf(" DSO:%d", PIN_DSO.read());
Just4pLeisure 5:1775b4b13232 549 printf(" DSI:%d", PIN_DSI.read());
Just4pLeisure 5:1775b4b13232 550 printf("\r\n");
Just4pLeisure 5:1775b4b13232 551 //
Just4pLeisure 5:1775b4b13232 552 return TERM_OK;
Just4pLeisure 1:d5452e398b76 553 }
Just4pLeisure 1:d5452e398b76 554 break;
Just4pLeisure 1:d5452e398b76 555
Just4pLeisure 1:d5452e398b76 556 // Trionic dumping and flashing
Just4pLeisure 1:d5452e398b76 557 case CMDGROUP_TRIONIC:
Just4pLeisure 1:d5452e398b76 558
Just4pLeisure 1:d5452e398b76 559 switch (cmd) {
Just4pLeisure 1:d5452e398b76 560
Just4pLeisure 1:d5452e398b76 561 // dump flash contents to a bin file
Just4pLeisure 1:d5452e398b76 562 case CMD_TRIONICDUMP:
Just4pLeisure 1:d5452e398b76 563 CHECK_ARGLENGTH(0);
Just4pLeisure 1:d5452e398b76 564 return dump_trionic();
Just4pLeisure 1:d5452e398b76 565
Just4pLeisure 1:d5452e398b76 566 // write data block to flash memory
Just4pLeisure 1:d5452e398b76 567 case CMD_TRIONICWRITE:
Just4pLeisure 1:d5452e398b76 568 CHECK_ARGLENGTH(0);
Just4pLeisure 1:d5452e398b76 569 return flash_trionic();
Just4pLeisure 1:d5452e398b76 570 }
Just4pLeisure 1:d5452e398b76 571
Just4pLeisure 1:d5452e398b76 572 // show help for BDM commands
Just4pLeisure 1:d5452e398b76 573 case 'H':
Just4pLeisure 1:d5452e398b76 574 bdm_show_full_help();
Just4pLeisure 1:d5452e398b76 575 return TERM_OK;
Just4pLeisure 1:d5452e398b76 576 case 'h':
Just4pLeisure 1:d5452e398b76 577 bdm_show_help();
Just4pLeisure 1:d5452e398b76 578 return TERM_OK;
Just4pLeisure 1:d5452e398b76 579 default:
Just4pLeisure 1:d5452e398b76 580 bdm_show_help();
Just4pLeisure 1:d5452e398b76 581 }
Just4pLeisure 1:d5452e398b76 582
Just4pLeisure 1:d5452e398b76 583 // unknown command
Just4pLeisure 1:d5452e398b76 584 return TERM_ERR;
Just4pLeisure 1:d5452e398b76 585 }
Just4pLeisure 1:d5452e398b76 586
Just4pLeisure 5:1775b4b13232 587 void bdm_show_help()
Just4pLeisure 5:1775b4b13232 588 {
Just4pLeisure 1:d5452e398b76 589 printf("Just4Trionic BDM Command Menu\r\n");
Just4pLeisure 1:d5452e398b76 590 printf("=============================\r\n");
Just4pLeisure 1:d5452e398b76 591 printf("TD - and DUMP T5 FLASH BIN file\r\n");
Just4pLeisure 1:d5452e398b76 592 printf("TF - FLASH the update file to the T5 (and write SRAM)\r\n");
Just4pLeisure 1:d5452e398b76 593 printf("Tr - Read SRAM adaption (not done).\r\n");
Just4pLeisure 1:d5452e398b76 594 printf("Tw - Write SRAM adaptation (not done).\r\n");
Just4pLeisure 1:d5452e398b76 595 printf("\r\n");
Just4pLeisure 1:d5452e398b76 596 printf("'ESC' - Return to Just4Trionic Main Menu\r\n");
Just4pLeisure 1:d5452e398b76 597 printf("\r\n");
Just4pLeisure 1:d5452e398b76 598 printf("h - Show this help menu\r\n");
Just4pLeisure 1:d5452e398b76 599 printf("\r\n");
Just4pLeisure 1:d5452e398b76 600 return;
Just4pLeisure 1:d5452e398b76 601 }
Just4pLeisure 5:1775b4b13232 602 void bdm_show_full_help()
Just4pLeisure 5:1775b4b13232 603 {
Just4pLeisure 1:d5452e398b76 604 printf("Just4Trionic BDM Command Menu\r\n");
Just4pLeisure 1:d5452e398b76 605 printf("=============================\r\n");
Just4pLeisure 1:d5452e398b76 606 printf("TD - and DUMP T5 FLASH BIN file\r\n");
Just4pLeisure 1:d5452e398b76 607 printf("TF - FLASH the update file to the T5 (and write SRAM)\r\n");
Just4pLeisure 1:d5452e398b76 608 printf("Tr - Read SRAM adaption (not done).\r\n");
Just4pLeisure 1:d5452e398b76 609 printf("Tw - Write SRAM adaptation (not done).\r\n");
Just4pLeisure 1:d5452e398b76 610 printf("\r\n");
Just4pLeisure 1:d5452e398b76 611 printf("Adapter Commands - a\r\n");
Just4pLeisure 1:d5452e398b76 612 printf("====================\r\n");
Just4pLeisure 1:d5452e398b76 613 printf("av - display firmware version\r\n");
Just4pLeisure 1:d5452e398b76 614 printf("as - display status of BDM pins\r\n");
Just4pLeisure 1:d5452e398b76 615 printf("a1 - pull BKPT low\r\n");
Just4pLeisure 1:d5452e398b76 616 printf("a2 - pull BKPT high\r\n");
Just4pLeisure 1:d5452e398b76 617 printf("a3 - pull RESET low\r\n");
Just4pLeisure 1:d5452e398b76 618 printf("a4 - pull RESET high\r\n");
Just4pLeisure 5:1775b4b13232 619 printf("a5 - pull BERR low\r\n");
Just4pLeisure 5:1775b4b13232 620 printf("a6 - pull BERR high\r\n");
Just4pLeisure 5:1775b4b13232 621 printf("a7 - make BERR an input\r\n");
Just4pLeisure 1:d5452e398b76 622 printf("\r\n");
Just4pLeisure 1:d5452e398b76 623 printf("MCU Management Commands - c\r\n");
Just4pLeisure 1:d5452e398b76 624 printf("===========================\r\n");
Just4pLeisure 1:d5452e398b76 625 printf("cS - stop MCU\r\n");
Just4pLeisure 1:d5452e398b76 626 printf("cR - reset MCU\r\n");
Just4pLeisure 1:d5452e398b76 627 printf("cr - run from given address\r\n");
Just4pLeisure 1:d5452e398b76 628 printf(" e.g. crCAFEBABE run from address 0xcafebabe\r\n");
Just4pLeisure 1:d5452e398b76 629 printf("cs - restart MCU\r\n");
Just4pLeisure 1:d5452e398b76 630 printf("cb - step MCU\r\n");
Just4pLeisure 1:d5452e398b76 631 printf("\r\n");
Just4pLeisure 1:d5452e398b76 632 printf("MCU FLASH Commands - f\r\n");
Just4pLeisure 1:d5452e398b76 633 printf("======================\r\n");
Just4pLeisure 1:d5452e398b76 634 printf("fv - gets verification status (always verify)\r\n");
Just4pLeisure 1:d5452e398b76 635 printf("fV - sets verification on/off (always on)\r\n");
Just4pLeisure 1:d5452e398b76 636 printf("fd - DUMPs memory contents\r\n");
Just4pLeisure 1:d5452e398b76 637 printf(" e.g. fdSSSSSSSSEEEEEEEE S...E... start and end addresses\r\n");
Just4pLeisure 1:d5452e398b76 638 printf(" e.g. fd0000000000020000 to DUMP T5.2\r\n");
Just4pLeisure 1:d5452e398b76 639 printf(" e.g. fd0000000000040000 to DUMP T5.5\r\n");
Just4pLeisure 1:d5452e398b76 640 printf(" e.g. fd0000000000080000 to DUMP T7\r\n");
Just4pLeisure 1:d5452e398b76 641 printf("fE - Erases entire FLASH memory\r\n");
Just4pLeisure 1:d5452e398b76 642 printf(" e.g. fETTTTTTSSSSSSSSEEEEEEEE T...S...E type, start and end addresses\r\n");
Just4pLeisure 1:d5452e398b76 643 printf(" e.g. fE28f0100000000000020000 erase 28F512 in T5.2\r\n");
Just4pLeisure 1:d5452e398b76 644 printf(" e.g. fE28f0100000000000040000 erase 28F010 in T5.5\r\n");
Just4pLeisure 1:d5452e398b76 645 printf(" e.g. fE29f0100000000000040000 erase 29F010 in T5.5 (addresses not used)\r\n");
Just4pLeisure 1:d5452e398b76 646 printf(" e.g. fE29f4000000000000080000 erase 29F400 in T7 (addresses not used)\r\n");
Just4pLeisure 1:d5452e398b76 647 printf("fw - writes to FLASH memory\r\n");
Just4pLeisure 1:d5452e398b76 648 printf(" Write a batch of long words to flash from a start address\r\n");
Just4pLeisure 1:d5452e398b76 649 printf(" followed by longwords LLLLLLLL, LLLLLLLL etc\r\n");
Just4pLeisure 1:d5452e398b76 650 printf(" Send a break character to stop when doneg");
Just4pLeisure 1:d5452e398b76 651 printf(" e.g. fwTTTTTTSSSSSSSS T...S... type and start address\r\n");
Just4pLeisure 1:d5452e398b76 652 printf(" e.g. fw28f01000004000 start at address 0x004000 T5.2/5.5\r\n");
Just4pLeisure 1:d5452e398b76 653 printf(" e.g. fw29f01000004000 start at address 0x004000 T5.5 with 29F010\r\n");
Just4pLeisure 1:d5452e398b76 654 printf(" e.g. fw29f40000004000 start at address 0x004000 T7\r\n");
Just4pLeisure 1:d5452e398b76 655 printf("\r\n");
Just4pLeisure 1:d5452e398b76 656 printf("MCU Memory Commands - m\r\n");
Just4pLeisure 1:d5452e398b76 657 printf("=======================\r\n");
Just4pLeisure 1:d5452e398b76 658 printf("mbAAAAAAAA - read byte from memory at 0xaaaaaaaa\r\n");
Just4pLeisure 1:d5452e398b76 659 printf("mwAAAAAAAA - read word (2 bytes) from memory\r\n");
Just4pLeisure 1:d5452e398b76 660 printf("mlAAAAAAAA - read long word (4 bytes) from memory\r\n");
Just4pLeisure 1:d5452e398b76 661 printf("mz - dump byte from the next memory address\r\n");
Just4pLeisure 1:d5452e398b76 662 printf("mx - dump word from the next memory address\r\n");
Just4pLeisure 1:d5452e398b76 663 printf("mc - dump long word from the next memory address\r\n");
Just4pLeisure 1:d5452e398b76 664 printf("mBAAAAAAAADD - write byte 0xdd to memory 0xaaaaaaaa\r\n");
Just4pLeisure 1:d5452e398b76 665 printf("mWAAAAAAAADDDD - write word 0xdddd to memory 0xaaaaaaaa\r\n");
Just4pLeisure 1:d5452e398b76 666 printf("mLAAAAAAAADDDDDDD - write long word 0xdddddddd to memory 0xaaaaaaaa\r\n");
Just4pLeisure 1:d5452e398b76 667 printf("mfDD - fill byte 0xdd to next memory address\r\n");
Just4pLeisure 1:d5452e398b76 668 printf("mFDDDD - fill word 0xdddd to next memory address\r\n");
Just4pLeisure 1:d5452e398b76 669 printf("mMDDDDDDDD - fill long word 0xdddddddd to next memory address\r\n");
Just4pLeisure 1:d5452e398b76 670 printf("\r\n");
Just4pLeisure 1:d5452e398b76 671 printf("MCU Register Commands - r\r\n");
Just4pLeisure 1:d5452e398b76 672 printf("=========================\r\n");
Just4pLeisure 5:1775b4b13232 673 printf("rd Display all registers (like BD32)\r\n");
Just4pLeisure 1:d5452e398b76 674 printf("rrRR - read system register RR\r\n");
Just4pLeisure 1:d5452e398b76 675 printf(" 00 - RPC, 01 - PCC, 0B - SR, 0C - USP, 0D - SSP\r\n");
Just4pLeisure 1:d5452e398b76 676 printf(" 0e - SFC, 0f - DFC, 08 - ATEMP, 09 - FAR, 0a - VBR\r\n");
Just4pLeisure 1:d5452e398b76 677 printf("rWRRCAFEBABE - write 0xcafebabe system register RR\r\n");
Just4pLeisure 1:d5452e398b76 678 printf("raAD - read A/D register 0x00-07 D0-D7, 0x08-15 A0-A7\r\n");
Just4pLeisure 1:d5452e398b76 679 printf("rAADCAFEBABE - write 0xcafebabe to A/D register \r\n");
Just4pLeisure 1:d5452e398b76 680 printf("\r\n");
Just4pLeisure 1:d5452e398b76 681 printf("'ESC' - Return to Just4Trionic Main Menu\r\n");
Just4pLeisure 1:d5452e398b76 682 printf("\r\n");
Just4pLeisure 1:d5452e398b76 683 printf("H - Show this help menu\r\n");
Just4pLeisure 1:d5452e398b76 684 printf("\r\n");
Just4pLeisure 1:d5452e398b76 685 return;
Just4pLeisure 1:d5452e398b76 686 }