Also gleich mal anstecken:
[283553.080099] usb 5-2: new low-speed USB device number 2 using uhci_hcd
[283553.253147] usb 5-2: New USB device found, idVendor=03eb, idProduct=c8b4
[283553.253151] usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[283553.253154] usb 5-2: Product: USBHID
[283553.253156] usb 5-2: Manufacturer: zhifengsoft
[283554.564881] generic-usb 0003:03EB:C8B4.0001: hiddev0,hidraw0: USB HID v1.01 Device [zhifengsoft USBHID] on usb-0000:00:1d.0-2/input0
[283554.564939] usbcore: registered new interface driver usbhid
[283554.564944] usbhid: USB HID core driver
Hm - ein HID device? Ich hatte jetzt eher mit ttyUSB oder sowas gerechnet - merkwürdig. Laut eBay Verkäufer wird das Ding von Progisp 1.72 unterstützt. Davon hab ich noch nie gehört und eine Google-Suche führt mich auf diverse, in elaboriertem Chinglish verfasste Seiten mit wenig vielversprechenden Screenshots voller fernöstlicher Schriftzeichen. Sowas will ich nicht haben, sondern meinen geliebten avrdude! Also weitersuchen. Die Beschreibung sagt etwas von USBasp - den kennt avrdude. Also testen wir das mal:
$ avrdude -p m328p -c usbasp -U flash:r:foo.dat:i
avrdude: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc
avrdude done. Thank you.
Das war wohl nix - offenbar sollte der USBasp die ID 16c0:05dc haben und nicht 03eb:c8b4 wie mein chinesisches Kleinod (Typ: MX-USBISP-V3.00, 2013-03-15 laut silkscreen). Also mal nach der ID googeln. Aha - ich bin nicht allein mit meinem Problem: Das Ding ist zwar hardwaremäßig fast ein USBasp, aber das weiß seine Firmware nicht. Zu allem Überfluss kommt die originale USBasp Firmware nicht mit dieser Hardware klar - grumpf!
Also erst mal aufmachen - nur wie? So:
Einfach die Metallhülse in Richtung USB-Stecker schieben. Von innen bietet sich dann folgendes Bild:
Nach einiger Suche hab ich dann eine Lösung gefunden: im GreenPhotons-Blog von [uwezi] fand sich ein Eintrag zu genau dem Ding. Offenbar braucht die USBasp Firmware einen kleinen Tweak, um auf diesem Progammer zu laufen. Auf obiger Seite kann man auch eine bereits gepatchte Firmware herunterladen, falls man zu feige zum compilieren ist. Das folgende ist nicht auf meinem Mist gewachsen, ich gebe es aber hier wieder, damit zukünftige Leidensgenossen einen weiteren Anlaufpunkt bekommen:
- Zunächst besorge man sich die USBasp Firmware
- Dann muß diese leicht modifiziert werden:
in main.c finden sich die Zeilen
int main(void) {
uchar i, j;
/* no pullups on USB and ISP pins */
PORTD = 0;
PORTB = 0;
/* all outputs except PD2 = INT0 */
DDRD = ~(1 << 2);
die letzte Zeile muss so verändert werden:
DDRD = 0x00; - Compilieren
- Metallgehäuse abziehen
- Auf der Unterseite der Platine finden sich zwei Kontakte, die mit "-> up <-" gekennzeichnet sind. Diese mit einem Stück Schaltdraht überbrücken. Nun ist das Ding im self-programming mode
- Mit einem anderen ISP-Programmer die neue Firmware flashen z.B.:
avrdude -p m8 -c stk500v2 -P /dev/ttyACM0 \\
-U flash:w:20130212_mega8_usbisp.hex:i - Schaltdraht-Brücke raus, Gehäuse drauf
- Fertig
[285378.660075] usb 5-2: new low-speed USB device number 3 using uhci_hcd
[285378.832112] usb 5-2: New USB device found, idVendor=16c0, idProduct=05dc
[285378.832122] usb 5-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[285378.832129] usb 5-2: Product: USBasp
[285378.832135] usb 5-2: Manufacturer: www.fischl.de
Und auch avrdude ist nun zufrieden:
avrdude -p m328p -c usbasp -U flash:r:foo.dat:i
avrdude: AVR device initialized and ready to accept instructions
Reading |###################################| 100% 0.01s
avrdude: Device signature = 0x1e950f
avrdude: reading flash memory:
Reading |###################################| 100% 5.26s
avrdude: writing output file "foo.dat"
avrdude: safemode: Fuses OK
avrdude done. Thank you.
Sehr gut! Und zuguterletzt sei noch erwähnt, dass man angeblich auch mit unmodifizierter USBasp Firmware arbeiten kann, wenn man ein paar Lötbrücken vom Board entfernt - ich fand die Firmware-Modifikation aber eleganter.
Einsatz mit AtmelStudio
Im Gegensatz zu avrdude unterstützt AtmelStudio den USBasp nicht. Das heißt aber nicht, das der Programmer nicht dennoch zum Einsatz kommen kann! Zwei Lösungsmöglichkeiten habe ich gefunden:- Eine stk500 kompatible Firmware auf den Programmer flashen (z.B. die von Christian Ulrich).
- avrdude unter AtmelStudio als externen Programmer einbinden. Auf microcontroller.net hat user [eduardo] hat eine Anleitung dazu verfasst.
Es gibt genau 3 notwendige Änderungen.
AntwortenLöschenIn der Funktion "main" in der Datei "main.c" muss:
"DDRD = ~(1 << 2);"
durch
"DDRD = 0x00;"
ersetzt werden.
Damit es sich von aktuellen Compilern kompilieren lässt muss folgendes in den beiden Dateien "usbdrv.c" und "usbdrv.h" geändert werden:
"PROGMEM"
durch
"const PROGMEM"
ersetzen.
Zusätzlich muss im Makefile "atmega8" durch "atmega88" ersetzt werden,
da viele Varianten den ATmega88 verwenden und avrdude ("m88" = ATmega88) somit sonst das Flashen aufgrund unpassender Signatur verweigert.
Hallo Phil, danke für den Beitrag, ich als Leidensgenosse habe davon profitiert. Übrigens nette und eingängiger Schreibstil :)
AntwortenLöschen