Pollinboard

aus dem Wiki des Entropia e.V., CCC Karlsruhe

Das Atmel-Evaluations-Board von Pollin ist eine recht günstige, universelle und einfache Möglichkeit, um den Zugang zu Atmelspielereien zu finden. Hier sollen die ersten Schritte beschrieben werden, wie man mit Laptop und dem Board spielen kann:


Material

  • Atmel-Evaluations-Board V2.0
  • ein Prozessor (im Beispiel ein Atmega32)
  • Netzteil 9V (Gleich- oder Wechselspannung / Stromversorgung wird über Lüsterklemmen angeschlossen)
  • USB-seriell-Adapter mit 9pol-Sub-D-Stecker
  • Laptop mit Linux (im Beispiel Debian lenny)
  • Pollin-Doku (enthält ein Testprogramm)


Software

Auf dem Laptop sollte folgendes vorhanden sein. Dabei wird nur avrdude zum Aufspielen des Testprogrammes benötigt, der Rest zum Erstellen eigener Programme (gibt es alles im Debian-Repositoty):

  • avr-libc
  • avra
  • avrdude
  • binutils-avr
  • gcc-avr


Testprogramm aufspielen

Das Testprogramm von Pollin heisst Testtool. Es gibt bei Pollin ein kleines pdf-Dokument dazu, der Source in Bascom (einem speziellen AVR-Basic-Dialekt für den es nur einen kostenpflichtigen Windowscompiler gibt ) sowie das Hexfile TESTTOOL.HEX. Letzteres muss auf den Atmel geflashed werden.

Dazu wird das Evaluations-Board mittels des USB-Seriell-Adapters verbunden, wobei der ISP-Anschluss auf dem Board zu verwenden ist, nicht der RS232. Es ist darauf zu achten, dass der aktuelle User über ausreichende Rechte auf dem USB-Device verfügt. Zum Testen der Kommunikation ist folgendes einzugeben:

prompt > avrdude -p m32 -c ponyser -P /dev/ttyUSB0 -v 


Erfolgt als Ausgabe grob sowas wie das folgende, hat die Verbindung funktioniert:

avrdude: Version 5.5, compiled on Jan 14 2009 at 06:21:50
        Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
 
        System wide configuration file is "/etc/avrdude.conf"
        User configuration file is "/home/ralf/.avrduderc"
        User configuration file does not exist or is not a regular file, skipping
  
        Using Port            : /dev/ttyUSB0
        Using Programmer      : ponyser
        AVR Part              : ATMEGA32
        Chip Erase delay      : 9000 us
        PAGEL                 : PD7
        BS2                   : PA0
        RESET disposition     : dedicated
        RETRY pulse           : SCK
        serial program mode   : yes
        parallel program mode : yes
        Timeout               : 200
        StabDelay             : 100
        CmdexeDelay           : 25
        SyncLoops             : 32
        ByteDelay             : 0
        PollIndex             : 3
        PollValue             : 0x53
        Memory Detail         :
 
                                 Block Poll               Page                       Polled
          Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
          ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
          eeprom         4    10    64    0 no       1024    4      0  9000  9000 0xff 0xff
          flash         33     6    64    0 yes     32768  128    256  4500  4500 0xff 0xff
          lfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
          hfuse          0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
          lock           0     0     0    0 no          1    0      0  2000  2000 0x00 0x00
          signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
          calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00


Zum Aufspielen des Testprogramms nun bitte folgendes eingeben:

prompt > cd testtool
prompt > avrdude -p m32 -c ponyser -P /dev/ttyUSB0 -v -U flash:w:TESTTOOL.HEX


Die Optionen stehen für:

  • -p m32 - Atmega32
  • -c ponyser - die sogenannte programmer-id gibt an, wie das Board mit dem Rechner verbunden ist. pony

ser steht hierbei für serielles ponypong-Design.

  • -P /dev/ttyUSB0 - die am Laptop verwendete USB-Schnittstelle
  • -v - verbose
  • -U flash:w:TESTTOOL.HEX - das zu flashende File

Durch Drücken von Taste 1 sollte nun Led 1 aufleuchten, durch erneutes Drücken wieder erlöschen, gleiches für Taste 2 und Led 2.


Bootloader

Einleitung

Obwohl dieses Testprogramm aus dem vorangegangenen Beispiel recht klein ist, dauert das Überspielen auf den Atmel mittels USB-seriell-Adapter über die ISP-Schnittstelle mehrere Sekunden, und wenn die Programme mal etwas größer werden, macht das wirklich keinen Spass mehr so lange zu warten (das geht schnell in die Minuten). Es gibt prinzipiell zwei Möglichkeiten, das zu beschleunigen:

  1. Programmiergerät
    • Hierbei handelt sich meist um ein USB-ISP-Adapter, der an dem 10-poligen Pfostenstecker direkt auf dem Board angeschlossen wird.
  2. Bootloader
    • Reine Softwarelösung, die es nach Installation erlaubt, Programme über den seriell RS232-Port aufzuspielen.


Wenn man etwas im Netz sucht, findet man unterschiedlichste Bootloader für Atmels. In diesem Beispiel kommt der foodloader von fd0 und cebewee aus Köln zum Einsatz, zu dem es hier weitere Infos und die Möglichkeit zum Herunterladen gibt. Im Beispiel wird Version 0.21 und das V2.0-Pollinboard mit Atmega32 verwendet. Nachdem man sich den Sourcecode besorgt und ausgepackt hat, sind folgende Anpassungen nötig:


Anpassungen

  • Makefile
6,7c6,7
< #F_CPU = 16000000UL
< #MCU = atmega88
---
> F_CPU = 16000000UL
> MCU = atmega32
66c66
< LDFLAGS += -L/usr/local/avr/avr/lib
---
> # LDFLAGS += -L/usr/local/avr/avr/lib


  • uart.h
42c42
< #error this cpu isn't supported by uart.h yet!
---
> #error this cpu is not supported by uart.h yet!


  • avr.mk
2c2
< ISP_PROG = dapa
---
> ISP_PROG = ponyser
4c4
< ISP_DEV = /dev/parport0
---
> ISP_DEV = /dev/ttyUSB0
8c8
< SERIAL_DEV = /dev/ttyS0
---
> SERIAL_DEV = /dev/ttyUSB0


  • config.h
259c259
< //#define BOOTLOADER_CHAR
---
> #define BOOTLOADER_CHAR


  • launcher/launch-bootloader.c
38c38,39
<     if((argc != 3) || (argv[1] == "-h") || (argv[1] == "--help")) {
---
>     /* if((argc != 3) || (argv[1] == "-h") || (argv[1] == "--help")) { */
>     if((argc != 3) || !(strcmp (argv[1], "-h")) || !(strcmp (argv[1], "--help"))) {


Übersetzen

Ein "make" sollte nun fehlerfrei Durchlaufen und den Bootloader erstellen. Wenn alles gut läuft sollten die letzten Zeilen der Makeausgabe wie folgt aussehen:

===============================
compiled for: atmega32
bootloader size is: 992
===============================

und es gibt eine Datei foodloader.hex die 2837 Bytes groß ist.


Installieren

Nachdem der Bootloader erstellt wurde kann er nicht einfach installiert werden. Es müssen die sogenannten Fuses angepasst werden. Dies ist ein komplexes Thema, in welches sich jeder Nutzer etwas einarbeiten sollte.

Sinnvollerweise verschafft man sich für den Installationsschritt ein Programmiergerät. Damit ist alles in ein paar Sekunden erledigt. Mittels USB-seriell-Adapter und ISP-Schnittstelle geht das Setzen der Fuses zwar auch flott, das Aufspielen des Bootloaders dauert dagegen grob 100 Minuten (ja, echt so lange...).


  • Fuses (mit Programmieradapter/ in der Datei fuses.txt dokumentiert)
prompt > avrdude -p m32 -c usbasp -v -u -U hfuse:w:0xdc:m -U lfuse:w:0xef:m


  • Bootloader schreiben
prompt > avrdude -p m32 -c usbasp -v -U flash:w:foodloader.hex


  • Lockbit setzen (Schutz vor ueberschreiben des Bootloaders)
prompt > avrdude -p m32 -c usbasp -v  -U lock:w:0x2f:m


Hat man keinen Programmieradapter ist im Aufruf -c usbasp durch -c ponyser -P /dev/ttyUSB0 zu ersetzen.


Anwenden

Um den Bootloader mit obiger Beispielkonfiguration zu verwenden ist wie folgt vorzugehen:

  1. USB-seriell-Adapter an Rechner und Pollinboard (jetzt am RS232-Anschluss) anschliessen, Board nicht einschalten.
    • Er wird angenommen, der USB-seriell-Adapter hängt an /dev/ttyUSB0.
  2. Das Programm launch-bootloader im Verzeichnis launcher starten, z.B.
    • ./launch-bootloader /dev/ttyUSB0 115200
    • Ausgabe des Bootloaders:
    • Opening serial device /dev/ttyUSB0.
    • Sending bootloader entry command (p).
    • You may now plug in the target device.
  3. Pollinboard einschalten
    • Ausgabe des Bootloaders:
    • Bootloader running.
    • ...und der Kommandozeilenprompt erscheint wieder. Der Bootloader ist nun bereit, Daten zu empfangen.
  4. Programm aufspielen
    • prompt > avrdude -p m32 -b 115200 -c avr109 -P /dev/ttyUSB0 -U f:w:demo.hex
  5. Pollinboard resetten.


Und das neu aufgespielte Programm sollte nun laufen.