AVR-Bootloader mit Verschlüsselung von Hagen Re

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Grundlagen

Bootloader

siehe hier: Bootloader

XTEA Verschlüsselung

Extended Tiny Encryption Algorithm

Forumsbeitrag

Connect to AVR

1-wire

Historie

Version 1.0

  • 29.03.2008 05:30
    • unterstützt alle selbstprogramierbaren 8Bit-AVRs
    • 1-Wire und 2-Wire RS232 Modus, invertierbar
    • Baudraten je nach XTAL von 600 bis zu 256000 Baud per USB-RS232
    • XTEA Verschlüsselung für FLASH/EEPROM Schreiben
    • 16Bit CRC für die komplette Datenübertragung, Senden & Empfangen
    • FLASH schreiben/löschen mit implizitem Verify
    • separates FLASH Verify
    • EEPROM schreiben/lesen, schreiben mit implizitem Verify
    • SRAM schreiben/lesen
    • Baudrate Detektion, Baudrate kann aber auch fest eingestellt werden
    • WatchDog Unterstützung
    • fertige PC-Software mit HEX-Editoren für EEPROM & SRAM/Registerfile/IO Ports
    • ATmega128 bei 115200 Baud in 16 sec mit Verschlüsselung 22 Sekunden
    • im ZIP Datei AVRootloader.txt enthält Anleitung
    • je nach Konfiguration zwischen 344 bis 906 Bytes Codegröße, letzters mit XTEA Entschlüsselungsfunktion
  • 07.04.2008 19:45
    • Anleitung zur Benutzung der Verschlüsselung und der prekompilierten ACY- Dateien beigefügt
    • Wenn AVRootloader.exe eine Verbindung herstellen möchte so zieht er den DTR-Pin der RS232 auf High-Pegel. Damit kann man über DTR eine Stromversorgung zb. eines Treibers machen, aber bitte RS232 Spezifikationen beachten
    • unter Win2k/Win95 wurde das Fenster der AVRootloade.exe nicht in den Vordergund geholt. Stattdessen blinkte nur das Icon in der Tastleiste. Dieses Problem wurde behoben (ist aber auch Standardverhalten auf diesen Windowsversionen)
    • Darstellungsprobleme im SRAM-Content HEX-Editor beseitigt
    • mit rechten Mausklick in diese HEX-Editoren öffnet sich ein Popup-Menu mit dem man zb. selektierte Zellen im Editor rot markieren kann. Beim Zurückschreiben in den AVR oder beim Speichern in eine Datei werden dann nur diese selektierten Zellen berücksichtigt. Mit diesem Feature kann man zb. selektive EEPROM Dateien erzeugen die nur ausgeählte Speicheraddressen schreiben.
    • die AVR Device Liste in AVRootloader.asm (.includes) wurde auf den neusten Stand gebracht
    • die Datei AVRootloader.dev wurde ebenfalls auf den neusten Stand gebracht, möchte man diese neu erzeugen lassen so muß AVRStudio im System korrekt installiert sein. Löscht die aktuelle AVRootloader.dev Datei und startet die Anwendung. Aus den XML Part Description Files des AVR Studios wird dann eine neue AVRootloader.dev erzeugt.
    • Howto für selektive EEPROM Updates hinzugefügt
  • 08.04.2008 10:15
    • Bugfix: Die Funktion "make Password" veränderte die Formatierung des Passwortes in der AVRootloader.asm und in der AVRootloader.ini falsch.

Version 2.0

  • 23.04.2008 02:48
    • Die SIGNATURE_CRC wurde entfernt. Der neue ATtiny88 überschneidet sich mit dem ATmega161 beim Verfahren der Version 1.0. Nötige Änderung dafür ist in AVRootloader.asm -> BootSign: die 4 Bytes. Die PC-Software kann aber weiterhin mit der Version 1.0 benutzt werden, ist also abwärtskompatibel.
    • AVRootloader.dev aktualisert auf die neusten AVRs und beim ATMega161/ ATmega161comp. (ATmega162 im 161 Kompatibilitätsmodus) Fehler aus den AVR Studio XML Dateien beseitigt. ATMEL hat dort falsche Angaben gemacht.
    • Die PC-Software ist intern komplett neu geschrieben worden. Wer Interesse hat kann die AVRootloader.DLL benutzen um die komplette Funktionalität der PC-Software (ohne GUI) in seine eigene Anwendung zu integrieren. Diese DLL implementiert die Funktionalität über Interfaces, sollte also auch über andere Programmiersprachen nutzbar sein. Delphi Header in AVRootIntf.pas. Über diese Schnittstelle kann man auch eigene Communications-Interfaces vorgeben über die dann die AVRootloader Schnittstelle kommuniziert, zb. AVR309 USB oä.
    • Über AVRootloader.ini in Section [Timeouts] RTSPulse=? kann man das Verhalten beim Verbindungsaufbau der PC-Software von der RTS-Leitung der RS232 einstellen. Man kann über diese Option also den RTS PIN der RS232 zb. für x Millisekunden von HIGH auf LOW und wieder HIGH ziehen. Damit könnte man, über Serienwiderstand und Schottky Diode den RTS Pin auf den RESET Pin des AVRs klemmen. Bei jedem Verbindungsaufbau der PC-Software zum Bootloader wird somit autom. der AVR in den Reset versetzt.
    • Wer möchte kann ein Copyright String oä. in AVRootloader.asm einbauen. Dieser String wird dann in der PC-Software in der Device Information angezeigt.
    • Das Timeout-Handling in der Baudratedetektion wurde geändert.
  • 24.04.2008 19:06
    • Bugfix: Mit bestimmten HEX Files, bei denen die Speicherblöcke nicht linear aufsteigend in ihrer Addresse vorlagen, kam es zu Fehlern. Die PC-Software hat also HEX Files falsch interpretiert. Unter normalen Umständen dürfte das aber kein Problem sein da die meisten Tools wie WinAVR GCC oder AVR Studio solche HEX Files immer mit linear nachfolgenden Addressen erzeugen.
  • 06.05.2008 13:52
    • Der Bootloader relevante Teil befindet sich auch in der AVRootloader.dll. Einbau in eigene Delphi Anwendung wie im Attachment gezeigt.

Version 3.0

  • 18.01.2009 21:36
    • Versionsverwaltung für eure eigene Software in AVRootloader.ASM eingebaut.
    • Autodetektion der COM Ports auf dem PC.
    • Autodetektion des COM Ports an dem der Bootloader angeschlossen ist.
    • Neu ist die Möglichkeit das die PC-Software bei der Verbindung einen definierbaren String sendet. Die Anwendung im AVR, die selber die UART benutzt, kann diesen Befehl dann benutzen um in den Bootloader zu springen.
    • Auswahlbox für das BootSign in PC-Software eingebaut.
    • Bugfix: Fehler beim Auswerten der Kommandozeile beseitigt, Leerzeichen im Pfad wurde als Separator erkannt.
    • Bugfix: Fehler bei der BootMsg beseitigt.
    • Der Wert im Eingabefeld "ACY Info" in der PC-Software wird beim Kompilieren einer ACY Datei in diese lesbar gespeichert.
    • Kompatibilität zum Bootloader Version 1 und 2 sollte gewährleistet sein.
    • einige kleinere Darstellungsfehler beseitigt
    • alle Dateien wie AVRootloader.dev und AVRootloader.ASM wurden auf die neusten AVRs aktualisiert (AVR Studio 4.15 Build 623)
    • neuer Parameter -SBOOT für die Kommandozeile eingebaut, damit kann man das BootSign für den Bootloader-Connect vorgeben
    • für diejenigen die die AVRootloader.DLL benutzen. Diese ist nicht kompatibel zur alten Version !
  • 19.01.2009 16:05
    • Friendlyname der COM Ports wieder rausgenommen
    • Weiteren Parameter für die Kommandozeile eingebaut, Parameter -V. Dieser setzt die Daten für die Versionsverwaltung.

Version 4.0

  • 08.02.2009 22:24
    • - RS485/Profibus Unterstützung, dh. im Halbduplex Verfahren kann man RS485 Treiber benutzen die einen Data Enable (DE) Eingang besitzen.
    • verändertes Verhalten des Watchdog Timers.
    • Mit UseSaveMCUCSR=1 wird der Wert aus dem Reset-Register MCUCSR in den Stack gespeichert (RAMEND) bevor er in den WDT Routinen gelöscht wird.
    • Mit UseBootMode=0/1/2/3/4 kann man das Startverhalten des Bootloaders beeinflussen.
    • Mit UseBootVector=1 wird am Ende des FLASHs ein Sprungvektor zum Einsprungspunkt des Bootloaders erzeugt.
    • Mit UseSpecialFuncs=1 werden am Ende des Bootloaders verschiedene zusätzliche Funktionen und eine Sprungtabelle eingebunden.
    • im Ordner \test\ ein Test-Projekt in WinAVR GCC zur Demonstration der Bootloader Funktionalität. Im Headerfile AVRootloader.h eine universelle Schnitstelle zum Bootloader.
    • durch einige Optimierungen im Code konnte der benötigte FLASH reduziert werden
    • mehr Kommentierungen
    • Bugfix: die AVR Typen ATMega161/ATMega163/ATMega323 benötigen bei der Ausführung des SPM Befehles ein spezielles programmtechnisches Vorgehen. Diese wurde gefixt und eingebaut.
    • Bugfix: der Connect Prozess wurde verändert. Die Abfrage/das Warten auf das BootSign von der PC-Software benutzt nun einen Timeout innerhalb BootDelays. Bei der alten Version mit UseAutobaud=1 konnte es an dieser Stelle zu einer Endlosschleife kommen, der Bootloader verblieb also bei einem Kommunikationsabbruch endlos in dieser Schleife.
    • Bugfix: im neuen Connect Prozess erwartet der Bootloader nach dem Empfang des BootSign eine 16 CRC über diese BootSign. Dies inkrementiert die Stabilität des Connect Prozess und beseitigt gleichzeitig ein Problem beim Connect. Bei der alten Version konnte man beim BootSign "BOOT" zb. auch mit einem Wert wie "BOOT1234" einen Connect bekommen. Die zusätzlichen Zeichen "1234" störten die Command-FSM des Bootloaders und es stellt auch ein Sicherheitsrisiko dar wenn man das BootSign als Passwort betrachtet.
    • Bugfix: wenn UseVersioning=1, UseCrypt=1 und UseCryptFLASH=1 war so wird ja die AppVersion Nummer auf cryptographisch sichere Weise bei einem Update per ACY Datei überprüft. Diese Überprüfung war nicht ganz korrekt. Ist gefixt.
    • PC-Software: die Kommunikationsgeschwindigkeit wurde durch Optimierungen beschleunigt.
    • PC-Software: einige Fehler in der Bedienung etc.pp. beseitigt
    • PC-Software: neue Einstellungen in der AVRootloader.ini
      • [System]-AppCmd, [System]-AppCmdResponse, [Timeouts]-AppCmd.
      • [Timeouts]-KeepAlive ist ein Interval in Millisekunden in dem die PC-Software beim Bootloader nachfragt ob er noch aktiv ist.
      • [Timeouts].Options.
    • PC-Software: der neue Connect Prozess geht von einer 2-Wire Verbindung aus und schaltet erst während des Connects dynamsich auf 1-Wire um wenn dieser benutzt wird. In der alten Version war es umgekehrt. Diese Veränderung verbessert die Connect Performance und Stabilität.
    • PC-Software: XPORT (TCP/IP zu RS232-Wandler) wird sauber unterstützt.

Version 5.0

  • 28.02.2009 21:27
    • mit UseResetDelay=0 oder 1 stellt man das Timeout Verhalten des Bootloaders ein.
    • UseSpecialWrite, UseSpecialWriteBoot, UseSpecialRead, UseSpecialMsg sind neu.
    • Das WinAVR GCC Test projekt für den M162 demonstriert den Zugriff auf diese Anwendungsbezogenen Funktionen.
  • 12.03.2009 05:50
    • Bugfix: Das RS485 Problem vom Markus C. wurde gefixt. Nun funktioniert der Bootloader verifiziert auch mit RS485 Bussen. Getestet habe ich mit einen FTDI FT232R an MAX487 -> SN75LBC176 an ATMega162 bis 256kBaud.
    • Bugfix: Das Problem mit extrem geringen XTAL Werten (siehe oben 128kHz) und den Timeout Schleifen ist ebenfalls gefixt.
    • Desweiteren wurden einige Watchdog Reset Aufrufe anders plaziert.

Version 6.0