Ich arbeite an einem Solarstromsystem, das Daten über einen konstanten seriellen Datenstrom über ein USB-Kabel ausgibt. Das System funktionierte auf einem Windows 7-PC (mit einem Treiber, der auf einer CD-ROM in einer staubigen Schachtel neben dem Solarsystem zu finden war) und auf einem Windows 10-PC, ohne dass ein Treiber installiert werden musste (es ist jedoch möglich, dass der Treiber zuvor bei der Arbeit mit einem anderen Gerät installiert wurde).
Aus dem Windows-Gerätemanager habe ich erfahren, dass das Kabel vom Typ ist CDC_ACM
.
Jetzt versuche ich, es mit BeagleBone Black zu verwenden, damit ich die Datenerfassung automatisieren kann. In der Nähe des Solarsystems gibt es keine Steckdose (ironisch?), also versorge ich BeagleBone einfach über meinen PC mit Strom. Nachdem ich das Kabel eingesteckt habe, tippe ich lsusb
und sehe, dass das Gerät nicht verbunden ist:
debian@beaglebone:~$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Wenn ich mir das Nachrichtenprotokoll anschaue, erhalte ich Folgendes:
debian@beaglebone:~$ dmesg | tail -n 20
[ 442.566683] hub 1-0:1.0: hub_resume
[ 442.566753] hub 1-0:1.0: port 1: status 0101 change 0001
[ 442.668291] hub 1-0:1.0: state 7 ports 1 chg 0002 evt 0000
[ 442.668381] hub 1-0:1.0: port 1, status 0101, change 0000, 12 Mb/s
[ 442.721964] CAUTION: musb: Babble Interrupt Occurred
[ 442.773713] usb 1-1: new full-speed USB device number 44 using musb-hdrc
[ 442.823536] musb-hdrc: setup fifo_mode 4
[ 442.823583] musb-hdrc: 28/31 max ep, 16384/16384 memory
[ 442.826509] hub 1-0:1.0: unable to enumerate USB device on port 1
[ 442.833788] hub 1-0:1.0: state 7 ports 1 chg 0000 evt 0002
[ 442.833924] hub 1-0:1.0: port 1, status 0500, change 0003, 480 Mb/s
[ 442.941687] hub 1-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x500
[ 442.941807] hub 1-0:1.0: hub_suspend
[ 442.941867] usb usb1: bus auto-suspend, wakeup 1
[ 443.006061] usb usb1: usb wakeup-resume
[ 443.006138] usb usb1: usb auto-resume
[ 443.006178] hub 1-0:1.0: hub_resume
[ 443.006253] hub 1-0:1.0: port 1: status 0101 change 0001
[ 443.107772] hub 1-0:1.0: state 7 ports 1 chg 0002 evt 0000
[ 443.107860] hub 1-0:1.0: port 1, status 0101, change 0000, 12 Mb/s
Wenn ich das Kabel zuerst sende, sudo modprobe cdc_acm
scheint es, als ob ich dasselbe Ergebnis erhalte, wenn ich es anschließe. (Auf einem anderen BeagleBone Black erhielt ich einmal die Meldung „Kabel defekt“, aber ich habe bestätigt, dass das Kabel auf einem Windows-PC trotzdem funktionierte.)
Es scheint, dass die Treiber im Kernel vorhanden sind:
debian@beaglebone:/sys/bus/usb/drivers$ ls
cdc_acm cdc_ncm rndis_host usb usbhid
cdc_ether hub rt2870 usbfs usb-storage
debian@beaglebone:/sys/bus/usb/drivers$ cd cdc_acm
debian@beaglebone:/sys/bus/usb/drivers/cdc_acm$ ls
bind new_id remove_id uevent unbind
Übersehe ich einen Schritt, um dieses Gerät zum Laufen zu bringen?
Antwort1
Wie die Fehlermeldungen zeigen, kann der USB-Root-Hub das angeschlossene Gerät nicht auflisten. Ein möglicher Grund für solche Fehler ist, dass der Beaglebone nicht genügend Strom für das Gerät bereitstellen kann.
Versuchen Sie, einen Hub mit Stromversorgung an den Beaglebone anzuschließen, und stecken Sie das Gerät in den Hub.
(Den Kommentaren zufolge wurde das Problem dadurch behoben.)