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:
2:bf3a2b29259a
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 bdmcpu32.h
Just4pLeisure 1:d5452e398b76 4 (c) 2010 by Sophie Dexter
Just4pLeisure 1:d5452e398b76 5
Just4pLeisure 1:d5452e398b76 6 A derivative work based on:
Just4pLeisure 1:d5452e398b76 7 //-----------------------------------------------------------------------------
Just4pLeisure 1:d5452e398b76 8 // CAN/BDM adapter firmware
Just4pLeisure 1:d5452e398b76 9 // (C) Janis Silins, 2010
Just4pLeisure 1:d5452e398b76 10 // $id$
Just4pLeisure 1:d5452e398b76 11 //-----------------------------------------------------------------------------
Just4pLeisure 1:d5452e398b76 12
Just4pLeisure 1:d5452e398b76 13 ********************************************************************************
Just4pLeisure 1:d5452e398b76 14
Just4pLeisure 1:d5452e398b76 15 WARNING: Use at your own risk, sadly this software comes with no guarantees.
Just4pLeisure 1:d5452e398b76 16 This software is provided 'free' and in good faith, but the author does not
Just4pLeisure 1:d5452e398b76 17 accept liability for any damage arising from its use.
Just4pLeisure 1:d5452e398b76 18
Just4pLeisure 1:d5452e398b76 19 *******************************************************************************/
Just4pLeisure 1:d5452e398b76 20
Just4pLeisure 1:d5452e398b76 21 #ifndef __BDMCPU32_H__
Just4pLeisure 1:d5452e398b76 22 #define __BDMCPU32_H__
Just4pLeisure 1:d5452e398b76 23
Just4pLeisure 1:d5452e398b76 24 #include "mbed.h"
Just4pLeisure 1:d5452e398b76 25
Just4pLeisure 1:d5452e398b76 26 #include "common.h"
Just4pLeisure 1:d5452e398b76 27 #include "bdmtrionic.h"
Just4pLeisure 1:d5452e398b76 28 //#include "BDM.h"
Just4pLeisure 1:d5452e398b76 29
Just4pLeisure 1:d5452e398b76 30
Just4pLeisure 1:d5452e398b76 31 // MCU status macros
Just4pLeisure 1:d5452e398b76 32 #ifndef IGNORE_VCC_PIN
Just4pLeisure 2:bf3a2b29259a 33 // #define IS_CONNECTED (PIN_PWR)
Just4pLeisure 5:1775b4b13232 34 #define IS_CONNECTED (bool)((LPC_GPIO1->FIOPIN) & (1 << 30)) // PIN_POWER is p19 p1.30
Just4pLeisure 1:d5452e398b76 35 #else
Just4pLeisure 5:1775b4b13232 36 #define IS_CONNECTED true
Just4pLeisure 1:d5452e398b76 37 #endif // IGNORE_VCC_PIN
Just4pLeisure 1:d5452e398b76 38
Just4pLeisure 2:bf3a2b29259a 39 //#define IN_BDM (PIN_FREEZE)
Just4pLeisure 2:bf3a2b29259a 40 #define IN_BDM (bool)((LPC_GPIO2->FIOPIN) & (1 << 0)) // FREEZE is p26 P2.0
Just4pLeisure 2:bf3a2b29259a 41 //#define IS_RUNNING (PIN_RESET && !IN_BDM)
Just4pLeisure 2:bf3a2b29259a 42 #define IS_RUNNING ((bool)((LPC_GPIO2->FIOPIN) & (1 << 3)) && !IN_BDM) // PIN_RESET is P23 P2.3
Just4pLeisure 1:d5452e398b76 43
Just4pLeisure 1:d5452e398b76 44 // MCU management
Just4pLeisure 1:d5452e398b76 45 uint8_t stop_chip();
Just4pLeisure 1:d5452e398b76 46 uint8_t reset_chip();
Just4pLeisure 1:d5452e398b76 47 uint8_t run_chip(const uint32_t* addr);
Just4pLeisure 1:d5452e398b76 48 uint8_t restart_chip();
Just4pLeisure 1:d5452e398b76 49 uint8_t step_chip();
Just4pLeisure 1:d5452e398b76 50 uint8_t bkpt_low();
Just4pLeisure 1:d5452e398b76 51 uint8_t bkpt_high();
Just4pLeisure 1:d5452e398b76 52 uint8_t reset_low();
Just4pLeisure 1:d5452e398b76 53 uint8_t reset_high();
Just4pLeisure 5:1775b4b13232 54 uint8_t berr_low();
Just4pLeisure 5:1775b4b13232 55 uint8_t berr_high();
Just4pLeisure 5:1775b4b13232 56 uint8_t berr_input();
Just4pLeisure 5:1775b4b13232 57
Just4pLeisure 5:1775b4b13232 58 // BDM Clock speed
Just4pLeisure 5:1775b4b13232 59 enum bdm_speed {
Just4pLeisure 5:1775b4b13232 60 SLOW,
Just4pLeisure 5:1775b4b13232 61 FAST,
Just4pLeisure 5:1775b4b13232 62 TURBO,
Just4pLeisure 5:1775b4b13232 63 NITROUS
Just4pLeisure 5:1775b4b13232 64 };
Just4pLeisure 5:1775b4b13232 65 void bdm_clk_mode(bdm_speed mode);
Just4pLeisure 1:d5452e398b76 66
Just4pLeisure 1:d5452e398b76 67 // memory
Just4pLeisure 1:d5452e398b76 68 uint8_t memread_byte(uint8_t* result, const uint32_t* addr);
Just4pLeisure 1:d5452e398b76 69 uint8_t memread_word(uint16_t* result, const uint32_t* addr);
Just4pLeisure 1:d5452e398b76 70 uint8_t memread_long(uint32_t* result, const uint32_t* addr);
Just4pLeisure 1:d5452e398b76 71 uint8_t memdump_byte(uint8_t* result);
Just4pLeisure 1:d5452e398b76 72 uint8_t memdump_word(uint16_t* result);
Just4pLeisure 1:d5452e398b76 73 uint8_t memdump_long(uint32_t* result);
Just4pLeisure 1:d5452e398b76 74 uint8_t memwrite_byte(const uint32_t* addr, uint8_t value);
Just4pLeisure 1:d5452e398b76 75 uint8_t memwrite_word(const uint32_t* addr, uint16_t value);
Just4pLeisure 1:d5452e398b76 76 uint8_t memwrite_long(const uint32_t* addr, const uint32_t* value);
Just4pLeisure 1:d5452e398b76 77 uint8_t memfill_byte(uint8_t value);
Just4pLeisure 1:d5452e398b76 78 uint8_t memfill_word(uint16_t value);
Just4pLeisure 1:d5452e398b76 79 uint8_t memfill_long(const uint32_t* value);
Just4pLeisure 1:d5452e398b76 80
Just4pLeisure 1:d5452e398b76 81 // memory split commands
Just4pLeisure 1:d5452e398b76 82 // Setup a start of a sequence of BDM operations
Just4pLeisure 1:d5452e398b76 83 // read commands
Just4pLeisure 1:d5452e398b76 84 uint8_t memread_byte_cmd(const uint32_t* addr);
Just4pLeisure 1:d5452e398b76 85 uint8_t memread_word_cmd(const uint32_t* addr);
Just4pLeisure 1:d5452e398b76 86 uint8_t memread_long_cmd(const uint32_t* addr);
Just4pLeisure 1:d5452e398b76 87 // write commands
Just4pLeisure 1:d5452e398b76 88 uint8_t memwrite_byte_cmd(const uint32_t* addr);
Just4pLeisure 1:d5452e398b76 89 uint8_t memwrite_word_cmd(const uint32_t* addr);
Just4pLeisure 1:d5452e398b76 90 uint8_t memwrite_long_cmd(const uint32_t* addr);
Just4pLeisure 1:d5452e398b76 91 // follow on commands
Just4pLeisure 1:d5452e398b76 92 // dump bytes/words/longs
Just4pLeisure 1:d5452e398b76 93 uint8_t memget_word(uint16_t* result);
Just4pLeisure 1:d5452e398b76 94 uint8_t memget_long(uint32_t* result);
Just4pLeisure 1:d5452e398b76 95 // read and write bytes
Just4pLeisure 1:d5452e398b76 96 uint8_t memwrite_write_byte(const uint32_t* addr, const uint8_t value);
Just4pLeisure 1:d5452e398b76 97 uint8_t memwrite_read_byte(const uint32_t* addr, const uint8_t value);
Just4pLeisure 1:d5452e398b76 98 uint8_t memwrite_nop_byte(const uint32_t* addr, const uint8_t value);
Just4pLeisure 1:d5452e398b76 99 uint8_t memread_read_byte(uint8_t* result, const uint32_t* addr);
Just4pLeisure 1:d5452e398b76 100 uint8_t memread_write_byte(uint8_t* result, const uint32_t* addr);
Just4pLeisure 1:d5452e398b76 101 uint8_t memread_nop_byte(uint8_t* result, const uint32_t* addr);
Just4pLeisure 1:d5452e398b76 102 //
Just4pLeisure 1:d5452e398b76 103 uint8_t memwrite_word_write_word(const uint32_t* addr, const uint16_t value1, const uint16_t value2);
Just4pLeisure 1:d5452e398b76 104 uint8_t memwrite_word_read_word(uint16_t* result, const uint32_t* addr, const uint16_t value);
Just4pLeisure 1:d5452e398b76 105
Just4pLeisure 1:d5452e398b76 106
Just4pLeisure 1:d5452e398b76 107 // registers
Just4pLeisure 1:d5452e398b76 108 uint8_t sysreg_read(uint32_t* result, uint8_t reg);
Just4pLeisure 1:d5452e398b76 109 uint8_t sysreg_write(uint8_t reg, const uint32_t* value);
Just4pLeisure 1:d5452e398b76 110 uint8_t adreg_read(uint32_t* result, uint8_t reg);
Just4pLeisure 1:d5452e398b76 111 uint8_t adreg_write(uint8_t reg, const uint32_t* value);
Just4pLeisure 1:d5452e398b76 112
Just4pLeisure 1:d5452e398b76 113 // bdm part commands
Just4pLeisure 1:d5452e398b76 114 bool bdm_command (uint16_t cmd);
Just4pLeisure 1:d5452e398b76 115 bool bdm_address (const uint32_t* addr);
Just4pLeisure 1:d5452e398b76 116 bool bdm_get (uint32_t* result, uint8_t size, uint16_t next_cmd);
Just4pLeisure 1:d5452e398b76 117 bool bdm_put (const uint32_t* value, uint8_t size);
Just4pLeisure 1:d5452e398b76 118 bool bdm_ready (uint16_t next_cmd);
Just4pLeisure 1:d5452e398b76 119
Just4pLeisure 1:d5452e398b76 120 #endif // __BDMCPU32_H__
Just4pLeisure 1:d5452e398b76 121 //-----------------------------------------------------------------------------
Just4pLeisure 1:d5452e398b76 122 // EOF
Just4pLeisure 1:d5452e398b76 123 //-----------------------------------------------------------------------------