private bool UploadBootloaderProg011() { int startAddress = 0x102400; Bootloader btloaderdata = new Bootloader(); int txpnt = 0; byte iFrameNumber = 0x21; if (requestDownload011()) { for (int i = 0; i < 0x46; i++) { iFrameNumber = 0x21; //10 F0 36 00 00 10 24 00 //Console.WriteLine("Sending bootloader: " + startAddress.ToString("X8")); // cast event float percentage = ((float)i * 100) / 70F; CastProgressWriteEvent(percentage); if (SendTransferData011(0xF0, startAddress, 0x311)) { // send 0x22 (34) frames with data from bootloader CANMessage msg = new CANMessage(0x11, 0, 8); for (int j = 0; j < 0x22; j++) { ulong cmd = 0x0000000000000000; // 0x34 = upload data to ECU msg.setData(cmd); msg.setCanData(iFrameNumber, 0); msg.setCanData(btloaderdata.BootloaderProgBytes[txpnt++], 1); msg.setCanData(btloaderdata.BootloaderProgBytes[txpnt++], 2); msg.setCanData(btloaderdata.BootloaderProgBytes[txpnt++], 3); msg.setCanData(btloaderdata.BootloaderProgBytes[txpnt++], 4); msg.setCanData(btloaderdata.BootloaderProgBytes[txpnt++], 5); msg.setCanData(btloaderdata.BootloaderProgBytes[txpnt++], 6); msg.setCanData(btloaderdata.BootloaderProgBytes[txpnt++], 7); iFrameNumber++; if (iFrameNumber > 0x2F) iFrameNumber = 0x20; if (!canUsbDevice.sendMessage(msg)) { AddToCanTrace("Couldn't send message"); } Thread.Sleep(2); } // send the remaining data m_canListener.setupWaitMessage(0x311); // now wait for 01 76 00 00 00 00 00 00 CANMessage response = new CANMessage(); response = new CANMessage(); response = m_canListener.waitMessage(1000); ulong data = response.getData(); if (getCanData(data, 0) != 0x01 || getCanData(data, 1) != 0x76) { return false; } BroadcastKeepAlive(); startAddress += 0xEA; } else { Console.WriteLine("Did not receive correct response from SendTransferData"); } } iFrameNumber = 0x21; if (SendTransferData011(0x0A, startAddress, 0x311)) { // send 0x22 (34) frames with data from bootloader CANMessage msg = new CANMessage(0x11, 0, 8); ulong cmd = 0x0000000000000000; // 0x34 = upload data to ECU msg.setData(cmd); msg.setCanData(iFrameNumber, 0); msg.setCanData(btloaderdata.BootloaderProgBytes[txpnt++], 1); msg.setCanData(btloaderdata.BootloaderProgBytes[txpnt++], 2); msg.setCanData(btloaderdata.BootloaderProgBytes[txpnt++], 3); msg.setCanData(btloaderdata.BootloaderProgBytes[txpnt++], 4); msg.setCanData(btloaderdata.BootloaderProgBytes[txpnt++], 5); msg.setCanData(btloaderdata.BootloaderProgBytes[txpnt++], 6); msg.setCanData(btloaderdata.BootloaderProgBytes[txpnt++], 7); iFrameNumber++; if (iFrameNumber > 0x2F) iFrameNumber = 0x20; if (!canUsbDevice.sendMessage(msg)) { AddToCanTrace("Couldn't send message"); } Thread.Sleep(2); // send the remaining data m_canListener.setupWaitMessage(0x311); // now wait for 01 76 00 00 00 00 00 00 CANMessage response = new CANMessage(); response = new CANMessage(); response = m_canListener.waitMessage(1000); ulong data = response.getData(); if (getCanData(data, 0) != 0x01 || getCanData(data, 1) != 0x76) { return false; } BroadcastKeepAlive(); startAddress += 0x06; } else { Console.WriteLine("Did not receive correct response from SendTransferData"); } CastProgressWriteEvent(100); } return true; }
public bool testSRAMWrite(/*int address, byte[] data*/) { StartSession10(); CastInfoEvent("Requesting mandatory data", ActivityType.UploadingBootloader); RequestECUInfo(0x90); RequestECUInfo(0x97); RequestECUInfo(0x92); RequestECUInfo(0xB4); RequestECUInfo(0xC1); RequestECUInfo(0xC2); RequestECUInfo(0xC3); RequestECUInfo(0xC4); RequestECUInfo(0xC5); RequestECUInfo(0xC6); Send0120(); Thread.Sleep(1000); StartSession1081(); StartSession10(); CastInfoEvent("Telling ECU to clear CANbus", ActivityType.UploadingBootloader); SendShutup(); SendA2(); SendA5(); SendA503(); Thread.Sleep(500); SendKeepAlive(); _securityLevel = AccessLevel.AccessLevel01; CastInfoEvent("Requesting security access", ActivityType.UploadingBootloader); RequestSecurityAccess(2000); Thread.Sleep(500); CastInfoEvent("Uploading data", ActivityType.UploadingBootloader); int startAddress = 0x102400; Bootloader btloaderdata = new Bootloader(); if (requestDownload()) { for (int i = 0; i < 0x46; i++) { //10 F0 36 00 00 10 24 00 //Console.WriteLine("Sending bootloader: " + startAddress.ToString("X8")); // cast event float percentage = ((float)i * 100) / 70F; CastProgressWriteEvent(percentage); byte iFrameNumber = 0x21; if (SendTransferData(0xF0, startAddress, 0x7E8)) { // send 0x22 (34) frames with data from bootloader CANMessage msg = new CANMessage(0x7E0, 0, 8); for (int j = 0; j < 0x22; j++) { ulong cmd = 0x0000000000000000; // 0x34 = upload data to ECU msg.setData(cmd); msg.setCanData(iFrameNumber, 0); msg.setCanData(0x00, 1); msg.setCanData(0x01, 2); msg.setCanData(0x02, 3); msg.setCanData(0x03, 4); msg.setCanData(0x04, 5); msg.setCanData(0x05, 6); msg.setCanData(0x06, 7); iFrameNumber++; if (iFrameNumber > 0x2F) iFrameNumber = 0x20; if (!canUsbDevice.sendMessage(msg)) { AddToCanTrace("Couldn't send message"); } Thread.Sleep(1); } // send the remaining data m_canListener.setupWaitMessage(0x7E8); // now wait for 01 76 00 00 00 00 00 00 CANMessage response = new CANMessage(); response = new CANMessage(); response = m_canListener.waitMessage(1000); ulong datax = response.getData(); if (getCanData(datax, 0) != 0x01 || getCanData(datax, 1) != 0x76) { return false; } SendKeepAlive(); startAddress += 0xEA; } else { Console.WriteLine("Did not receive correct response from SendTransferData"); } } } return true; }