Sophie Dexter
/
Just4Trionic
Just4Trionic - CAN and BDM FLASH programmer for Saab cars
bdmcpu32.h@5:1775b4b13232, 2015-04-25 (annotated)
- 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?
User | Revision | Line number | New 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 | //----------------------------------------------------------------------------- |