Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: t7can.cpp
- Revision:
- 3:92dae9083c83
- Child:
- 4:682d96ff6d79
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/t7can.cpp Tue Jun 07 12:23:28 2011 +0000
@@ -0,0 +1,213 @@
+/*******************************************************************************
+
+trionic7.cpp - CAN Bus functions for Just4Trionic by Just4pLeisure
+(c) 2011 by Sophie Dexter
+
+This C++ module provides functions for reading and writing the FLASH chips and
+SRAM in Trionic7 ECUs. (Writing the adaption data back to SRAM not done yet).
+
+Some functions need an additional 'bootloader' program to be sent to the T5 ECU
+before they can be used. These functions are: Identifying the T5 ECU type and
+FLASH chips, dumping the FLASH chips, erasing the FLASH chips, writing to the
+FLASH chips and calculating the FLASH chips' checksum.
+
+My version of the bootloader, BOOTY.S19, includes some features not in other
+bootloaders; identifying the ECU and FLASH chip types, a 'safer' way of dumping
+the FLASH chips and the ability to program AMD 29F010 type FLASH chips
+
+********************************************************************************
+
+WARNING: Use at your own risk, sadly this software comes with no guarantees.
+This software is provided 'free' and in good faith, but the author does not
+accept liability for any damage arising from its use.
+
+*******************************************************************************/
+
+#include "t7can.h"
+
+// constants
+#define CMD_BUF_LENGTH 32 ///< command buffer size
+
+// static variables
+static char cmd_buffer[CMD_BUF_LENGTH]; ///< command string buffer
+
+//static uint32_t cmd_addr; ///< address (optional)
+//static uint32_t cmd_value; ///< value (optional)
+//static uint32_t cmd_result; ///< result
+
+//static uint32_t flash_start = 0;
+
+// private functions
+uint8_t execute_t7_cmd();
+void t7_can_show_help();
+void t7_can_show_full_help();
+
+void t7_can() {
+ // Start the CAN bus system
+ // Note that at the moment this is only for T5 ECUs at 615 kbits
+ can_open();
+ can_set_speed(500000);
+
+ t7_can_show_help();
+
+ if (t7_initialise())
+ printf("Trionic 7 Connection OK\r\n");
+ else
+ printf("Trionic 7 Connection Failed\r\n");
+// t7_authenticate();
+ if (t7_authenticate())
+ printf("Security Key Accepted\r\n");
+ else
+ printf("Security Key Failed\r\n");
+
+ // main loop
+ *cmd_buffer = '\0';
+ char ret;
+ char rx_char;
+ while (true) {
+ // read chars from USB
+ // send received messages to the pc over USB connection
+ // This function displays any CAN messages that are 'missed' by the other functions
+ // Can messages might be 'missed' because they are received after a 'timeout' period
+ // or because they weren't expected, e.g. if the T5 ECU resets for some reason
+// t7_show_can_message();
+ silent_can_message();
+ if (pc.readable()) {
+ // turn Error LED off for next command
+ led4 = 0;
+ rx_char = pc.getc();
+ switch (rx_char) {
+ // 'ESC' key to go back to mbed Just4Trionic 'home' menu
+ case '\e':
+ can_close();
+ return;
+ // end-of-command reached
+ case TERM_OK :
+ // execute command and return flag via USB
+ timer.reset();
+ timer.start();
+ ret = execute_t7_cmd();
+ pc.putc(ret);
+ printf("Completed in %.3f seconds.\r\n", timer.read());
+ // reset command buffer
+ *cmd_buffer = '\0';
+ // light up LED
+ // ret == TERM_OK ? led_on(LED_ACT) : led_on(LED_ERR);
+ ret == TERM_OK ? led3 = 1 : led4 = 1;
+ break;
+ // another command char
+ default:
+ // store in buffer if space permits
+ if (StrLen(cmd_buffer) < CMD_BUF_LENGTH - 1) {
+ StrAddc(cmd_buffer, rx_char);
+ }
+ break;
+ }
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+/**
+ Executes a command and returns result flag (does not transmit the flag
+ itself).
+
+ @return command flag (success / failure)
+*/
+uint8_t execute_t7_cmd() {
+
+
+// uint8_t cmd_length = strlen(cmd_buffer);
+ // command groups
+ switch (*cmd_buffer) {
+// CHECK_ARGLENGTH(0);
+ // Get the Symbol Table
+ case 'i' :
+ case 'I' :
+ return t7_initialise()
+ ? TERM_OK : TERM_ERR;
+ case 'a' :
+ case 'A' :
+ return t7_authenticate()
+ ? TERM_OK : TERM_ERR;
+
+ // Erase the FLASH chips
+ case 'e':
+ case 'E':
+ return t7_erase()
+ ? TERM_OK : TERM_ERR;
+ // DUMP the T5 ECU BIN file stored in the FLASH chips
+ case 'd':
+ case 'D':
+ return t7_dump()
+ ? TERM_OK : TERM_ERR;
+ // Send a FLASH update file to the T5 ECU
+ case 'f':
+ case 'F':
+ return t7_flash()
+ ? TERM_OK : TERM_ERR;
+
+ case '3':
+
+ // Print help
+ case 'h':
+ t7_can_show_help();
+ return TERM_OK;
+ case 'H':
+ t7_can_show_full_help();
+ return TERM_OK;
+ default:
+ t7_can_show_help();
+ break;
+ }
+ // unknown command
+ return TERM_ERR;
+}
+
+//
+// Trionic7ShowHelp
+//
+// Displays a list of things that can be done with the T5 ECU.
+//
+// inputs: none
+// return: none
+//
+void t7_can_show_help() {
+ printf("Trionic 7 Command Menu\r\n");
+ printf("======================\r\n");
+ printf("D - Read and DUMP T7 FLASH BIN file\r\n");
+ printf("F - FLASH the update file to the T7\r\n");
+ printf("\r\n");
+ printf("'ESC' - Return to Just4Trionic Main Menu\r\n");
+ printf("\r\n");
+ printf("h - Show this help menu\r\n");
+ printf("\r\n");
+ return;
+}
+//
+// t7_can_show_full_help
+//
+// Displays a complete list of things that can be done with the T5 ECU.
+//
+// inputs: none
+// return: none
+//
+void t7_can_show_full_help() {
+ printf("Trionic 7 Command Menu\r\n");
+ printf("======================\r\n");
+ printf("D - Read and DUMP T7 FLASH BIN file\r\n");
+ printf("F - FLASH the update file to the T7\r\n");
+ printf("\r\n");
+ printf("\r\n");
+ printf("i - Send initialisation message to T7\r\n");
+ printf("a - Send Authentication key to T7\r\n");
+ printf("d - Dump T7 Bin file\r\n");
+ printf("\r\n");
+ printf("'ESC' - Return to Just4Trionic Main Menu\r\n");
+ printf("\r\n");
+ printf("H - Show this help menu\r\n");
+ printf("\r\n");
+ return;
+}
+
+