mcpg
K-CPU-Modul Programmierung
1 AbstractDas vorliegende Dokument beschreibt die einzelnen Arbeitsschritte zur Programmierung des K-CPU-Moduls mit Hilfe eines ISP-Programmieradapters [1] und der Programmiersoftware avrdude. Die Beispiele wurden unter Linux (Ubuntu und Gentoo/Sabayon) durchgeführt, sollten jedoch auch unter Windows und MACOS lauffähig sein.
2 Die ToolchainUm den Mikrocontroller "Leben einhauchen" zu können, d.h. auf den Flash, das EEPROM oder die Fusebytes zuzugreifen und verändern zu können, gibt es diverse Hardware- und Softwarekombination. Wir werden in dieser Anleitung die Toolchain [2] ISP-Programmer und avrdude verwenden.
2.1 avrdudeAVRdude [3] wurde von Brian S. Dean entwickelt es zeichnet sich dürch folgende Punkte aus:
Die Software ist auf jeder gängigen Linux-Distribution zu finden. Bei Debianbasierten Distributionen kann man das Programm einfach mit apt-get install avrdude installieren. Bei Gentoo genügt emerge -av avrdude bzw. equo -a avrdude bei Sabayon. Falls sie sich noch nicht sicher sind, ob sie avrdude auf ihren PC installieren wollen, können sie auch eine AVR-Live-CD [4] [5] [6] herunterladen und damit starten. Die AVR-Live-CDs bauen auf eine der zahlreichen Linux-Distribution auf, die mit allen nötigen Tools zur Programmierung von AVR-Mikrocontrollern ergänzt wurden, so dass sie i.d.R. nichts zu installieren brauchen.
2.1.1 Konfigurationsdatei für avrdudeMit Hilfe einer Konfigurationsdatei kann man Default-Einstellungen vornehmen. Bei Linux findet man die Datei unter /usr/local/etc/avrdude.conf oder /etc/avrdude.conf*. Alternativ kann jeder User in seinem Homevrzeichnis die Datei .avrduderc anlegen. Unter Windows muss die Datei avrdude.rc im selben Verzeichnis liegen wie avrdude.exe Die globalen Einstellungen werden von den lokalen Einstellungen, diese wiederum von den Optionen auf der Komandozeile, überschrieben! In der Konfigurationsdatei kann man verschiedene Standardwerte vorgeben:
Beispiel für eine avrdude.conf: # # Overall avrdude defaults # #default_parallel = "/dev/parport0"; #default_serial = "/dev/ttyS0"; # USBprog (Sauter) default_serial = "usb"; default_programmer = "avrisp2"; # USB-ISP (Fa.Stange) #default_serial = "/dev/ttyACM0"; #default_programmer = "stk500"; Die Kommentarzeichen sind in Abhängigkeit des verwendeten Programmieradapters zu setzen. Duch die Einträge in den Konfigurationsfiles können die Parameter -c und -P in der Komandozeile entfallen. Ein einfaches avrdude -p m16 -n -v genügt dann um einen ATmega16 Infos zu entlocken. Ebenso können die entsprechenden Optionen im Makefile weggelassen werden, wodurch dieses nicht jeweils an den verwendeten Programmer angepasst werden muss. 2.2 ISP-ProgrammerMan unterscheidet prinzipiel zwischen passiven und aktiven Progrrammieradaptern. Passive Programmer sind im Aufbau relativ einfach gehalten und eigenen sich deshalb gut für den Nachbau. Aktive Programmer enthalten einen eigenen Mikrocontroller, sind dadurch aufwendiger und teuerer aber dafür auch weniger störanfälig. Dem Einsteiger würden wir zu einem der beiden nachstehend beschriebene Adapter raten. 2.3 USB-ISP-Programmer2.3.1 USBprogUSBprog [7] ist ein freier Programmieradapter, von Benedikt Sauter entwickelt wurde. Über eine USB-Schnittstelle kann man bequem verschiedene Firmware Versionen aus einem Firmware-Pool einspielen. Der Adapter kann aktuell außer für das Programmieren und Debuggen von AVR und ARM Prozessoren auch als USB zu RS232 Wandler, als JTAG Schnittstelle oder als einfacher I/O-Port (10 Leitungen) eingesetzt werden.
Nach dem Anstecken am USB-Port sollte sich der Programmer mit seiner Device-ID melden: dubhe zoli # lsusb | grep Atmel Bus 006 Device 004: ID 03eb:2104 Atmel Corp. AVR ISP mkII dubhe zoli # Der User root könnte schon mit dem Programmer arbeiten. Der Zugriff auf das Device soll jedoch jedem User möglich sein. Dazu gibt es 2 Möglichkeiten: A. mit Hilfe der udevrules Dazu wird das Config-File /etc/udev/rules.d/020_permissions.rules editiert und darin vor LABEL="permissions_end" ein Eintrag mit der entsprechenden Device-ID vorgenommen: $ vi /etc/udev/rules.d/020_permissions.rules # AVR ISP mkII Atmega Programmer SUBSYSTEM=="usb_device", SYSFS{idVendor}=="03eb", SYSFS{idProduct}=="2104", GROUP="plugdev", MODE="0660", SYMLINK+="foo" LABEL="permissions_end Die Änderungen werden durch Neuladen der UDEV-Configuration wirksam gemacht: udevcontrol reload_rules B. über uucp-Gruppen-Mitgliedschaft Einfacher geht es, wenn man die betreffenden User der Gruppe uucp in /etc/groups zufügt.** Mit der Firmware zur Programmierung von Atmel AVR Prozessoren wird er am Serialport als usb-Device mit avrisp2 angesprochen. Der Befehl hierzu sieht wie folgt aus: avrdude -p m16 -n -v -P usb -c avrisp2 sofern man nicht wie oben beschrieben die Parameter bereits in eines der Konfigurationsfiles eingetragen hat. 2.3.2 Der USB-ISP-Programmer der Fa. StangeDer Programmer von Stange steckt in einem robusten kleinem Plexiglasgehäuse. Der Status des Programmers wird durch 2 LEDs angezeigt. Die USB-LED softblilnkt im Leerlauf und blinkt bei USB-Aktivität. Die Target-LED ist im Leerlauf aus und blinkt bei Targetzgriffen, Der Programmer ist mit zwei Miniatur-Schiebeschaltern versehen. Über diese kann das Target mit Spannung versorgt werden:
Die maximale Strombelastung beträgt 120 mA im 3,3 V Bereich und 150-500 mA im 5 V Bereich. Hinweis! Wird das Targetboard (KCPU-Modul) über die Hohlsteckbuchse versorgt, ist auf jeden Fall der Schalter 2 auf off zu stellen. Die Stellung des Schalters 1 ist dann beliebig. Der Programmer der Fa. Stange meldet sich bei mir mit: Bus 001 Device 009: ID 16c0:2a9b Van Ooijen Technische Informatica Das angelegte Device heisst ttyACM0. Die Ziffer am Ende wird beim Anschluß mehrerer Programmmer hochgezählt. Das zweite heißt dann somit ttyACM1 usw. Als Programmer(typ) (Option -c) ist STK500 einzustellen. avrdude -p m16 -n -v -P usb -c STK500 Ansonsten wie unter USBprog beschrieben. 2.3.3 Sonstige ISP-ProgrammieradapterHier werden weitere Programmieradapter beschrieben 3 Programmierung3.1 Fusebits:Bevor wir loslegen noch ein paar Worte zu den Fusebits. Die Fusebits dienen zur Konfiguration und Einstelllung verschiedener Parameter des Mikrocontrollers. Zu den wichtigsten Einstellungen bei der AVR-Mega Serie zählen:
Informationen zu den einzelnen Fusebits sind im Datenblatt zum Prozessor im Abschnitt "Memory Programming" zu finden und sehr gut im folgenden Buch vom Franzisverlag beschrieben: "AVR-RISC - Embedded Software selbst entwickeln" Die Fusebits sorgen beim Einsteiger des öfteren für Verwirrung, da eine inverse Logik benutzt wird. Das Fusebit ist 0 wenn es programmiert (an) ist und 1 wenn es unprogrammiert (aus) ist. Um die Verwirrung zu verfollständigen werden bei Brennprogrammen und der gleichen Programmierte Fusebits mit einem Häckchen dargestellt (und umgkehrt). MERKREGEL! FUSEBIT = ein (aktiviert) = 0 = mit Häckchen FUSEBIT = aus (inaktiv) = 1 = ohne Häckchen Hier die wichtigsten Fusebits mit ihrer Standarteinstellung und Bedeutung:
Die Fusebits sind beim ATmega in einem Low- u. Highfuse(byte) zusammengefaßt. Mit dem Fusebitcallkulator unter http://www.engbedded.com/fusecalc/ lasssen sich die erforderlichen Werte relativ einfach ermitteln. Standartmäßig (bei Neuauslieferung) ist der ATMega16 auf folgende Werte eingestellt:
ACHTUNG! Vorsicht beim Verändern von RSTDIBL [ ] und SPIEN [x], der Mikrocontroller kann dann nicht mehr ohne weiteres umprogrammiert werden. 3.2 Programmiergerät anschließenSchließen sie nun den usb-Programmer an ihren PC an [8] . Das K-CPU-Modul kann auch direkt über den usb-Programmer versorgt werden. Dazu ist der Jumper 2 wie im folgendem Bild gezeigt zu stecken. Am Hohlstecker darf in diesem Fall natürlich kein Netzteil bzw. Stromversorgung angeschlossen werden!
Nach Eingabe des Befehls "lsusb" [9] an der Konsole sollten sie eine Meldung über ihre angeschlossenen USB-Geräte erhalten. Darin sollte der Programmieraadapter "AVR ISP mkII" mit auftauchen: phecda ~ # lsusb Bus 006 Device 001: ID 1d6b:0001 Bus 005 Device 001: ID 1d6b:0001 Bus 001 Device 001: ID 1d6b:0002 Bus 003 Device 001: ID 1d6b:0001 Bus 004 Device 004: ID 03eb:2104 Atmel Corp. AVR ISP mkII Bus 004 Device 002: ID 056a:0065 Wacom Co., Ltd Bus 004 Device 001: ID 1d6b:0001 Bus 002 Device 001: ID 1d6b:0002 Wenn nicht wurde der Programieradapter von ihrem PC nicht erkannt.
Das K-CPU-Modul wird dann über das SPI-Interface (10 pol. Wannenstecker neben dem Reset-Knopf) mit dem Programmer verbunden. Jetzt sollte die grüne LED aufleuchten falls sie das K-CPU-Modul über den Programmer versorgen. 3.3 Fusebits auslesen und ggf. verändernWeiter geht es mit dem Test der Programierschnittstelle. Dazu liest man am besten gleich die Fusebits des Mikrocontrollers aus und speichert sie in hfuse.txt und lfuse.txt ab, indem man folgendes an der Konsole eingibt: avrdude -c avrispv2 -P usb -p m16 -U hfuse:r:hfuse.txt:s -U lfuse:r:lfuse.txt:s -B 10 Will man sie nur ansehen, genügt: avrdude -c avrispv2 -P usb -p m16 -U hfuse:r:-:h -U lfuse:r:-:h -B 10 Hinweis! Der ISP Takt muss unter oder 1/4 des Systemtakts der CPU sein. Mit der Option -B kann der ISP Takt heruntergesetzt werden. Laut B. Sauter funktioniert die -i Option mit avrdude noch nicht. Bei einem neuen Atmel ATMega16 sind im Auslieferungszustand die Fusebits auf den internen Quarz gesetzt. Um den externen Quarz mit 16 Mhz zu aktivieren, müssen die Fusebits angepasst werden (externern Quarz > 8 MHz, wait 64 ms und JTAG-Interface off = 1 = not programmend): avrdude -c avrispv2 -P usb -p m16 -U hfuse:w:0xD9:m -U lfuse:w:0xFF:m -F -B 10 Einstellungen des ATMega16 anzeigen; die Option "-B 10" sollte jetzt weggelassen werden können: avrdude -c avrisp2 -P usb -p m16 -n -v
3.4 Programm in den Flashspeicher des Mikrocontrollers schreibenVorausgesetzt sie haben bereits einen laufähigen Binärcode (in diesem Fall blink.hex), können sie das Programm mit folgendem Befehl in den Flashspeicher des Mikrokontrollers schreiben: avrdude -c avrispv2 -P usb -p m16 -U flash:w:blink.hex Umgekehrt geht es auch. Auslesen des Flashspeichers und abspeichern des Hexfiles (hier im Intelformat): avrdude -c avrispv2 -P usb -p m16 -U flash:r:"programname.hex":i 4 Anhang4.1 Weitere Unterlagen und Links
Return to Top |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Postfach 11 01 48 86026 Augsburg
Telefon: (0821) 59 21 89 |