Forum: Mikrocontroller und Digitale Elektronik Upload Arduino r4 unter Linux


von Ralph S. (jjflash)


Lesenswert?

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
4
/root/.arduino15/packages/arduino/tools/bossac/1.9.1-arduino5/bossac -d --port=ttyACM0 -U -e -w /tmp/arduino_build_695814/Blink.ino.bin -R 
5
Set binary mode
6
Send auto-baud
7
Set binary mode
8
Beim Hochladen des Sketches ist ein Fehler aufgetreten
9
No device found on ttyACM0

... und der (erwarteten Fehlermeldung) auf der Konsole:
1
root:/tmp/r4# bossac -d --port=ttyACM0 -U -e -w blink_r4.bin
2
Set binary mode
3
Send auto-baud
4
Set binary mode
5
No device found on ttyACM0

lsusb sagt mir:
1
Bus 002 Device 003: ID 05e3:0607 Genesys Logic, Inc. Logitech G110 Hub
2
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
3
Bus 008 Device 002: ID 413c:2106 Dell Computer Corp. Dell QuietKey Keyboard
4
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
5
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
6
Bus 006 Device 009: ID 2341:1002 Arduino SA 
7
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
8
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
9
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
10
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
11
Bus 003 Device 003: ID 046a:000c Cherry GmbH 
12
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

und zeigt mir an, dass die r4-Platine unter ID 2341:1002 anwesend ist.

----------------------------------

Wie bekomme ich das erste mal ein Binary auf diese Platine (im Netz hab 
ich ausser der Empfehlung die IDE 2 zu installieren nichts weiteres 
gefunden)?

von Ralph S. (jjflash)


Lesenswert?

... 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!

von Peter (pittyj)


Lesenswert?

No device found on ttyACM0

Mal in dev schauen, welches Device nach Anstecken des Adapters 
vorhanden ist. Da hatte ich auch schon mal andere Devices gehabt.

von Jack V. (jackv)


Lesenswert?

Ralph S. schrieb:
> 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.

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

Reset Button zweimal drücken, die Schnittstelle konnte laut Meldungen 
doch schon geöffnet werden.

von Ralph S. (jjflash)


Lesenswert?

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.

J. S. schrieb:
> 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.

Jack V. schrieb:
> Was auch denkbar wäre, wenn ttyACM0 tatsächlich existiert:

Dieser Anschluss existiert schon alleine deshalb, weil mir unter dem 
Punkt "Boardinformationen holen" folgendes anzeigt:

BN: Arduino UNO R4 WiFi
VID: 2341
PID: 1002
SN: F412FA765FDC

Jack V. schrieb:
> 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.

von Markus W. (dl8mby)


Lesenswert?

Hallo Ralph,

hast Du wie empfohlen

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.


Markus

von Jack V. (jackv)


Lesenswert?

Ralph S. schrieb:
> Jack V. schrieb:
>> Was auch denkbar wäre, wenn ttyACM0 tatsächlich existiert:
>
> Dieser Anschluss existiert schon alleine deshalb, weil mir unter dem
> Punkt "Boardinformationen holen" folgendes anzeigt:
>
> BN: Arduino UNO R4 WiFi

Diese beiden Sachen haben erstmal nicht zuviel miteinander zu tun. Auf 
das Journal zur Klärung wurdest du ja mittlerweile mehrfach hingewiesen.

von Gerhard Z. (germel)


Lesenswert?

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.

von F. (radarange)


Lesenswert?

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.

Hier Informationen dazu, wie man brltty abschaltet: 
https://www.reddit.com/r/pop_os/comments/uf54bi/how_to_remove_or_disable_brltty/

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.

: Bearbeitet durch User
von Norbert (der_norbert)


Lesenswert?

Ein etwaig installierter ModemManager wäre ein weiterer zu 
deinstallierender Problemkandidat.
1
dpkg --get-selections | grep -i modem

: Bearbeitet durch User
von Ralph S. (jjflash)


Lesenswert?

Jack V. schrieb:
> 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.

Mehr ist da nicht zu sehen.

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).

Norbert schrieb:
> 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.

Markus W. schrieb:
> Eventuell muss Dein Board über einen Jumper oder ein Button
> in den Flash-Mode versetzt werden.

Das Board hat keine Jumper, sondern einzig und alleine eine 
Reset-Button. Der soll wohl wie

J. S. schrieb:
> Reset Button zweimal drücken, die Schnittstelle konnte laut Meldungen
> doch schon geöffnet werden.

schrieb, zweimla gedrückt werden (danach blendet dann die Userled 
langsam auf und ab).

Ich werde die Tage dann wohl doch einmal das Board an einem 
Windowsrechner ausprobieren ob es dann dort klappt!

von Jack V. (jackv)


Lesenswert?

Ralph S. schrieb:
> 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/

: Bearbeitet durch User
von J. S. (jojos)


Lesenswert?

Vielleicht hilft das weiter, da wird ein Renesas Tool benutzt:
https://github.com/arduino/ArduinoCore-renesas/tree/main/bootloaders/UNO_R4

Der Doppelklick bei der Wifi Version nutzt wohl den ESP für das flashen 
was dann sicher über WLan geht.

von Ralph S. (jjflash)


Lesenswert?

Jack V. schrieb:
> 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)

Jack V. schrieb:
> 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.

Jack V. schrieb:
> 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.)

von J. S. (jojos)


Lesenswert?

Das bossac Tool ist Open Source und ein Ersatz für das Atmel Samba:
http://www.shumatech.com/web/products/bossa

Da hat Arduino wohl einen kompatiblen Bootloader gebaut um das zu 
nutzen, interessant. Vor allem das die ständig neue Baustellen 
aufmachen…

von F. (radarange)


Lesenswert?

Ralph S. schrieb:
> 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:

Ralph S. schrieb:
> 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.

von Ralph S. (jjflash)


Lesenswert?

F. schrieb:
> 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.

F. schrieb:
> Dort wird es dann nicht mehr von brltty
> daran gehindert, als normales serielles Gerät aufzutreten und du kannst
> dort damit arbeiten.

Auch das hatte ich überprüft. Auf meinem Slackware ist braille NICHT im 
System vorhanden, weil nicht installiert!

F. schrieb:
> Anstatt also die Ursache des Problems zu finden und zu beseitigen, hast
> du irgendwas gemacht, das das Problem kurzfristig gelöst hat.

Aha! Was ist denn die Ursache, wenn brltty nicht vorhanden ist, Modem 
deinstalliert ist und beim Anstecken des Boards in /dev

- ttyACM0
- symbolische Links
- hidraw2

auftauchen und nicht funktioniert, nach einem Firmware-Update aber doch?

Egal, der Thread kann doch bitte geschlossen werden ( :-) Dortmund hat 
gerade gewonnen --- das ist doch eigentlich wichtiger :-) )

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.