wiki:FirmwareFlashen

Flashen der c't-Lab-Firmware

Tagesaktuelle Versionen der Firmware zu jedem Modul sowie die LabVIEW-Demo- und Abgleichprogramme finden Sie unter "Firmware" in meinem SubVersion-Repository, auch zu erreichen unter "Browse Source". Üblicherweise werden Sie zur Firmware-Installation nur die .HEX- und die .EEP-Dateien benötigen, die Pascal/Assembler?-Sourcen liegen nur zur Dokumentation oder für Eigenentwicklungen bei. Beim Download beachten: Der Trac-Source-Browser speichert "mit der rechten Maustaste" dummerweise nur HTML-Code. Zum Firmware-Download mit dem Browser bitte die ZIP-Dateien verwenden, diese enthalten sowohl das .HEX- als auch das .EEP-File. Nach einem Klick auf das ZIP-File sollte das System den Download der Datei vorschlagen.

Ich empfehle dringend, die Firmware der diversen c't-Lab-Controller in circuit zu flashen ("brennen", "programmieren"), also in der fertig aufgebauten (d.h. mit einem unprogrammierten ATmega-Controller bestückten) Schaltung (bei den Platinen mit Controller in SMD ohnehin nicht anders möglich). Beim Flashen des ADA-IO-Moduls darf keine Erweiterungskarte und beim FPGA-Modul keine SD-Karte stecken, da die Programmiersignale gestört werden können.

Die Programmdaten, vulgo die modulspezifische Firmware, erhält der ATmega über die ISP-Schnittstelle auf jedem c't-Lab-Modul, die übrigens der (weit verbreiteten) ISP-Anschlussbelegung der Entwicklungssysteme STK200/300/500 von Atmel gleicht (siehe auch Anmerkung ganz unten). Die Daten landen im prozessorinternen Flash-Speicher, der sich bis zu 10.000 mal neu bespielen lässt. Es gibt verschiedene PC-Programme für Linux und Windows, mit denen man die Firmware in den ATmega senden und auch daraus auslesen kann. Wir haben mit dem kostenlosen Programm PonyProg von Claudio Lanconelli gute Erfahrungen gesammelt, die neueste PonyProg-Version 2.07c versteht sich auch mit dem ATmega644. Linux-Nutzer sollten das Programm avrdude verwenden, das im Wiki zum Projekt c't-Bot näher beschrieben ist.

Sie benötigen zum Flashen der Firmware neben PonyProg (bitte diese Hinweise beachten) nur noch einen sehr einfachen ISP-Programmieradapter für den Druckerport, der sich in wenigen Minuten mit Bauteilen aus der Bastelkiste aufbauen lässt. Sie können beispielsweise den zum BlueMP3-Projekt in c't 09/04, S. 202 vorgestellten ISP-Adapter verwenden, für den es unter der Bestellnummer 0410203 für 4,00 EUR bei eMedia eine Leerplatine und bei segor einen Bausatz gibt. Die sind ist mit der ISP-Schnittstelle aller c't-Lab-Module pinkompatibel. Kompatible, fertig aufgebaute ISP-Programmieradapter erhalten Sie auch recht preiswert (ca. 12 Euro) bei der Embedit.

Schaltplan des c't-ISP-Programmieradapters: Die Firmware purzelt aus dem PC über die Parallelport-Pins in den ATmega, genauer gesagt über die ISP-Schnittstelle.

SMD-Bestückung der Programmieradapter-Platine 0410203 von emedia, die eigentlich zum BlueMP3-Projekt gehört. Beachten Sie beim Anschluss an die c't-Lab-Module die Ausrichtung des Flachkabels, Pin 1 liegt hier gegenüber R1.

Zur Programmierung muss die jeweilige c't-Lab-Platine mit Strom versorgt werden, der ISP-Programmieradapter wird mit dem ISP- Steckverbinder der zu programmierenden c't-Lab-Platine über ein 10poliges Flachbandkabel 1:1 verbunden. Mit dem eingesetzten Treiberbaustein haben wir die Firmware über bis zu zwei Meter lange Kabel erfolgreich eingespielt. Stellen Sie nach dem Start von PonyProg unter Setup zunächst die richtige Schnittstelle/Interface? ein. Unter Win2000/XP muss Parallel und AVR ISP I/O gewählt werden.

Mit einem Klick auf Probe kann die richtige Funktion des Druckerports und des ISP-Adapters überprüft werden. Stellen Sie nach Drücken von OK unter Device den Typ AVR micro/ATmega32 bzw. ATmega644 ein.

Besonderheiten ATmega32

Neu ausgelieferte Atmel-Controller wie der bei den meisten Modulen verwendete ATmega32 werden ab Werk mit einigen gesetzten Konfigurations-Bits ausgeliefert, die vor der ersten Inbetriebnahme unbedingt gelöscht werden müssen, sonst läuft die Firmware nicht einwandfrei; unter anderem funktionieren Port C des ATmega32 und damit auch die DA- und AD-Wandlerkarten des ADA-IO-Moduls nicht, wenn das JTAGEN-Bit angekreuzt ist!

Wählen Sie nach Anschluss des c't-Lab-ISP, des Programmieradapters und der Stromversorgung in PonyProg den Menüpunkt "Security and Configuration Bits..." (Ctrl-S) und löschen Sie evt. Häkchen mit Clear All. Nur die folgenden Bits sollten beim ATmega32 angekreuzt sein (das SPIEN-Bit ist irrelevant):

Besonderheiten ATmega168

Beim ATmega168 (ACV-Modul) gilt prinzipiell das für den ATmega32 Gesagte, hier sind allerdings nur die Fuses BODLEVEL0 und BODLEVEL1 anzukreuzen.

Besonderheiten ATmega644

Der ATmega644 (nur verwendet beim FPGA-Modul) hat eine abweichende Fuses-Belegung. Es ist hierbei die PonyProg-Version 2.07c Beta nötig, vorangegangene zeigten mit dem ATmega644 mitunter ein Fehlverhalten. Achtung: Eine falsche Fuses-Konfiguration kann dazu führen, dass sich der Baustein mit dem Programmiergerät nicht mehr ansprechen lässt.

Sollte sich der ATmega644 durch falsch gesetzte Fuses tot stellen, hilft es meist, ihm ein externes Clock-Signal an Pin XTAL1 zuzuführen, z.B. die Clock des STK500 oder von einem Quarzoszillator (beliebige Frequenz 1 bis 16 MHz).

Wenn man AVR Studio zur Programmierung verwendet, so ist die Fuse-Belegung anders gekennzeichnet. Bei mir geht es mit den Werten FE, DF, FE (extended...low).

Für die Programmierung des ATmega644 sind vor allen weiteren Programmierversuchen unbedingt folgende Bits anzukreuzen:

Im Zweifelsfall hilfreich: Der Fuse-Calculator für AVR

Flashen des Programmspeichers

Anschließend im Dialog auf Write klicken, um die Bits auch im ATmega zu programmieren. Der ATmega ist nun bereit, die Firmware (Program Flash=P) und die EEPROM-Daten (Data=D) aufzunehmen. Beide Teile müssen getrennt geladen und programmiert werden (File/Open?...), dabei Endung .hex (eigentliche Firmware, je nach c't-Lab-Modul) bzw. .eep (zugehörige EEPROM-Defaults) beachten. PonyProg gibt das Target nach dem Flashen (dauert nur einige Sekunden) automatisch wieder frei, das c't-Lab-Modul sollte jetzt die Begrüßungsmeldung senden und die Arbeit aufnehmen (Activity-LED blinkt kurz auf).

Vergessen Sie keinesfalls, den EEPROM-Bereich zu programmieren, andernfalls zeigen die c't-Lab-Module ein Fehlverhalten oder funktionieren gar nicht. Sie können die Kalibrierungs-Parameter bei Firmware-Updates weiterverwenden, indem Sie zunächst den EEPROM-Bereich des Controller auslesen und diese Datei abspeichern, dann die neue Firmware mit der alten EEPROM-Datei programmieren. Bei einigen Firmware-Updates hat sich allerdings die Position einiger Werte verändert, oder es sind elementare neue (z.B. Baudraten-Parameter) hinzugekommen. Beachten Sie auf jeden Fall die Hinweise zu den jeweiligen Updates.

Zur ISP-Programmierung haben wir die "alte" 10-polige Variante des Steckers verwendet. Das diskriminiert u.U. alle Leser, die sich einen AVR ISP MKii zugelegt haben, der hat nur noch die modernere 6-polige Version.

Belegung eines 6->10-Adapters:

6-pol.  10-pol.    Funktion
  1        9       MISO
  2        2       Vcc Target (+)
  3        7       SCK
  4        1       MOSI
  5        5       RESET
  6     4,6,8,10   GND (Masse, 0V)
Last modified 17 months ago Last modified on Jan 25, 2016, 11:12:51 AM

Attachments (5)

Download all attachments as: .zip