Und wieder einmal bin ich blutiger Anfäger (und wollte das nicht sein):
Zur Erweiterung meines "Horizonts" habe ich mir ein Arduino r4 Wifi Board (China-Clone, siehe Bild im Anhang) mit Renesas MCU zugelegt. Grundsätzlich will ich das irgendwann mit arm-none-eabi-gcc ohne Arduino programmieren, aber zum Testen habe ich jetzt doch Arduino verwendet und natürlich (wie bei mir bei neuen Dingen immer) geht das nicht so recht.
Das Blinkprogramm bekomme ich natürlich in Arduino übersetzt, allerdings bin ich nicht in der Lage ein Programm hochzuladen, weder aus der Arduino IDE heraus, noch in der Konsole.
Voraussetzungen:
Slackware Linux 14.2
Arduino IDE 1.8.13
bossac: Basic Open Source SAM-BA Application (BOSSA) Version 1.9.1-arduino2-3-g37600d1
Erste vermutete Fehlerstelle war, dass ich für dieses Board als Benutzer keine Rechte auf die Schnittstelle habe, deshalb habe ich das ganze als root versucht mit folgender Fehlermeldung mit Arduino:
1
Der Sketch verwendet 51576 Bytes (19%) des Programmspeicherplatzes. Das Maximum sind 262144 Bytes.
2
Globale Variablen verwenden 6744 Bytes (20%) des dynamischen Speichers, 26024 Bytes für lokale Variablen verbleiben. Das Maximum sind 32768 Bytes.
3
Erzwinge Reset durch öffnen/schließen mit 1200 bps auf dem Port /dev/ttyACM0
... by the way: Ich bin immer noch etwas "verwirrt", dass Arduino die Uploadmethode mittels bossac wählt, ich dachte immer, das ist für die Atmel SAMD Controller!
und zeigt mir an, dass die r4-Platine unter ID 2341:1002 anwesend ist.
… es zeigt dir allerdings nicht, ob sie tatsächlich ttyACM0 bekommen hat – das würde ein Blick ins Journal zum Zeitpunkt des Anschließens zeigen.
Was auch denkbar wäre, wenn ttyACM0 tatsächlich existiert: deinem Clone fehlt der Code, der die Schnittstelle bedient. Bei den „klassischen” Arduinos war’s der Bootloader, und bei denen fehlte der bei den billigen Nachbauten auch gerne mal. Dort war’s aber kein Problem, den via ISP draufzutun – wie es beim R4 aussieht, weiß ich allerdings nicht im Detail.
Wie gesagt: ich bin für r4 Platine und Renesas ein Anfänger. Wenn ich das nach Recherche im Internet richtig lese, dann unterscheiden sich die Ausführungen Wifi und Minima nicht nur durch den zusätzlichen Espressif-Chip für das Wifi.
Korrigiert mich wenn ich falsch liege: Bei der Wifi-Version (die ich habe) nimmt der Espressif-Chip das Flashen des Renesas Controllers vor. Welches Flashprogramm ist hier von nöten.
Reset Button zweimal drücken, die Schnittstelle konnte laut Meldungen
doch schon geöffnet werden.
Macht man das, scheint ein Loaderprogramm im Espressif zu laufen, denn es wird nicht das (noch vorhandene) erste Programm auf der Platine ausgeführt, sondern es blendet die Onboard-Led auf und ab, was für mich ein Zeichen dafür ist, dass ein Loaderprogramm auf einen Upload wartet.
Bei den „klassischen”
Arduinos war’s der Bootloader, und bei denen fehlte der bei den billigen
Nachbauten auch gerne mal. Dort war’s aber kein Problem, den via ISP
draufzutun – wie es beim R4 aussieht, weiß ich allerdings nicht im
Detail.
Na ja, ein Renesas ARM-Controller ist etwas komplett anderes als ein 8-Bit AVR und wie gesagt: Ich werkel zwar auch mit NXP und natürlich mit STM32, aber Renesas hatte ich noch nie in der Hand.
Was ich zur Verfügung habe an Hardware ist ein Segger j-link (welche Version weiß ich jetzt aus dem Handgelenk nicht, aber der tut seinen Dienst), ein ST-Link (original und clone) und - natürlich für ARM nicht erheblich - STK500 und USB-asp.
Natürlich kann ich auch etwas basteln wenn jemand eine gute Anleitung hierfür hat.
journalctl -f gemacht und den Output beim anstecken des Boards
betrachtet und nach der Schnittstelle gesucht.
Eventuell muss Dein Board über einen Jumper oder ein Button
in den Flash-Mode versetzt werden. D.h. auf die Kommandos
vom PC horchen und sie ausführen. Dazu ist ja der Bootloader
entweder schon im Flash vorhanden oder bereits hart in der HW
des MC auf dem Silizium integriert, wenn ein Flashen über
die Serielle (mit oder ohne USB Anbindung) möglich sein soll.
Eventuell hockt dir auch eine anderer Treibr aus dem Linux-OS
auf Deinem Seriellen Port und Dein Flash-Prog sieht zwar die
Schnittstelle, kann sie aber nicht allocieren, weil ein anderes
Prog. darauf zugreift. (Oft ein Moden-Treiber aus alten Zeiten!).
Deaktivierung eines solchen Treibers musst Du via Googel erfragen.
Kenne mich mit Slackware nicht aus. Dem Hinweis von oben würde ich nachgehen. Ich musste (Mate Mint - Ubuntu - Debian) das Paket britty (einTreiber für Braille Zeilen) deinstallieren, damit die Verbindung zum Arduino geklappt hat.
Wahrscheinlich ist brltty schuld.
Das ist ein Paket, das Braille-Geräte unterstützen soll. Es ist natürlich lobenswert, dass auch für diese Nischenanwendung das System direkt konfiguriert ist (nachträglich konfigurieren ist leider für die Leute, die darauf angewiesen sind, nahezu unmöglich), leider sind zumindest manche Hersteller dieser Geräte nicht in der Lage, sich eine USB-Device-ID zu besorgen und kapern so manche USB-Seriell-Wandler. Ich finde das wahnsinnig ärgerlich.
Es kann sich lohnen, zunächst über lsusb zu schauen, ob der USB-Seriell-Wandler überhaupt erkannt wurde.
Sollte er erkannt worden sein, finden sich dann ggf. im journal Statusmeldungen von brltty, dann weiß man, dass das Problem an brltty liegt. Wahrscheinlich lässt sich brltty aber auch einfach auf Verdacht abschalten, das braucht ja nahezu niemand.
Diese beiden Sachen haben erstmal nicht zuviel miteinander zu tun. Auf
das Journal zur Klärung wurdest du ja mittlerweile mehrfach hingewiesen.
Ich "liebe" solche Aussagen, weil ich nach der ersten Erwähnung von "journalctl" überhaupt nichts gepostet habe. Hierzu ist zu sagen: Unter Slackware gibt es kein journalctl!
So, neu eingetragen in /dev sind ein Verzeichnis "serial" mit weiteren Unterordnern "by-path" und "by-id", in diesen sind symbolische Links auf /dev/ttyACM0 vorhanden.
Desweiteren wird ein Device namens "hidraw2" angelegt und eben auch ttyACM0.
Dass brltty daran schuld sein könnte wäre möglich (das hatte ich einmal mit einem Ubuntu-System und da ging dann ein serieller Upload auf einen STM32 nicht).
Ein etwaig installierter ModemManager wäre ein weiterer zu
deinstallierender Problemkandidat.
Modemtreiber habe ich alle deaktiviert !
Wie gesagt, ich bin mir noch nicht einmal sicher, ob zum einen von Arduino das korrekte Uploadprogramm gewählt wird (wie oben geschrieben habe ich immer angenommen, dass bossac für SAMD von Atmel ist) und ich eher vermutet hätte, dass das richtige Uploadprogramm eben eher DFU-Util ist. Zum anderen bin ich mir auch nicht 100% sicher ob da überhaupt ein Bootloaderprogramm installiert ist.
Ich "liebe" solche Aussagen, weil ich nach der ersten Erwähnung von
"journalctl" überhaupt nichts gepostet habe. Hierzu ist zu sagen: Unter
Slackware gibt es kein journalctl!
a) natürlich kannst du auch unter Slackware systemd/journald haben.
b) natürlich könntest du auch erkannt haben, dass es um das zentrale Systemlog geht, und daher in dem deines Systems nachgeschaut haben. Oder einfach ›dmesg‹ hergenommen haben, denn die entsprechenden Infos sind auch dort zu finden.
Geht aber alles natürlich nur, wenn man den Hauch einer Ahnung hat, was man da macht. Wenn nicht, muss man halt die anranzen, die einem zu helfen versuchen, während man es nicht auf die Reihe bekommt. Zumindest das gelingt dir offenbar ganz gut – da wünsche ich dann auch noch viel Spaß bei o/
Systemlog geht, und daher in dem deines Systems nachgeschaut haben. Oder
einfach ›dmesg‹ hergenommen haben, denn die entsprechenden Infos sind
auch dort zu finden.
Ich habe mir >dmesg> hergenommen
Infos habe ich dort auch gefunden
ich habe mir /systemd intalliert (war nicht vorhanden. Hier muß ich zugeben, dass ich das bisher tatsächlich nicht benutzt habe)
Geht aber alles natürlich nur, wenn man den Hauch einer Ahnung hat, was
man da macht.
Wie war das noch einmal mit dem "anranzen" (dieser Text fasse ich mal als Beleidigung auf) und wer hat damit angefangen? Ich sagte, dass ich es "liebe" wenn man schreibt: "wie dir mehrmals mitgeteilt wurde". Es wurde einmal geschrieben und beim zweitenmal kam dann der "ranzer" von dir. Wie auch immer, es ist mittlerweile egal und obsolet.
die einem zu
helfen versuchen, während man es nicht auf die Reihe bekommt.
Wie all dem auch sei: ich habe es nun doch auch die Reihe bekommen. Meine "Lösung" ist vllt. nicht so wirklich elegant, aber hat funktioniert:
Nachdem ich in der Virtualbox nun ein Windows installiert habe und von dort aus dann das Arduino gestartet habe und das da sofort funktioniert hat. Habe ich von dort aus ein Firmware-Update gemacht. Danach funktioniert das Board per Upload nun auch unter Linux (mit der Upload-Software bossac).
Vielen Dank an die, die helfen wollten (auch an Jack V.)
So, neu eingetragen in /dev sind ein Verzeichnis "serial" mit weiteren
Unterordnern "by-path" und "by-id", in diesen sind symbolische Links auf
/dev/ttyACM0 vorhanden.
Desweiteren wird ein Device namens "hidraw2" angelegt und eben auch
ttyACM0.
Mehr ist da nicht zu sehen.
Es wäre einfach, mal zu überprüfen, ob sich die Sachen verändern, wenn du dein USB-Gerät ansteckst. Ändert sich das nicht, kann das nicht die Schnittstelle zu deinem Arduino sein.
Das ist eigentlich so ein Standard-Vorgehen, dass man sich mal den Unterschied zwischen Gerät ausgesteckt und Gerät eingesteckt anschaut.
F. schrieb:
Wahrscheinlich ist brltty schuld.
Dass brltty daran schuld sein könnte wäre möglich (das hatte ich einmal
mit einem Ubuntu-System und da ging dann ein serieller Upload auf einen
STM32 nicht).
Überprüft hast du das natürlich nicht, sondern lieber irgendwas total Umständliches gemacht, damit auch sichergestellt ist, dass du in Zukunft weiterhin mit diesem Problem zu kämpfen hast:
Nachdem ich in der Virtualbox nun ein Windows installiert habe und von
dort aus dann das Arduino gestartet habe und das da sofort funktioniert
hat. Habe ich von dort aus ein Firmware-Update gemacht. Danach
funktioniert das Board per Upload nun auch unter Linux (mit der
Upload-Software bossac).
Das USB-Gerät wird ja offensichtlich erkannt, also kannst du es auch an die Virtualbox weiterleiten. Dort wird es dann nicht mehr von brltty daran gehindert, als normales serielles Gerät aufzutreten und du kannst dort damit arbeiten.
Anstatt also die Ursache des Problems zu finden und zu beseitigen, hast du irgendwas gemacht, das das Problem kurzfristig gelöst hat. Wenn das für dich funktioniert, ist es ja gut, aber wahrscheinlich wirst du mit dem nächsten Microcontroller-Board, das du anschließt, wieder ähnliche Probleme haben und dann geht das alles wieder von vorne los.
Es wäre einfach, mal zu überprüfen, ob sich die Sachen verändern, wenn
du dein USB-Gerät ansteckst. Ändert sich das nicht, kann das nicht die
Schnittstelle zu deinem Arduino sein.
Das ist eigentlich so ein Standard-Vorgehen, dass man sich mal den
Unterschied zwischen Gerät ausgesteckt und Gerät eingesteckt anschaut.
Genau das habe ich gemacht und oben auch geschrieben, was sich ändert, wenn das Board angesteckt wird.