Discussion:
Kann Arduino nicht ansteuern
(zu alt für eine Antwort)
Enno Middelberg
2012-10-29 08:12:01 UTC
Permalink
Hallo,


ich versuche vergebens, unter Linux mit einem Arduino Uno R3-Board zu
sprechen. Versucht habe ich es an drei verschiedenen Rechnern unter
Xubuntu 11.10, Linux Mint 13 (AFAIR) und Linux Mint Debian Edition. Das
Ergebnis ist immer das gleiche: nach Einstecken des nackten Boards via
USB-Kabel sagt dmesg:

[ 1944.188334] usb 6-1: new full-speed USB device number 12 using uhci_hcd
[ 1944.356537] usb 6-1: New USB device found, idVendor=03eb, idProduct=2fef
[ 1944.356547] usb 6-1: New USB device strings: Mfr=0, Product=1,
SerialNumber=0

Leider wird weder /dev/ttyACM0 noch /dev/USB0 erzeugt, so dass die
Arduino IDE keinen seriellen Port anbietet, um darüber mit dem Board zu
kommunizieren.

Ich habe bereits versucht, gemäß
http://www.arduino.cc/playground/Linux/All eine udev-Regel anzulegen,
die dann auch brav zB /dev/ACM1 oder so erzeugt (was aber nur ein
Symlink nach /dev/bus/usb/irgendwas ist), aber dieses Device wird von
der IDE ignoriert, auch wenn ich sie als root starte. Lediglich ein
/dev/ttyS0 wird von der IDE angeboten, worüber ich aber nichts machen kann.

Meines Wissens sollten durch das Einstecken die relevanten Kernel-Module
geladen werden (cdc_acm, ftdi_sio), was aber, wenn ich mich recht
erinnere, nicht geschieht. Händisches Laden via modprobe hat auch nicht
geholfen, vielleicht habe ich aber Dinge nicht in der korrekten
Reihenfolge gemacht.

Ein Thread im relevanten Arduino-Forum hat mir nicht weitergeholfen. Ist
die Hardware evtl defekt? Nach Einstecken des Boards blinken und kurz
danach leuchtet die "L" LED, was meines Wissens einen erfolgreichen
Selbsttest anzeigt.

Gibt es hier jemanden, der sich damit auskennt?


Vielen Dank, und viele Grüße,

Enno
Ralph Aichinger
2012-10-29 08:38:34 UTC
Permalink
Post by Enno Middelberg
Ergebnis ist immer das gleiche: nach Einstecken des nackten Boards via
[ 1944.188334] usb 6-1: new full-speed USB device number 12 using uhci_hcd
[ 1944.356537] usb 6-1: New USB device found, idVendor=03eb, idProduct=2fef
[ 1944.356547] usb 6-1: New USB device strings: Mfr=0, Product=1,
SerialNumber=0
Leider wird weder /dev/ttyACM0 noch /dev/USB0 erzeugt, so dass die
Arduino IDE keinen seriellen Port anbietet, um darüber mit dem Board zu
kommunizieren.
Was sagt denn "lsusb"?
Post by Enno Middelberg
Ich habe bereits versucht, gemäß
http://www.arduino.cc/playground/Linux/All eine udev-Regel anzulegen,
Ich hab bis jetzt noch nie eine udev-Regel manuell hinzufügen müssen,
das hat immer automatisch funktioniert (normales Debian, Ubuntu).
Post by Enno Middelberg
Meines Wissens sollten durch das Einstecken die relevanten Kernel-Module
geladen werden (cdc_acm, ftdi_sio), was aber, wenn ich mich recht
erinnere, nicht geschieht. Händisches Laden via modprobe hat auch nicht
geholfen, vielleicht habe ich aber Dinge nicht in der korrekten
Reihenfolge gemacht.
Diese Treiber braucht man glaube ich schon. Hat dein Arduino einen ftdi?
Ich kenne mich mit den neueren Modellen nicht so aus, und hab grade
keinen da. Jedenfalls sollte sowas in der Art kommen:

***@cube:/home/ralph# lsmod | grep ftdi
ftdi_sio 38270 0
usbserial 32061 1 ftdi_sio
usbcore 124095 8 ehci_hcd,ohci_hcd,usbhid,snd_usbmidi_lib,snd_usb_audio,usbserial,ftdi_sio

(Das ist jetzt kein Arduino, meiner ist gerade nicht vor Ort, sondern
ein serielles Kabel mit dem Chip)
Post by Enno Middelberg
Ein Thread im relevanten Arduino-Forum hat mir nicht weitergeholfen. Ist
die Hardware evtl defekt? Nach Einstecken des Boards blinken und kurz
danach leuchtet die "L" LED, was meines Wissens einen erfolgreichen
Selbsttest anzeigt.
Normalerweise sollte in einem aktuellen Arduino der "blink"-Sketch
drin sein, der die LED nr. 13 Blinken läßt, im 1-Sekunden-Rhythmus.
Irgendwo bei den Digitalausgängen ist eine LED angelötet, bei Port
13 IIRC. Wenn das Teil nicht neu aus der Packung kommt, sondern
gebraucht ist, dann natürlich nicht.
Post by Enno Middelberg
Gibt es hier jemanden, der sich damit auskennt?
Auskennen ist übertrieben, aber ich habe einige Arduinos in Betrieb
gehabt.

Ist die IDE auf neuestem Stand? Vielleicht muß dein Arduino
irgendwie initialisiert werden? Ich hab hier Version 1.0.1.

/ralph
Enno Middelberg
2012-10-29 08:48:34 UTC
Permalink
Hallo,
Post by Ralph Aichinger
Was sagt denn "lsusb"?
lsusb listet ein Gerät namens "Atmel Co." mit einer Produkt- und
Hersteller-ID. Genauer wird das Gerät aber nicht spezifiziert. Ich habe
auch gelesen, dass dmesg ein paar Zeilen mehr als in meinem Fall
ausgeben soll, aber auch das passiert nicht.
Post by Ralph Aichinger
Ich hab bis jetzt noch nie eine udev-Regel manuell hinzufügen müssen,
das hat immer automatisch funktioniert (normales Debian, Ubuntu).
Bei meinen ersten Versuchen hat das auch genau so funktioniert, aber
halt seit ein paar Tagen (keine Software-Updates dazwischen) eben nicht
mehr. Sehr frustrierend. Daher auch meine Vermutung, dass ich das Board
kaputt gefrickelt habe.
Post by Ralph Aichinger
Diese Treiber braucht man glaube ich schon. Hat dein Arduino einen ftdi?
Ich kenne mich mit den neueren Modellen nicht so aus, und hab grade
ftdi_sio 38270 0
usbserial 32061 1 ftdi_sio
usbcore 124095 8 ehci_hcd,ohci_hcd,usbhid,snd_usbmidi_lib,snd_usb_audio,usbserial,ftdi_sio
Ok, ich werde mal danach Ausschau halten. So genau kann ich mich an den
Output jetzt nicht erinnern.
Post by Ralph Aichinger
Normalerweise sollte in einem aktuellen Arduino der "blink"-Sketch
drin sein, der die LED nr. 13 Blinken läßt, im 1-Sekunden-Rhythmus.
Irgendwo bei den Digitalausgängen ist eine LED angelötet, bei Port
13 IIRC. Wenn das Teil nicht neu aus der Packung kommt, sondern
gebraucht ist, dann natürlich nicht.
Nach dem ersten Einstöpseln habe ich das auch gesehen, aber das meine
ich nicht. Ich habe schon erfolgreich etwas damit experimentiert,
deswegen ist der Sketch längst nicht mehr da. Was ich meine sind (nach
Anlegen der Stromversorgung) 4-5 kurze Impulse, jeweils ca 200ms, danach
leuchtet die LED konstant.



Vielen Dank,

Enno
Heiko Nocon
2012-10-29 15:54:34 UTC
Permalink
Post by Enno Middelberg
lsusb listet ein Gerät namens "Atmel Co." mit einer Produkt- und
Hersteller-ID.
Also offensichtlich ist das ein Arduino-Board ohne FTDI-Chip,
dementsprechend kannst du alle Tips knicken, die sich auf diese Art
Boards beziehen.

Es wird sich um einen Atmel mit eingebauter USB-Hardware handeln. Was
der genau macht, bestimmt aber seine Firmware. Details kann man sich mit
lsusb anzeigen lassen, indem man aus der Auflistung von

$ lsusb

den Teilstring mit Vendor- und Device-ID entnimmt und dann

$ lsusb -vd VendorID:DeviceID

eintippt. Das Ergebnis bitte posten.
Enno Middelberg
2012-10-30 07:51:47 UTC
Permalink
Hallo,
Post by Heiko Nocon
$ lsusb -vd VendorID:DeviceID
eintippt. Das Ergebnis bitte posten.
Bitte sehr, kannst Du damit etwas anfangen?


Enno



Bus 005 Device 009: ID 03eb:2fef Atmel Corp.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 32
idVendor 0x03eb Atmel Corp.
idProduct 0x2fef
bcdDevice 0.00
iManufacturer 0
iProduct 1
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 27
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 254 Application Specific Interface
bInterfaceSubClass 1 Device Firmware Update
bInterfaceProtocol 2
iInterface 0
Device Firmware Upgrade Interface Descriptor:
bLength 9
bDescriptorType 33
bmAttributes 3
Will Not Detach
Manifestation Intolerant
Upload Supported
Download Supported
wDetachTimeout 0 milliseconds
wTransferSize 3072 bytes
bcdDFUVersion 1.00
Device Status: 0x3740
(Bus Powered)
Debug Mode
Ralph Aichinger
2012-10-30 08:04:36 UTC
Permalink
Post by Enno Middelberg
bInterfaceClass 254 Application Specific Interface
bInterfaceSubClass 1 Device Firmware Update
Ist noch ein *weiterer* Eintrag da, der einen seriellen
Port darstellen könnte?

/ralph
Heiko Nocon
2012-10-30 09:09:49 UTC
Permalink
Post by Enno Middelberg
Bitte sehr, kannst Du damit etwas anfangen?
Bus 005 Device 009: ID 03eb:2fef Atmel Corp.
[...]

Ja. Das zeigt, daß die Firmware keine der generischen USB-Geräteklassen
implementiert (insbesondere nicht CDC-ACM, also nix tty-artiges),
sondern eine anwendungspezifische Firmware darstellt.

Oder anders ausgedrückt: Es wird ein spezieller "Treiber" benötigt,
damit man damit was anfangen kann.

Dein Suchbegriff heißt "dfu-programmer". Zuerst in den Repositories
deiner Distribution, wenn du dort nicht fündig wirst, dann verfüttere
ihn an Google. Dort wirst du fündig. Neben der Software findest du dort
auch Informationen, wie man das Ding benutzt, speziell auch im
Arduino-Kontext.
Enno Middelberg
2012-10-30 11:27:42 UTC
Permalink
Hallo,
Post by Heiko Nocon
Dein Suchbegriff heißt "dfu-programmer". Zuerst in den Repositories
deiner Distribution, wenn du dort nicht fündig wirst, dann verfüttere
ihn an Google. Dort wirst du fündig. Neben der Software findest du dort
auch Informationen, wie man das Ding benutzt, speziell auch im
Arduino-Kontext.
Ahja, das sieht gut aus. Möglicherweise habe ich einfach den
entsprechenden Chip auf dem Uno-Board gehimmelt. Ich werde mal
versuchen, die Firmware neu zu installieren.


Vielen Dank!


Enno
Henning Paul
2012-10-30 12:00:31 UTC
Permalink
Post by Enno Middelberg
Post by Heiko Nocon
Dein Suchbegriff heißt "dfu-programmer". Zuerst in den Repositories
deiner Distribution, wenn du dort nicht fündig wirst, dann verfüttere
ihn an Google. Dort wirst du fündig. Neben der Software findest du
dort auch Informationen, wie man das Ding benutzt, speziell auch im
Arduino-Kontext.
Ahja, das sieht gut aus. Möglicherweise habe ich einfach den
entsprechenden Chip auf dem Uno-Board gehimmelt.
Einen "entsprechenden Chip" gibt es nicht, das USB-Interface steckt im
ATMega selbst.
Post by Enno Middelberg
Ich werde mal versuchen, die Firmware neu zu installieren.
Das ist auf jeden Fall eine gute Idee.

Gruß
Henning
Enno Middelberg
2012-10-30 12:41:23 UTC
Permalink
Hallo,
Post by Henning Paul
Post by Enno Middelberg
Ahja, das sieht gut aus. Möglicherweise habe ich einfach den
entsprechenden Chip auf dem Uno-Board gehimmelt.
Einen "entsprechenden Chip" gibt es nicht, das USB-Interface steckt im
ATMega selbst.
Ich hatte das bisher so verstanden, dass die USB-Kommunikation vom Atmel
Mega 16u2-Chip auf meinem Arduino Uno R3-Board gehandhabt wird, und dass
der eine neue Firmware braucht. Was hat denn dann dieser Chip mit der
Neuprogrammierung zu tun? Immerhin gibt es verschiedene
Firmware-Versionen für die verschiedenen Arduino Unos, und da wird jedes
Mal entweder dieser Chip genannt oder die Vorgänger (zB 8u2).


Enno
Enno Middelberg
2012-10-30 15:56:27 UTC
Permalink
Hallo,


sieht so aus, als hätte ich wieder ein funktionierendes Arduino
Uno-Board. Den dmesg- und lsusb-Ausgaben zufolge war das Board die ganze
Zeit im DFU-Modus (jedenfalls http://cjdavies.org/?tag=dfu-programmer
zufolge).

Der Vollständigkeit halber und fürs Archiv hier die Vorgehensweise:

1 - dfu-programmer von
http://sourceforge.net/projects/dfu-programmer/?source=directory
herunterladen (v0.5.4)

2 - in src/arguments.c Zeile für Uno R3 hinzufügen (siehe
http://academic.cleardefinition.com/2012/07/31/using-dfu-programmer-with-an-arduino-uno-r3)

--- src/arguments.c (revision 105)
+++ src/arguments.c (working copy)
@@ -72,6 +72,7 @@
{ "at90usb647", tar_at90usb647, adc_AVR, 0x2FF9, 0x03eb, 0x10000,
0x2000, true, 128, true, false, 128, 0x0800 },
{ "at90usb646", tar_at90usb646, adc_AVR, 0x2FF9, 0x03eb, 0x10000,
0x2000, true, 128, true, false, 128, 0x0800 },
{ "at90usb162", tar_at90usb162, adc_AVR, 0x2FFA, 0x03eb, 0x04000,
0x1000, true, 128, true, false, 128, 0x0200 },
+ { "at90usb162unor3",tar_at90usb162, adc_AVR, 0x2FEF, 0x03eb, 0x04000,
0x1000, true, 128, true, false, 128, 0x0200 },
{ "at90usb82", tar_at90usb82, adc_AVR, 0x2FF7, 0x03eb, 0x02000,
0x1000, true, 128, true, false, 128, 0x0200 },
{ "atmega32u6", tar_atmega32u6, adc_AVR, 0x2FF2, 0x03eb, 0x08000,
0x1000, true, 128, true, false, 128, 0x0400 },
{ "atmega32u4", tar_atmega32u4, adc_AVR, 0x2FF4, 0x03eb, 0x08000,
0x1000, true, 128, true, false, 128, 0x0400 },

3 - dfu-programmer kompilieren (musste noch libusb-dev installieren)

4 - aus den Arduino IDE Quellen die Firmware besorgen:
Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex

5 - dann Arduino Uno R3-Board über zwei Pins in DFU-Mode versetzen,
siehe http://cjdavies.org/?tag=dfu-programmer

6 - dann folgende Zeilen ausführen:

./src/dfu-programmer at90usb162unor3 erase
./src/dfu-programmer at90usb162unor3 flash
Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex
--suppress-bootloader-mem
./src/dfu-programmer at90usb162unor3 reset

7 - Ausstöpseln, einstöpseln, fertig.



Ich kann jetzt wieder Sketche hochladen und ausführen und per serieller
Konsole Ausgaben machen. Sehr schön!


Vielen Dank für die konstruktive Hilfe!


Enno

Edzard Egberts
2012-10-29 08:41:06 UTC
Permalink
Lediglich ein /dev/ttyS0 wird von der IDE angeboten, worüber ich aber
nichts machen kann.
In Deinem Home müsstest Du ein verstecktes Verzeichnis ".arduino" mit
"preferences.txt" haben und kannst da unter "serial.port" ein anderes
Device angeben.
Gibt es hier jemanden, der sich damit auskennt?
Na ja, ich habe zwei Arduinos und unter Fedora 14, 17 und CentOS melden
die sich brav als "/dev/ttyACM0" an. Damit, dass das irgendwie nicht
klappt, kenne ich mich also nicht aus.
Enno Middelberg
2012-10-29 08:49:32 UTC
Permalink
Hallo,
Post by Edzard Egberts
In Deinem Home müsstest Du ein verstecktes Verzeichnis ".arduino" mit
"preferences.txt" haben und kannst da unter "serial.port" ein anderes
Device angeben.
Interessant, ich werde mal schauen. Allerdings habe ich ja erst gar
keine entsprechenden Devices in /dev, deswegen habe ich wenig Hoffnung.


Vielen Dank,

Enno
Ralph Aichinger
2012-10-29 08:44:14 UTC
Permalink
Post by Enno Middelberg
Ich habe bereits versucht, gemäß
http://www.arduino.cc/playground/Linux/All eine udev-Regel anzulegen,
die dann auch brav zB /dev/ACM1 oder so erzeugt (was aber nur ein
Symlink nach /dev/bus/usb/irgendwas ist), aber dieses Device wird von
der IDE ignoriert, auch wenn ich sie als root starte. Lediglich ein
/dev/ttyS0 wird von der IDE angeboten, worüber ich aber nichts machen kann.
Aja, vergessen: Wenn du nicht Blind oder Sehbehindert bist, und
du auch keine Unterstützungstechnologien testest, dann entferne
mal probeweise "brltty" (das Braille-Terminal), das blockiert
eventuell auch den seriellen Port.

/ralph
Enno Middelberg
2012-10-29 08:50:19 UTC
Permalink
Post by Ralph Aichinger
Aja, vergessen: Wenn du nicht Blind oder Sehbehindert bist, und
du auch keine Unterstützungstechnologien testest, dann entferne
mal probeweise "brltty" (das Braille-Terminal), das blockiert
eventuell auch den seriellen Port.
Ok, danke, ich werde das mal probieren.


Enno
Ralph Aichinger
2012-10-29 08:51:32 UTC
Permalink
Post by Enno Middelberg
Post by Ralph Aichinger
Aja, vergessen: Wenn du nicht Blind oder Sehbehindert bist, und
du auch keine Unterstützungstechnologien testest, dann entferne
mal probeweise "brltty" (das Braille-Terminal), das blockiert
eventuell auch den seriellen Port.
Ok, danke, ich werde das mal probieren.
Grade den Link gefunden:

http://www.ladyada.net/learn/arduino/lesson0-lin.html

/ralph
Michael Baeuerle
2012-10-29 09:27:12 UTC
Permalink
Post by Enno Middelberg
Leider wird weder /dev/ttyACM0 noch /dev/USB0 erzeugt, so dass die
Arduino IDE keinen seriellen Port anbietet, um darüber mit dem Board zu
kommunizieren.
Hier:
http://arduino.cc/en/Guide/Troubleshooting
ist folgendes zu lesen:
|
| [/dev/ttyACM0] are not supported by the standard version
| of the RXTX library that the Arduino software uses for
| serial communication. The Arduino software download for
| Linux includes a version of the RXTX library patched to
| also search for these /dev/ttyACM* devices

Vielleicht liegt es bei dir auch daran.


Micha
Loading...