Avrdude ist das Arbeitspferd für die Programmierung von AVR-Chips von Atmel (jetzt Microchip). Es funktioniert einwandfrei auf allen Plattformen mit einer großen Anzahl von verschiedenen Programmern. Es gibt jedoch einige Ausnahmen. Der Atmel-ICE, ein Programmer und Debugger, kann unter macOS (>10.13) nicht verwendet werden. Aber schließlich scheint es Licht am Ende des Tunnels zu geben …

Vor Sierra (10.12) konnte man den Atmel-ICE problemlos benutzen. Unter High Sierra (10.13) benötigte man eine Kernel-Erweiterung. Und mit Mojave (10.14), Catalina (10.15) und Big Sur (11) ging dann nichts mehr. Der Grund dafür ist, dass Atmel-ICE ein USB HID (ein Human Interface Device) ist und diese Geräte von macOS erfasst werden, wenn sie angeschlossen werden. Die typische Fehlermeldung, die man beim Ausführen von avrdude erhält, war:

     avrdude: usbdev_open(): Found Atmel-ICE CMSIS-DAP, serno: Jxxxxxxxxxxx
     avrdude: usbdev_open(): Fehler beim Beanspruchen der Schnittstelle 0: Berechtigung verweigert
     avrdude: usbdev_open(): keine brauchbare Schnittstelle gefunden 

Brian Good stellte im März 2021 fest, dass man die HIDAPI-Bibliothek verwenden könne, um den Zugriff auf HID-Geräte zu ermöglichen. Also installierte er die HIDAPI-Bibliothek und patchte eine GitHub-Kopie des ursprünglichen avrdude-Codes, was zu einer funktionierenden Version von avrdude führte. Ich habe es ausprobiert und es hat funktioniert. Hurra!

Jörg Wunsch, einer der ursprünglichen Autoren von avrdude, bemerkte in einem Austausch über das Problem, dass der Patch bereits in der offiziellen Codebasis enthalten ist. Ich habe es ausprobiert und bin zunächst gescheitert. Am nächsten Tag funktionierte es — ich weiß nicht warum.

Um das Leben für alle einfacher zu machen, habe ich mich entschieden, eine Homebrew-Formel zu entwerfen, die in der Lage ist, die richtige Version von avrdude mit HIDAPI herunterzuladen. Wer noch nichts von Homebrew gehört hat oder es noch nicht installiert hat, für den ist es jetzt höchste Zeit, dies zu tun. Es ist der Königsweg, um an all die Werkzeuge zu kommen, die für Unix entwickelt wurden und die von Apple nicht auf dem Mac zur Verfügung gestellt wurden.

Beim Versuch, die richtige Homebrew-Formel zu entwickeln, habe ich selbst ein wenig über Homebrew gelernt. Hier nun die Anleitung, wie man eine gepatchte Version von avrdude kommt. Zuerst muss man die aktuelle Kopie von avrdude, die von homebrew installiert wurde, deinstallieren:

     brew deinstall avrdude

Danach installiere eine Version, die aus dem neuesten Code generiert wird:

      brew install --HEAD felias-fogg/arduino/avrdude

Wenn es Fehlermeldungen gibt, musst du möglicherweise ältere Versionen von avrdude entfernen und dann die installierten Dateien mit /usr/local verknüpfen, indem du folgendes eintippst:

      brew link avrdude

Dann sollte man den Atmel-ICE mit avrdude verwenden können, z.B.:

     avrdude -c atmelice_isp -p m328p -v -t

Wenn du die neue Version von avrdude auch in der Arduino IDE verwenden möchtest, kannst du einen Symlink zu der neu installierten avrdude-Binärdatei erstellen:

rm /Anwendungen/Arduino.app/Inhalt/Java/hardware/tools/avr/bin/avrdude
ln -sf /usr/local/bin/avrdude /Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/

Es stellt sich heraus, dass der letzte Vorschlag (den ich gestrichen habe) aus drei Gründen falsch ist. Erstens verwendet die Arduino-IDE auf dem Mac die avrdude-Binärdateien, die unter ~/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino18/bin/avrdude gespeichert sind. Zweitens ist die aktuelle Arduino-Version von avrdude, die in diesem Github-Repository gepflegt wird, in der Lage, mit dem Atmel-ICE zu sprechen. Es scheint jedoch Fehler zu enthalten, die in der offiziellen Codebasis korrigiert wurden. Die Arduino avrdude-Version kann nämlich keine Fuses oder Lockbits lesen, nachdem die Lockbits oder Fuses mit dem Atmel-ICE geändert wurden. Drittens liest die Arduino avrdude-Version undefinierte Bits als Null anstelle von Eins. Mit der neuen Version bekommt man dann Probleme, wenn man den Arduino IDE-Befehl Burn Bootloader im Menü Extras verwenden, da hier die undefinierten Bits immer auf null gesetzt werden. Das ist mir aber egal, da ich diesen Befehl sowieso nicht verwendet habe und nicht vorhabe, ihn in Zukunft zu verwenden.

Views: 47