AVR-Prommer

Software Lockbits+Fusebits Kalibrierbyte manuelle Auswahl Dateiformat FLASH Dateiformat EEPROM Optionen Beispiele

zurück zur Übersicht

 

Mit Hilfe eines kleinen DOS-Programmes und einer kleinen Zusatzschaltung lassen sich viele MCUs der AVR-Serie über die SPI-Schnittstelle im 'low-voltage'-Modus direkt in der Schaltung programmieren. Das Programm ist voll für den Batch-Betrieb vorgesehen, sodaß alle Einstellungen nur einmal vorgenommen werden müssen, und Fehler durch immer wieder neu anzuklickende Optionen vermieden werden. Die Zusatzschaltung entkoppelt alle SPI-Leitungen vollständig über CMOS-Schalter: der Programmierstecker muß während der Programmentwicklung nicht entfernt werden ! Somit lassen sich kurze Zeiten für Compilieren, Linken und Download von wenigen Sekunden erreichen (neuere PCs + Compiler vorausgesetzt).

Programmieradapter: Mittels einer kleinen Zusatzplatine, die am Parallelport (LPT1 oder LPT2) eines PC betrieben wird, können die meisten Controller der Serie AT90S...., ATtiny.. und ATmega... in der Schaltung programmiert werden. Es werden die Bausteine unterstützt, die sich über die SPI-Schnittstelle im 'Niedrigspannungs-Modus' programmieren lassen.

Wie dem Schaltbild zu entnehmen ist, werden über die vier Schalter IC1A-IC1D eines CMOS4066 ICs die Programmiersignale MOSI, MISO, SCLK und RESET des Controllers mit entsprechenden Aus- und Eingängen des PC-Parallelports verbunden. Diese Verbindung besteht nur in der aktiven Programmierphase; anschließend bleiben die Schalter offen, und behindern nicht die Ports des Controllers. Die Stromversorgung des 4066 und des AVR-Controllers bei der Programmierung wird aus vier Datenleitungen des PC-Ports über vier Dioden D1-D4 und C1 entnommen. Somit ist keine weitere Versorgungsspannung notwendig. Nach der Programmierung kann diese Versorgungsspannung (3-4V bei 20mA) eingeschaltet bleiben (Option '-5') und den Controller versorgen, sofern nicht noch zusätzliche Schaltungsteile mit Strom versorgt werden müssen. Das Programmierkabel kann einige Meter lang sein (6-pol. geschirmt).

Die neue Version der Leiterplatte verwendet aktive Treiber 74HC126; hiermit werden die Signale niederohmig an den Prozessor mit vollem VCC-Pegel angelegt.

Ältere Bauteile (AT90S-Serie) benötigen teilweise eine höhere Versorgungsspannung >4V beim Programmieren, die von neueren Notebooks nicht geliefert wird. Hier empfiehlt es sich, zusätzlich +5V aus der USB-Schnittstelle zu entnehmen. Neuere Bauteile (ATmega+ATtiny) kommen auch mit geringerer Spannung aus.

Für einfache Anwendungen kann auch ein einfacher Programmieradapter zusammengelötet werden, der das Signal 'MISO' direkt mit BUSY des LPT verbindet, und die Signale 'RESET', 'SCLK' und 'MOSI' jeweils über 2k2-Widerstände anschließt. Die Widerstände begrenzen den Strom in die MCU IO-Pins bei fehlender Versorgungsspannung VCC und sind zur Vermeidung von latch-up Effekten notwendig.

Software: Das Programm MEGAPROG.EXE (V1.23 2007-01-29) läuft auf DOS-Rechnern; MEGAPROG_NT (V1.35 2011-07-07) ist für NT-Systeme verfügbar. Die Datei 'inpout32.dll' muß zuvor ins Verzeichnis '..\system' kopiert werden oder im aktuellen Ordner stehen. Programmiert werden zur Zeit die Controller:

Unterstützte MCUs werden automatisch erkannt; die AT90S1200 MCU wird nicht automatisch erkannt, kann aber mit der Option '-X' programmiert werden. Ferner kann die automatische Erkennung mit der Option '-Dnn' überschrieben werden, wobei nn die Nummer des Bauteils aus der angezeigten Liste ist. Diese Liste sowie alle Optionen können mit 'megaprog -?' angezeigt werden.

Lockbits und Fusebits werden mit den Optionen -L, -FL, -FH und -FX eingegeben, sofern die MCU diese unterstützt. Abweichend vom Datenblatt werden die aktiven Bits hier binär mit '1' eingegeben und angezeigt. Die Auswertung der Eingabe erfolgt rechtsbündig, sodaß z.B. '-L11' die beiden unteren Lockbits aktiviert; die oberen bleiben inaktiv! Die Eingabe '-FL' zusammen mit dem Schreibbefehl '-w' deaktiviert alle unteren Fusebits: Aufpassen!!!

Kalibierbyte: Die neueren ATmega und ATtiny MCUs verfügen über interne Oszillatoren, deren exakte Frequenzen 1, 2, 4 oder 8MHz mit Hilfe eines Kalibrierwertes eingestellt werden können. Die Option '-Cn=xxxxx' ermöglicht, das betreffende Kalibrierbyte 'n' (typ. 0-3) in den FLASH Speicher an Hex-Adresse 'xxxxx' abzulegen. Dies ergibt nur in Verbindung mit dem Programmieren des Programmspeichers einen Sinn. Über den Linker kann man freien Platz für das Kalibrierbyte reservieren (z.B. oberhalb der Vectortabelle), oder das Byte oberhalb vom Code abzulegen.

Der Programmierablauf bei Angabe der beispielsweisen Optionen '-C0=50 -ftest.hex -w' ist:

Manuelle Auswahl: Die automatische Erkennung eines Bausteins kann mit der Option '-Dnn' überschrieben werden: 'nn' ist die Nummer aus der Liste der unterstützten Bausteine, wie sie mit '-?' Option angezeigt wird.

Ein spezieller Typ 'MEGA-MEGA' (Anwahl mit -D1) kann verwendet werden, um alle zur Zeit möglichen Bits der ATmega-MCUs zu beschreiben. WARNUNG: leichtfertige Programmierung von Fuse+Lockbits, kann den Baustein derart 'programmieren', daß eine weitere Programmierung über die SPI-Schnittstelle unmöglich wird.

Dateiformat FLASH: Bei der Programmierung des FLASH-Speichers, wird die Quelldatei zunächst in einen Puffer eingelesen und dann in den Baustein programmiert: Einzelbyte-Programmierung oder page-modus werden dabei abhängig von der MCU ausgeführt. Als Input-Dateien werden Intel-Hex und Motorola-S Formate akzeptiert: können auch gemischt sein. Zeilen, die nicht mit ':' oder 'S1', 'S2' oder 'S3' beginnen, werden als Kommentar gewertet und ignoriert. Beim Auslesen des FLASH-Speichers werden Intel-Hex Dateien erzeugt, sofern die Codegröße unter 64KB liegt (0xff-Werte am Ende werden nicht gespeichert); anderfalls werden S2-Datensätze in die Datei geschrieben.

Dateiformat EEPROM: Beim Programmieren des EEPROM werden Intel-Hex Dateien erwartet: nur die Bytes, die in der Quelldatei (-edateiname) stehen, werden programmiert ! Beim Auslesen werden immer Intel-Hex Dateien erzeugt, wobei standardmäßig der gesamte EEPROM Inhalt gespeichert wird: 0xff kann hier durchaus ein gewollter Wert sein und nicht nur einen unbenutzten Platz nach Löschung ausweisen. Falls die 0xff-Werte am Ende des EEPROM nicht relevant sind können sie mit der Option '--' beim Abspeichern weggelassen werden.

Optionen: Nachfolgend sind die möglichen Optionen (Version 1.13 vom 2002-11-21) aufgeführt; die Reihenfolge ist beliebig:

-?

zeigt alle Optionen und die Bauteilliste an

-pn

Auswahl des Printerports 1 - 3, default 1

-fdateiname

Quell- oder Zieldatei für FLASH (Intel-HEX oder Motorola S-records !)

-edateiname

Quell- oder Zieldatei für EEPROM (Intel-HEX)

-r

auslesen von FLASH / EEPROM (abhängig von -f oder -e)

-v

vergleichen von FLASH / EEPROM mit Quelldatei (-f oder -e)

-w

löschen und programmieren von FLASH / EEPROM / Lockbits

-E

löschen von FLASH / EEPROM / Lockbits

--

beim Auslesen+Speicher des EEPROM 0xff am Ende ignorieren

-X

Programmierung von AT90S1200 erzwingen

-xn

Programmierimpuls für FLASH in ms: 2-50; default automatisch

-yn

Programmierimpuls für EEPROM in ms: 2-50; default automatisch

-Lbbbbbb

Lockbits binär programmieren (-w), wobei '1' ein gesetztes Bit bedeutet

-FLbbbbbbbb

untere fuse-bits binär programmieren (-w), '1' bedeutet aktives Bit

-FHbbbbbbbb

obere fuse-bits binär programmieren (-w), '1' bedeutet aktives Bit

-FXbbbbbbbb

erweiterte fuse-bits binär programmieren (-w), '1' bedeutet aktives Bit

-Cn=xxxxx

Kalibrierbyte Nr. 'n' in FLASH-Adresse 'xxxxx' (hex) schreiben (-w)

-Wn

einfügen von Wartezyklen (n = 20-1000µs) bei AVR-Clk < 1MHz

-Dnn

MCU Nr. 'nn' aus der nachfolgenden Liste vorgeben

-5

Versorgungsspannung (aus LPTx D1-D4) bleibt eingeschaltet

 

Beispiele:

 

Es ist eine kleine Leiterplatte verfügbar, die direkt an einen 25-pol. Sub-D-Stecker angelötet werden kann und samt Bauteilen (4066-SMD) in einem Steckergehäuse Platz findet. Ausgangsseitig werden die vier Programmiersignale, GND und VCC ausgegeben. Ein Lötpad GND_P2 kann direkt mit der Abschirmung des Programmierkabels verbunden werden.

Verfügbarkeit bitte erfragen.

Nicht alle MCUs mit allen Optionen konnten bislang getestet werden. Daher Anregungen und Fehlerberichte bitte an:

zurück zur Übersicht