//************************************************************************* // Bootloader protocol definitions //------------------------------------------------------------------------- #define COMMAND 0xA5 // Command sequence start #define ESCAPE COMMAND #define CONNECT 0xA6 // connection established #define BADCOMMAND 0xA7 // command not supported #define ANSWER 0xA8 // followed by length byte #define CONTINUE 0xA9 #define SUCCESS 0xAA #define FAIL 0xAB #define ESC_SHIFT 0x80 // offset escape char #define PROGEND ESC_SHIFT #define REVISION 0 // get bootloader revision #define BUFFSIZE 1 // get buffer size #define SIGNATURE 2 // get target signature #define USERFLASH 3 // get user flash size #define PROGRAM 4 // program flash #define START 5 // start application #define CHECK_CRC 6 // CRC o.k. #define VERIFY 7 // Verify /************************************************************************** Bootloader Protokoll: - Der AVR wird durch Power On in Reset gesetzt. - nach etwa 65ms geht er für etwa 300ms in den Bootloader und startet dann die Application 1. Aktivieren des Bootloaders: Senden des Paßworts "Peda", 0xFF Wiederholen, bis CONNECT empfangen Senden COMMAND Antwort: SUCCESS 2. Erkennung 1-Drahtmodus: Es wird geprüft, ob das 1. Zeichen des Paßworts zurück kommt (Echo). Das CONNECT wird gesendet auf der Startflanke des 0xFF. Protokoll im Eindrahtmodus: In der PC-Software werden die gesendeten Bytes nach einem Kommando gezählt. Erst wenn die gleiche Anzahl Bytes empfangen wurde, werden die nachfolgenden Bytes als Antwort gewertet. Davor werden die Bytes ignoriert (nur gezählt). 3. Abfrage Bootloaderversion: Senden: COMMAND, REVISION Antwort: ANSWER, 0x03, Revision_high, Revission_low, SUCCESS 4. Abfrage Puffergröße: Senden: COMMAND, BUFFSIZE Antwort: ANSWER, 0x03, Buffersize_high, buffersize_low, SUCCESS 5. Abfrage Useflashgrö0e: Senden: COMMAND, BUFFSIZE Antwort: ANSWER, 0x04, Flash_high, Flash_mid, Flash_low, SUCCESS 6. Programmieren: Senden COMMAND, PROGRAM Senden Bytes bis Buffersize erreicht Antwort: CONTINUE Wiederholen, bis alle Bytes programmiert wenn Byte == ESCAPE: senden ESCAPE, (ESCAPE+ESC_SHIFT) wenn Byte == 0x13: senden ESCAPE, (0x13+ESC_SHIFT) Programmieren beenden: senden ESCAPE, ESC_SHIFT Antwort: SUCCESS 7. Verify Senden COMMAND, VERIFY Senden Bytes wenn Byte == ESCAPE: senden ESCAPE, (ESCAPE+ESC_SHIFT) Programmieren beenden: senden ESCAPE, ESC_SHIFT Antwort: SUCCESS - Verify o.k. FAIL - Verfy failed 8. Start Applikation Senden COMMAND, START Antwort: keine **************************************************************************/