USBprog [Updated]

Nun habe ich endlich wieder einen Programmer für meine Mikrocontroller. Nach langem Suchen habe ich mich für den USBprog von Benedikt Sauter ( Embedded Projects ) entschieden. Mit 39 Euro (12/2013: nur 29,90€) ist es sicherlich nicht der billigste Programmer für die Atmel AVR-Familie, aber immer noch billiger als die Programmer aus dem Hause Atmel.

Der Programmer kommt als Bausatz, wobei die schwierigen SMD-Bauteile schon verlötet sind. Nur die Grobmotoriker-sicheren Bauteile, wie Pfostenleisten und USB-Buchse müssen noch angelötet werden, was allerdings schnell erledigt ist. Auf einer Seite steht groß "populate everything from top side", was so viel bedeutet, wie: "Alle Bauteile auf der Oberseite anbringen". Etwas genauer wäre jedoch gewesen, wenn man "populate everything from opposite side" geschrieben hätte, dann hätte ich auch nicht die Bauteile anfangs auf die falsche Seite gelötet :-(( Die Auflösung des Rätsels, welche Seite denn wohl die obere ist, gibt es im Internet. Nun ja, die insgesamt vielleicht etwa Feuerzeug-große Platine hat das Auf- und Ablöten gut überlebt ...

USBprog
USBprog von Embedded Project

Ein nettes Feature des USBprogs ist, daß er weit mehr als ein reiner Programmer ist. Über ein Software-Tool läßt sich die Firmware auf den Mikrocontroller des USBprog austauschen, und der der USBprog verwandelt sich auf diese Weise bspw. in einen Debugger, einen USB-RS232-Konverter oder eine JTAG-Schnittstelle. das Projekt ist OpenSource, und es kommen gelegentlich neue Firmwares dazu.

Das Software-Tool sollte man sich unbedingt installieren - für OpenSUSE-Linux gibt es auch ein eigenes Software-Repository. Wie man das installiert, erfährt man auf der Homepage von Embedded Projects. Mit dem graphischen Frontend unter Linux habe ich allerdings schlechte Erfahrungen gemacht: Wenn es überhaupt läd, dann braucht es schier eine Ewigkeit. Ich arbeite ausschließlich mit der Kommandozeilen-Version. Zunächst habe ich ausschließlich mit dem Kommandozeilen-Tool gearbeitet. Es gibt aber auch ein graphisches Frontend USBprog, welches mittlerweile (Version 0.1.9) sehr gut funktioniert.

Out-of-the-Box konnte ich den USBprog nur als root ansprechen - auf die Dauer etwas nervig. Nach langer Puzzelei habe ich herausgefunden, wie ich die Rechte so setzen kann, daß ich auch als stinknormaler User an den Programmer drankomme. Dazu steckt man den Programmer in den USB-Port. Wie der nun im System "aufgehangen" ist, kann man mit dem Befehl "lsusb" ermitteln. Bei mir unter OpenSUSE sieht die Ausgabeso aus:

thinkpad:~ # lsusb
Bus 004 Device 026: ID 03eb:2104 Atmel Corp. AVR ISP mkII
Bus 004 Device 003: ID 05e3:0605 Genesys Logic, Inc. USB 2.0 Hub [ednet]
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID 04b3:3107 IBM Corp. ThinkPad 800dpi Optical Travel Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Damit weiß man schon mal, daß in diesem Fall der Programmer mit /dev/bus/usb/004/026 erreichbar ist. Nun kann man die Zugriffsrechte anpassen:

chmod +rw /dev/bus/usb/004/026

Blöd nur, daß bei einem erneuten Einstecken sich die Device-Nummer und ggf. auch die Bus-Nummer ändert. Dann ist das gleiche Spiel noch einmal zu machen.

Wenn man jetzt wie hier beschrieben eine Regel für die Linux Kernel Geräteverwaltung udev anlegt und udev neu startet, dann kann man den USBprog auch als normaler User ansprechen. Abweichend zur obigen Anleitung würde ich empfehlen, den Dateinamen für die Regel zu 80-usbprog.rules zu wählen und die Rechte auf 0666 zu setzen - so hats bei mir geklappt.

Zum Aufspielen einer neuen Firmware auf den USBprog mit dem Kommandozeilen-Tool geht man nun wie folgt vor:

  1. Die mittleren beiden Pins von JP3 mit einem Jumper kurzschließen (JP3 ist beim USBprog V3.0 die Stiftleiste direkt neben dem Mikrocontroller).
  2. Programmer als USB-Schnittstelle anschließen. Jetzt sollten sowohl die grüne als auch die rote LED aufleuchten, um anzuzeigen, daß sich der Programmer im Update-Modus befindet.
  3. Programm "usbprog" starten.
  4. Mit dem Befehl "devices" die erkannten Geräte anzeigen lassen. Ausgabe bei mir:
    (usbprog) devices
    [ 0]  *  Bus 004 Device 021: 1781:c620
    usbprog: USBprog in update mode

  5. Mit dem Befehl "device 0" ggf. den Programmer noch auswählen. Im Beispiel oben wurde der Programmerwegen des eingestellten Update-Modus wohl automatisch selektiert. Grundsätzlich kann das Software-Tool nämlich mehrere Programmer parallel verwalten.
  6. Mit "list" kann man sich die verfügbaren Firmwares anzeigen lassen. Wenn in der Ausgabschon aus dem Internet auf den lokalen Rechner kopiert wurde. Ggf. kann man mit "download xxx" den Download der Firmware xxx nachholen.
  7. Mit "upload xxx" kann man nun die Firmware xxx auf den USBprog kopieren. Das geht üblicherweise rasent schnell. Ausgabe:
    (usbprog) upload xxx
    Opening device ...
    Writing firmware ...
    #############################################################
    Starting device ...
    Detecting new USB devices ...

  8. Nun den USBprog vom USB-Port entfernen.
  9. Den Jumper abziehen.

Jetzt ist der USBprog mit der Firmware verwendbar!