Just4Trionic - CAN and BDM FLASH programmer for Saab cars

Dependencies:   mbed

Committer:
Just4pLeisure
Date:
Sat Apr 23 18:31:40 2016 +0000
Revision:
6:2fbcbebed28c
Parent:
4:682d96ff6d79
Version 1.6 Faster T7 P-BUS FLASHing algorithm, longer T8 erase timeout fixed BDM register display function

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Just4pLeisure 3:92dae9083c83 1
Just4pLeisure 4:682d96ff6d79 2 // t7utils.h - information and definitions needed for communicating with the T7 ECU
Just4pLeisure 3:92dae9083c83 3
Just4pLeisure 4:682d96ff6d79 4 // (C) 2011, 2012 Sophie Dexter
Just4pLeisure 3:92dae9083c83 5
Just4pLeisure 3:92dae9083c83 6 #ifndef __T7UTILS_H__
Just4pLeisure 3:92dae9083c83 7 #define __T7UTILS_H__
Just4pLeisure 3:92dae9083c83 8
Just4pLeisure 3:92dae9083c83 9 #include "mbed.h"
Just4pLeisure 3:92dae9083c83 10
Just4pLeisure 3:92dae9083c83 11 #include "common.h"
Just4pLeisure 3:92dae9083c83 12 #include "canutils.h"
Just4pLeisure 3:92dae9083c83 13
Just4pLeisure 3:92dae9083c83 14 #define T7CMNDID 0x220
Just4pLeisure 3:92dae9083c83 15 #define T7RESPID 0x238
Just4pLeisure 3:92dae9083c83 16 #define T7SEC_ID 0x240
Just4pLeisure 3:92dae9083c83 17 #define T7SEC_RX 0x258
Just4pLeisure 3:92dae9083c83 18 #define T7ACK_ID 0x266
Just4pLeisure 4:682d96ff6d79 19 #define T7ANYMSG 0x0
Just4pLeisure 4:682d96ff6d79 20
Just4pLeisure 3:92dae9083c83 21
Just4pLeisure 3:92dae9083c83 22 // initialise T7
Just4pLeisure 3:92dae9083c83 23
Just4pLeisure 3:92dae9083c83 24 #define T7INITMSG {0x3F,0x81,0x00,0x11,0x02,0x40,0x00,0x00}
Just4pLeisure 3:92dae9083c83 25
Just4pLeisure 3:92dae9083c83 26 // authenticate with T7
Just4pLeisure 3:92dae9083c83 27
Just4pLeisure 3:92dae9083c83 28 #define T7SEC_MSG {0x40,0xA1,0x02,0x27,0x05,0x00,0x00,0x00}
Just4pLeisure 3:92dae9083c83 29 #define T7KEY_MSG {0x40,0xA1,0x04,0x27,0x06,0x00,0x00,0x00}
Just4pLeisure 3:92dae9083c83 30
Just4pLeisure 3:92dae9083c83 31 #define T7ACK_MSG {0x40,0xA1,0x3F,0x00,0x00,0x00,0x00,0x00}
Just4pLeisure 3:92dae9083c83 32
Just4pLeisure 3:92dae9083c83 33 // read_trionic7
Just4pLeisure 3:92dae9083c83 34
Just4pLeisure 3:92dae9083c83 35 #define T7DMP_END {0x40,0xA1,0x01,0x82,0x00,0x00,0x00,0x00}
Just4pLeisure 3:92dae9083c83 36 //#define T7DMPJP1A {0x41,0xA1,0x08,0x2C,0xF0,0x03,0x00,0xEF} // 0x000000 length=0xEF
Just4pLeisure 3:92dae9083c83 37 #define T7DMPJP1A {0x41,0xA1,0x08,0x2C,0xF0,0x03,0x00,0x80} // 0x000000 length=0x80 (128 bytes)
Just4pLeisure 3:92dae9083c83 38 #define T7DMPJP1B {0x00,0xA1,0x00,0x00,0x00,0x00,0x00,0x00}
Just4pLeisure 3:92dae9083c83 39 #define T7DMPPOST {0x40,0xA1,0x01,0x3E,0x00,0x00,0x00,0x00}
Just4pLeisure 3:92dae9083c83 40 #define T7DMPDATA {0x40,0xA1,0x02,0x21,0xF0,0x00,0x00,0x00}
Just4pLeisure 3:92dae9083c83 41 #define T7DMP_ACK {0x40,0xA1,0x20,0x00,0x00,0x00,0x00,0x00}
Just4pLeisure 3:92dae9083c83 42
Just4pLeisure 3:92dae9083c83 43 // flash_trionic7
Just4pLeisure 3:92dae9083c83 44
Just4pLeisure 6:2fbcbebed28c 45 #define T7FLASTRT {0x41,0xA1,0x08,0x34,0x00,0x00,0x00,0x00} // Start = 0x000000
Just4pLeisure 6:2fbcbebed28c 46 #define T7FLASIZE {0x00,0xA1,0x00,0x00,0x00,0x00,0x00,0x00} // Length = 0x000000
Just4pLeisure 3:92dae9083c83 47 #define T7FLAJP1A {0x41,0xA1,0x08,0x34,0x00,0x00,0x00,0x00} // Start = 0x000000
Just4pLeisure 3:92dae9083c83 48 #define T7FLAJP1B {0x00,0xA1,0x08,0x00,0x00,0x00,0x00,0x00} // Length = 0x080000
Just4pLeisure 4:682d96ff6d79 49 #define T7FLABINA {0x41,0xA1,0x08,0x34,0x00,0x00,0x00,0x00} // Start = 0x000000
Just4pLeisure 4:682d96ff6d79 50 #define T7FLABINB {0x00,0xA1,0x07,0x00,0x00,0x00,0x00,0x00} // Length = 0x070000
Just4pLeisure 4:682d96ff6d79 51 #define T7FLAHDRA {0x41,0xA1,0x08,0x34,0x07,0xFF,0x00,0x00} // Start = 0x07FF00
Just4pLeisure 4:682d96ff6d79 52 #define T7FLAHDRB {0x00,0xA1,0x00,0x01,0x00,0x00,0x00,0x00} // Length = 0x000100
Just4pLeisure 3:92dae9083c83 53 #define T7FLA_END {0x40,0xA1,0x01,0x37,0x00,0x00,0x00,0x00}
Just4pLeisure 3:92dae9083c83 54 #define T7FLAEXIT {0x40,0xA1,0x02,0x31,0x54,0x00,0x00,0x00}
Just4pLeisure 3:92dae9083c83 55 #define T7FLA_ACK {0x40,0xA1,0x3F,0x00,0x00,0x00,0x00,0x00} // 266h
Just4pLeisure 3:92dae9083c83 56
Just4pLeisure 3:92dae9083c83 57
Just4pLeisure 3:92dae9083c83 58 #define T7MESSAGETIMEOUT 50 // 50 milliseconds (0.05 of a second) - Seems to be plenty of time to wait for messages on the CAN bus
Just4pLeisure 3:92dae9083c83 59 #define T7LONGERTIMEOUT 500 // 500 milliseconds (0.5 of a second) - Some messages seem to need longer
Just4pLeisure 3:92dae9083c83 60 #define T7CHECKSUMTIMEOUT 2000 // 2 seconds (2,000 milliseconds) - Usually takes less than a second so allowing 2 is plenty
Just4pLeisure 4:682d96ff6d79 61 #define T7CONNECTTIMEOUT 5000 // 5 seconds (5,000 milliseconds) - Usually takes 3 seconds so allowing 5 is plenty
Just4pLeisure 6:2fbcbebed28c 62 #define T7ERASETIMEOUT 40000 // 40 seconds (40,000 milliseconds) - Usually takes less than 20 seconds so allowing 40 is plenty
Just4pLeisure 3:92dae9083c83 63
Just4pLeisure 3:92dae9083c83 64 extern bool t7_initialise();
Just4pLeisure 3:92dae9083c83 65 extern bool t7_authenticate();
Just4pLeisure 6:2fbcbebed28c 66 extern FILE * t7_file_open(const char* fname);
Just4pLeisure 6:2fbcbebed28c 67 extern bool t7_dump(bool blockmode);
Just4pLeisure 3:92dae9083c83 68 extern bool t7_erase();
Just4pLeisure 6:2fbcbebed28c 69 extern bool t7_flash(FILE *, bool blockmode);
Just4pLeisure 6:2fbcbebed28c 70 extern bool t7_recover(FILE *);
Just4pLeisure 6:2fbcbebed28c 71 bool t7_flash_segment(FILE *, uint32_t address, uint32_t size, bool blockmode);
Just4pLeisure 6:2fbcbebed28c 72 extern bool t7_reset();
Just4pLeisure 3:92dae9083c83 73 /* global constants */
Just4pLeisure 3:92dae9083c83 74 //#define init_msg { 0x3F, 0x81, 0x00, 0x11, 0x02, 0x40, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 75
Just4pLeisure 3:92dae9083c83 76 // ask_header_trionic7
Just4pLeisure 3:92dae9083c83 77
Just4pLeisure 3:92dae9083c83 78 //#define query { 0x40, 0xA1, 0x02, 0x1A, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 79 //#define ack { 0x40, 0xA1, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 80
Just4pLeisure 3:92dae9083c83 81 // ask_header2_trionic7
Just4pLeisure 3:92dae9083c83 82
Just4pLeisure 3:92dae9083c83 83 //#define query { 0x40, 0xA1, 0x02, 0x1A, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 84 //#define ack { 0x40, 0xA1, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 85
Just4pLeisure 3:92dae9083c83 86
Just4pLeisure 3:92dae9083c83 87 // authenticate_trionic7
Just4pLeisure 3:92dae9083c83 88
Just4pLeisure 3:92dae9083c83 89 #define security_msg { 0x40, 0xA1, 0x02, 0x27, 0x05, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 90 #define security_msg_reply { 0x40, 0xA1, 0x04, 0x27, 0x06, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 91 #define ack { 0x40, 0xA1, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 92
Just4pLeisure 3:92dae9083c83 93
Just4pLeisure 3:92dae9083c83 94 // erase_trionic7
Just4pLeisure 3:92dae9083c83 95
Just4pLeisure 3:92dae9083c83 96 //#define erase_msg1 { 0x40, 0xA1, 0x02, 0x31, 0x52, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 97 //#define erase_msg2 { 0x40, 0xA1, 0x02, 0x31, 0x53, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 98 //#define confirm_msg { 0x40, 0xA1, 0x01, 0x3E, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 99
Just4pLeisure 3:92dae9083c83 100
Just4pLeisure 3:92dae9083c83 101 // program_trionic7
Just4pLeisure 3:92dae9083c83 102
Just4pLeisure 3:92dae9083c83 103 //#define jump_msg1a { 0x41, 0xA1, 0x08, 0x34, 0x00, 0x00, 0x00, 0x00 } // 0x000000 length=0x07B000
Just4pLeisure 3:92dae9083c83 104 #define jump_msg1b { 0x00, 0xA1, 0x07, 0xB0, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 105 #define jump_msg2a { 0x41, 0xA1, 0x08, 0x34, 0x07, 0xFF, 0x00, 0x00 } // 0x07FF00 length=0x000100
Just4pLeisure 3:92dae9083c83 106 #define jump_msg2b { 0x00, 0xA1, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 107 #define end_data_msg { 0x40, 0xA1, 0x01, 0x37, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 108 #define exit_diag_msg { 0x40, 0xA1, 0x02, 0x31, 0x54, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 109 #define req_diag_result_msg { 0x3F, 0x81, 0x01, 0x33, 0x02, 0x40, 0x00, 0x00 } // 220h
Just4pLeisure 3:92dae9083c83 110 #define ack { 0x40, 0xA1, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00 } // 266h
Just4pLeisure 3:92dae9083c83 111
Just4pLeisure 3:92dae9083c83 112 // program_trionic7_tis
Just4pLeisure 3:92dae9083c83 113
Just4pLeisure 3:92dae9083c83 114 //#define jump_msg1a { 0x41, 0xA1, 0x08, 0x34, 0x00, 0x00, 0x00, 0x00 } // 0x000000 length=0x070000
Just4pLeisure 3:92dae9083c83 115 //#define jump_msg1b { 0x00, 0xA1, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 116 //#define jump_msg2a { 0x41, 0xA1, 0x08, 0x34, 0x07, 0xFF, 0x00, 0x00 } // 0x07FF00 length=0x000100
Just4pLeisure 3:92dae9083c83 117 //#define jump_msg2b { 0x00, 0xA1, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 118 //#define end_data_msg { 0x40, 0xA1, 0x01, 0x37, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 119 //#define exit_diag_msg { 0x40, 0xA1, 0x02, 0x31, 0x54, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 120 //#define req_diag_result_msg { 0x3F, 0x81, 0x01, 0x33, 0x02, 0x40, 0x00, 0x00 } // 220h
Just4pLeisure 3:92dae9083c83 121 //#define ack { 0x40, 0xA1, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00 } // 266h
Just4pLeisure 3:92dae9083c83 122
Just4pLeisure 3:92dae9083c83 123
Just4pLeisure 3:92dae9083c83 124 // verify_trionic7
Just4pLeisure 3:92dae9083c83 125 //#define init_msg { 0x20, 0x81, 0x00, 0x11, 0x02, 0x42, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 126 //#define end_data_msg { 0x40, 0xA1, 0x01, 0x82, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 127 //#define jump_msg1a { 0x41, 0xA1, 0x08, 0x2C, 0xF0, 0x03, 0x00, 0xEF } // 0x000000 length=0xEF
Just4pLeisure 3:92dae9083c83 128 //#define jump_msg1b { 0x00, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 129 //#define post_jump_msg { 0x40, 0xA1, 0x01, 0x3E, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 130 //#define data_msg { 0x40, 0xA1, 0x02, 0x21, 0xF0, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 131 //#define ack { 0x40, 0xA1, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00 }
Just4pLeisure 3:92dae9083c83 132
Just4pLeisure 3:92dae9083c83 133
Just4pLeisure 3:92dae9083c83 134 #endif