Forum: Mikrocontroller und Digitale Elektronik avrdude bzw. libusb funktioniert nur an bestimmtem USB-Anschluss


von Alexander S. (alesi)


Lesenswert?

Hallo,

bei meinem Linux (Debian) PC mit eHajo's aTeVaL-Board liefert avrdude 
(oder besser libusb) nur an einer USB-Buchse keinen Fehler. An den vier 
anderen USB-Buchsen erhalte ich von avrdude den Fehler:
1
avrdude: usbdev_send(): wrote 0 out of 1 bytes, err = could not detach kernel driver from interface 0: No data available
2
avrdude: stk500_send_mk2(): failed to send command to serial port
Dabei wird das aTeVal mit ATmega328 prinzipiell erkannt:
1
         Using Port                    : usb
2
         Using Programmer              : avrispmkII
3
avrdude: usbdev_open(): Found AVRISP mkII, serno: 0002002xxxxxx
4
         AVR Part                      : ATmega328

lsusb meldet vier USB-Hubs
1
$> lsusb
2
...
3
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
4
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
5
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
6
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Wenn das aTeVaL an Bus 003 angeschlossen ist, kommt die Fehlermeldung.
1
Bus 003 Device 007: ID 03eb:2104 Atmel Corp. AVR ISP mkII
Nur wenn das aTeVaL an Bus 001 angeschlossen ist, kommt keine 
Fehlermeldung
1
Bus 001 Device 007: ID 03eb:2104 Atmel Corp. AVR ISP mkII
2
...
3
~# avrdude -c avrispmkII -P usb -p m328 -v
4
...
5
         Using Port                    : usb
6
         Using Programmer              : avrispmkII
7
avrdude: usbdev_open(): Found AVRISP mkII, serno: 0002002xxxxx
8
         AVR Part                      : ATmega328
9
...
10
avrdude: AVR device initialized and ready to accept instructions
11
12
Reading | ################################################## | 100% 0.00s
13
14
avrdude: Device signature = 0x1e9514 (probably m328)
15
avrdude: safemode: hfuse reads as D9
16
avrdude: safemode: efuse reads as FF
17
18
avrdude: safemode: hfuse reads as D9
19
avrdude: safemode: efuse reads as FF
20
avrdude: safemode: Fuses OK (E:FF, H:D9, L:62)
21
22
avrdude done.  Thank you.

Laut lshw ist usb1 (der ohne Fehler) ein EHCI Host Controller. usb3 (der 
mit Fehler) ist ein xHCI Host Controller
1
~# lshw -short | grep -e bus -e generic
2
/0/100/14                            bus            7 Series/C210 Series Chipset Family USB xHCI Host Controller
3
/0/100/14/0              usb3        bus            xHCI Host Controller
4
/0/100/14/1              usb4        bus            xHCI Host Controller
5
/0/100/1a                            bus            7 Series/C216 Chipset Family USB Enhanced Host Controller #2
6
/0/100/1a/1              usb1        bus            EHCI Host Controller
7
/0/100/1a/1/1                        bus            Integrated Rate Matching Hub
8
/0/100/1a/1/1/3                      generic        AVRISP mkII
9
/0/100/1d                            bus            7 Series/C216 Chipset Family USB Enhanced Host Controller #1
10
/0/100/1d/1              usb2        bus            EHCI Host Controller
Zwei der USB-Anschlüsse, die einen Fehler liefern, auf der PC-Front sind 
als USB 3.0 bezeichnet. Der eine hat "Bus 003 Device 008"
1
$> lsusb
2
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
3
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
4
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
5
Bus 003 Device 008: ID 03eb:2104 Atmel Corp. AVR ISP mkII
6
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
7
...
8
~# avrdude -c avrispmkII -P usb -p m328 -v
9
...
10
         Using Port                    : usb
11
         Using Programmer              : avrispmkII
12
avrdude: usbdev_open(): Found AVRISP mkII, serno: 0002002xxxxx
13
         AVR Part                      : ATmega328
14
...
15
avrdude: usbdev_send(): wrote 0 out of 1 bytes, err = could not detach kernel driver from interface 0: No data available
16
avrdude: stk500_send_mk2(): failed to send command to serial port
17
avrdude: AVR device initialized and ready to accept instructions
18
19
Reading | ################################################## | 100% 0.00s
20
21
avrdude: Device signature = 0x1e9514 (probably m328)
22
avrdude: usbdev_send(): wrote 0 out of 1 bytes, err = could not detach kernel driver from interface 0: No data available
23
avrdude: stk500_send_mk2(): failed to send command to serial port
24
avrdude: safemode: Verify error - unable to read lfuse properly. Programmer may not be reliable.
25
avrdude: safemode: To protect your AVR the programming will be aborted
26
avrdude: usbdev_send(): wrote 0 out of 1 bytes, err = could not detach kernel driver from interface 0: No data available
27
avrdude: stk500_send_mk2(): failed to send command to serial port

Ich habe mehrmals die USB-Buchsen gewechselt, bisher tritt der Fehler
reproduzierbar nur an der einen Buchse nicht auf.
Kann ich daraus folgern, dass avrdude (oder besser libusb) mit EHCI 
funktioniert und mit xHCI nicht? Oder hat es mit USB 1.1, 2.0 oder 3.0 
zu tun?

Noch zur Info
1
Linux deb10 4.9.0-7-amd64 #1 SMP Debian 4.9.110-1 (2018-07-05) x86_64 GNU/Linux
2
avrdude: Version 6.3
3
description: Motherboard
4
    product: B75MA-P45 (MS-7798)
5
     vendor: MSI
Der USB-Anschluss der funktioniert ist im SD-Card-Reader integriert.

Eine ähnliche Fehlermeldung wurde bereits 2006 z.B. hier beschrieben
https://lists.nongnu.org/archive/html/avrdude-dev/2006-02/msg00003.html

von Karl M. (Gast)


Lesenswert?

Hallo!

wurden für das USB Device die Benutzerrechte angepasst?

Ich habe mir passende Regeln in einer Datei unter /etc/udev/rules.d 
erstellt.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Alexander S. schrieb:
> bei meinem Linux (Debian) PC mit eHajo's aTeVaL-Board liefert avrdude
> (oder besser libusb) nur an einer USB-Buchse keinen Fehler. An den vier
> anderen USB-Buchsen erhalte ich von avrdude den Fehler:

 Über externen USB-Hub probieren (mache ich inzwischen auch so, da es
 mal klappt, mal nicht klappt).

: Bearbeitet durch User
von Alexander S. (alesi)


Lesenswert?

Karl M. schrieb:
> wurden für das USB Device die Benutzerrechte angepasst?

Ja, habe ich angepasst. Die gezeigten Tests habe ich
vorsichtshalber als root gemacht, ich kann avrdude aber
auch als normaler user nutzen.

Marc V. schrieb:
> Über externen USB-Hub probieren

Ein Anschluss (der im SD-Card-Reader) funktioniert ja bei mir.

Trotzdem Danke.

von Frank K. (fchk)


Lesenswert?

Ich würde einfach mal ein Windows auf der Maschine installieren 
(notfalls auf einer anderen Platte) und dann nochmal versuchen. avrdude 
und libusb gibts auch für Windows, und das Windows brauchst Du ja nicht 
unbedingt zu aktivieren, wenn es nur zum Testen ist. 30 Tage hast Du ja 
Zeit, dafür musst Du keine Lizenz verbrauchen.

Dann weißt Du, ob es ein Linux- oder ein Hardwareproblem ist.

Die nächste Stufe wäre, einen anderen Programmer auszuprobieren. 
Vielleicht kannst Du Dir ja von irgendwem in Deiner Nähe einen anderen 
ausleihen.

Noch eine Idee: Wird der Programmer vom USB-Bus versorgt oder von einem 
externen Netzteil? Ich denke da an irgendwelche Masseschleifen.

fchk

von Karl M. (Gast)


Lesenswert?

Alexander S. schrieb:
> Karl M. schrieb:
>> wurden für das USB Device die Benutzerrechte angepasst?
>
> Ja, habe ich angepasst. Die gezeigten Tests habe ich
> vorsichtshalber als root gemacht, ich kann avrdude aber
> auch als normaler user nutzen.
>
> Marc V. schrieb:
>> Über externen USB-Hub probieren
>
> Ein Anschluss (der im SD-Card-Reader) funktioniert ja bei mir.
>
> Trotzdem Danke.

Was liefert den /var/log/syslog für Fehlermeldungen.

Wie wurden die Rechte unter /etc/udev/rules.d eingestellt?

von Alexander S. (alesi)


Lesenswert?

Frank K. schrieb:
> Ich würde einfach mal ein Windows auf der Maschine installieren

Windows habe ich schon seit 15 Jahren nicht mehr auf meinen
Rechnern. Selbst wenn es unter Windows funktioniert, werde ich bei
Linux bleiben.

Frank K. schrieb:
> Die nächste Stufe wäre, einen anderen Programmer auszuprobieren.

Ich habe u.a. einen originalen Atmel AVRISP Mk2. Der hat, soweit
ich mich erinnere, an den beiden Front-Buchsen, die jetzt mit dem
aTeVaL nicht funktionieren, schon mal funktioniert. Das werde
ich nochmal ausprobieren. Einen AVR Dragon hätte ich auch noch.
Das Atmel STK500 über die serielle Schnitttstelle funktioniert auch, 
aber
hier geht es um USB.

Frank K. schrieb:
> Wird der Programmer vom USB-Bus versorgt

Ja, der aTeVaL wird über USB versorgt. Auf dem ATmega328 auf dem aTeVaL
ist momentan ein LED-Blink Programm. Die LEDs blinken bei Anschluss
an alle USB-Anschlüsse.

von Frank K. (fchk)


Lesenswert?

Alexander S. schrieb:
> Frank K. schrieb:
>> Ich würde einfach mal ein Windows auf der Maschine installieren
>
> Windows habe ich schon seit 15 Jahren nicht mehr auf meinen
> Rechnern. Selbst wenn es unter Windows funktioniert, werde ich bei
> Linux bleiben.

Darfst Du ja auch. Die Fehlersuche wird aber einfacher, wenn Du weißt, 
dass es definitiv ein Linux-Problem ist - oder eben definitiv keines. 
Das könntest Du dann dem entsprechenden Maintainer des Treibers oder dem 
eHaJo melden. Wenn sich niemand beschwert, gibts auch keine Bugfixes. 
Und wenn die Linux-Leute wissen, dass es auf der identischen Hardware 
unter Windows funktioniert aber unter Linux nicht, ist das für die auch 
eine hilfreiche Information. Dann wissen die nämlich, dass sie bei sich 
selber suchen müssen.

fchk

von Alexander S. (alesi)


Lesenswert?

Karl M. schrieb:
> Was liefert den /var/log/syslog für Fehlermeldungen.

Keine.

Nach anstecken an die "funktionierende" Buchse (im SD-Card-Reader):
1
Jul 29 17:27:11 deb10 kernel: [22876.575903] usb 3-2: USB disconnect, device number 8
2
Jul 29 18:05:58 deb10 kernel: [25203.042827] usb 1-1.3: new full-speed USB device number 8 using ehci-pci
3
Jul 29 18:05:58 deb10 kernel: [25203.152789] usb 1-1.3: New USB device found, idVendor=03eb, idProduct=2104
4
Jul 29 18:05:58 deb10 kernel: [25203.152792] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
5
Jul 29 18:05:58 deb10 kernel: [25203.152794] usb 1-1.3: Product: AVRISP mkII
6
Jul 29 18:05:58 deb10 kernel: [25203.152796] usb 1-1.3: Manufacturer: ATMEL
7
Jul 29 18:05:58 deb10 kernel: [25203.152798] usb 1-1.3: SerialNumber: 0002002xxxxx
und nach anstecken an eine der anderen "nicht funktionierenden" Buchsen
1
Jul 29 18:08:59 deb10 kernel: [25384.325920] usb 1-1.3: USB disconnect, device number 8
2
Jul 29 18:09:12 deb10 kernel: [25397.824091] usb 3-2: new full-speed USB device number 9 using xhci_hcd
3
Jul 29 18:09:13 deb10 kernel: [25397.965627] usb 3-2: New USB device found, idVendor=03eb, idProduct=2104
4
Jul 29 18:09:13 deb10 kernel: [25397.965630] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
5
Jul 29 18:09:13 deb10 kernel: [25397.965632] usb 3-2: Product: AVRISP mkII
6
Jul 29 18:09:13 deb10 kernel: [25397.965634] usb 3-2: Manufacturer: ATMEL
7
Jul 29 18:09:13 deb10 kernel: [25397.965636] usb 3-2: SerialNumber: 0002002xxxxx

Karl M. schrieb:
> Wie wurden die Rechte unter /etc/udev/rules.d eingestellt?
Die Tests mache ich als root.
Die udev-rule lautet
1
/etc/udev/rules.d/60-avrisp2.rules
2
SUBSYSTEM!="usb", ACTION!="add", GOTO="avrisp_end"
3
4
# Atmel Corp. AVRISP mkII
5
ATTR{idVendor}=="03eb", ATTR{idProduct}=="2104", MODE="660", GROUP="dialout" 
6
7
LABEL="avrisp_end"
8
9
~# lsusb -D /dev/bus/usb/003/009
10
Device: ID 03eb:2104 Atmel Corp. AVR ISP mkII
11
Device Descriptor:
12
  bLength                18
13
  bDescriptorType         1
14
  bcdUSB               1.10
15
  bDeviceClass          255 Vendor Specific Class
16
  bDeviceSubClass         0 
17
  bDeviceProtocol         0 
18
  bMaxPacketSize0        16
19
  idVendor           0x03eb Atmel Corp.
20
  idProduct          0x2104 AVR ISP mkII
21
  bcdDevice            2.00
22
  iManufacturer           1 ATMEL
23
  iProduct                2 AVRISP mkII
24
  iSerial                 3 0002002xxxx
25
  bNumConfigurations      1
26
...

von Alexander S. (alesi)


Lesenswert?

Frank K. schrieb:
>>> Ich würde einfach mal ein Windows auf der Maschine installieren

Das "einfach' meinst Du nicht wirklich ernst, oder?
Linux Platten mit SW-RAID neu partitionieren, Windows besorgen,
Windows (ohne Windows Kenntnisse) installieren, viele Tage oder
Wochen später wissen, dass es mit Win 7 funktioniert mit Win 10
aber evtl. nicht, ..., obwohl ich es nur unter Linux brauche.

Frank K. schrieb:
> Wenn sich niemand beschwert, gibts auch keine Bugfixes.
> Und wenn die Linux-Leute wissen, dass es auf der identischen Hardware
> unter Windows funktioniert aber unter Linux nicht, ist das für die auch
> eine hilfreiche Information.

Prinzipiell hast Du Recht. Bei Debian melde ich gelegentlich auch
Bugs. Und hier versuche ich, soweit mit vertretbarem Aufwand möglich,
möglichst viele Zusatzinfos zu liefern und weitere Tests zu machen.

Aber eigentlich wollte ich den ATmega auf dem aTeVaL programmieren
und kein Buch über die Unterschiede bei USB zw. Linux und Windows 
schreiben.
:-)

von Frank K. (fchk)


Lesenswert?

Alexander S. schrieb:
> Frank K. schrieb:
>>>> Ich würde einfach mal ein Windows auf der Maschine installieren
>
> Das "einfach' meinst Du nicht wirklich ernst, oder?
> Linux Platten mit SW-RAID neu partitionieren, Windows besorgen,
> Windows (ohne Windows Kenntnisse) installieren, viele Tage oder
> Wochen später wissen, dass es mit Win 7 funktioniert mit Win 10
> aber evtl. nicht, ..., obwohl ich es nur unter Linux brauche.

Ich hätte die vorhandenen Platten abgeklemmt, eine leere angeklemmt, 
Windows drauf, libusb drauf, avrdude drauf und schauen.

Windows bekommst Du hier her:
https://www.chip.de/downloads/Windows-ISO-Downloader_95133731.html

ok, das ist jetzt ein Huhn-Ei-Problem, weil das selber ein 
Windows-Binary ist, aber irgendeinen Windows-User wirst Du ja wohl 
kennen. So selten sind die nicht. Aber Du brauchst kein Geld und keine 
Lizenz und keine Seriennummer, und dass das ganze nach 30 Tagen abläuft 
(nicht wirklich, es kommt nur eine "bitte kauf mich" Meldung, und der 
Hintergrund wird schwarz), stört dich auch nicht.

Du könntest auch ein FreeBSD nehmen, wenn Dir das sympatischer ist. 
Hauptsache etwas, wo 0% Linux drin ist.

Nur so wirst Du jemals erfahren, ob es ein Linux-Bug ist.


> Frank K. schrieb:
>> Wenn sich niemand beschwert, gibts auch keine Bugfixes.
>> Und wenn die Linux-Leute wissen, dass es auf der identischen Hardware
>> unter Windows funktioniert aber unter Linux nicht, ist das für die auch
>> eine hilfreiche Information.
>
> Prinzipiell hast Du Recht. Bei Debian melde ich gelegentlich auch
> Bugs. Und hier versuche ich, soweit mit vertretbarem Aufwand möglich,
> möglichst viele Zusatzinfos zu liefern und weitere Tests zu machen.
>
> Aber eigentlich wollte ich den ATmega auf dem aTeVaL programmieren
> und kein Buch über die Unterschiede bei USB zw. Linux und Windows
> schreiben.
> :-)

Etwas Debugging gehört halt bei freier Software dazu. Du kannst eben 
nicht deinen FAE anrufen und ein Ticket aufmachen wie bei kommerzieller 
Software.

Oder Du gibts Dich eben mit dem einen funktionierenden USB-Port 
zufrieden und schließt diesen Thread. Das geht auch.

fchk

von Alexander S. (alesi)


Lesenswert?

Frank K. schrieb:
> Du kannst eben
> nicht deinen FAE anrufen und ein Ticket aufmachen wie bei kommerzieller
> Software.

Da ich nicht möchte, dass das hier zum Windows vs. Linux Thread mutiert, 
schreibe ich dazu nur noch:
Einen FAE anrufen und ein Ticket aufmachen können die privaten Nutzer
mit ihren Problemen z.B. bei Atmel-Studio unter Windows 10 doch auch
nicht bzw. das würde wenig bringen.

Hier soll es jetzt um die Frage gehen, warum unter Linux scheinbar 
USB-Anschlüsse mit EHCI Controller funktionieren und mit xHCI nicht.

von Alexander S. (alesi)


Lesenswert?

Hallo,

mit dem Original Atmel AVRISP MkII funktioniert es scheinbar an "allen" 
USB-Anschlüssen.

Bisher war der Aufbau mit aTeVaL:
aTeVaL mit ATmega328 an USB; Spannung ATmega328 über USB und aTeVaL.
USB1 (Bus 001) kein Fehler.
USB3 (Bus 003) Fehler
1
avrdude: usbdev_send(): wrote 0 out of 1 bytes, err = could not detach kernel driver from interface 0: No data available
2
avrdude: stk500_send_mk2(): failed to send command to serial port

Jetzt neuer Aufbau mit Atmel AVRISP MkII (und STK500):
Das STK500 nutze ich nur, um einen Sockel und eine Spannung für den 
ATmega328P zu haben. Der AVRISP MkII liefert keine Spannung zur 
Versorgung. Eine serielle Verbindung an das STK500 ist nicht 
angeschlossen. Der ATmega328 wird über USB und den AVRISP MkII und den 
6-Pin ISP Header (SPROG2) auf dem STK500 angesprochen. Der Reset-Jumper 
auf dem STK500 ist offen.
1) AVRISP MkII an USB1 (Bus 001) kein Fehler
1
$> tail /var/log/syslog 
2
Jul 29 21:18:20 deb10 kernel: [36745.136080] usb 1-1.3: new full-speed USB device number 13 using ehci-pci
3
Jul 29 21:18:20 deb10 kernel: [36745.246098] usb 1-1.3: New USB device found, idVendor=03eb, idProduct=2104
4
Jul 29 21:18:20 deb10 kernel: [36745.246101] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
5
Jul 29 21:18:20 deb10 kernel: [36745.246102] usb 1-1.3: Product: AVRISP mkII
6
Jul 29 21:18:20 deb10 kernel: [36745.246103] usb 1-1.3: Manufacturer: ATMEL
7
Jul 29 21:18:20 deb10 kernel: [36745.246105] usb 1-1.3: SerialNumber: 000200xxxxx
8
9
$> avrdude -c avrispmkII -P usb -p m328p -v
10
...
11
         Using Port                    : usb
12
         Using Programmer              : avrispmkII
13
avrdude: usbdev_open(): Found AVRISP mkII, serno: 0002001xxxxxx
14
         AVR Part                      : ATmega328P
15
...
16
         Programmer Type : STK500V2
17
         Description     : Atmel AVR ISP mkII
18
         Programmer Model: AVRISP mkII
19
         Hardware Version: 1
20
         Firmware Version Master : 1.23
21
         Vtarget         : 4.9 V
22
         SCK period      : 62.12 us
23
24
avrdude: AVR device initialized and ready to accept instructions
25
26
Reading | ################################################## | 100% 0.01s
27
28
avrdude: Device signature = 0x1e950f (probably m328p)
29
avrdude: safemode: hfuse reads as D9
30
avrdude: safemode: efuse reads as FF
31
32
avrdude: safemode: hfuse reads as D9
33
avrdude: safemode: efuse reads as FF
34
avrdude: safemode: Fuses OK (E:FF, H:D9, L:62)
35
36
avrdude done.  Thank you.

2) AVRISP MkII an USB3 (Bus 003) auch kein Fehler
1
$> tail /var/log/syslog 
2
Jul 29 21:19:12 deb10 kernel: [36797.743372] usb 3-2: new full-speed USB device number 11 using xhci_hcd
3
Jul 29 21:19:13 deb10 kernel: [36797.885005] usb 3-2: New USB device found, idVendor=03eb, idProduct=2104
4
Jul 29 21:19:13 deb10 kernel: [36797.885009] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
5
Jul 29 21:19:13 deb10 kernel: [36797.885011] usb 3-2: Product: AVRISP mkII
6
Jul 29 21:19:13 deb10 kernel: [36797.885013] usb 3-2: Manufacturer: ATMEL
7
Jul 29 21:19:13 deb10 kernel: [36797.885015] usb 3-2: SerialNumber: 0002001xxxxx
8
9
$> avrdude -c avrispmkII -P usb -p m328p -v
10
         Using Port                    : usb
11
         Using Programmer              : avrispmkII
12
avrdude: usbdev_open(): Found AVRISP mkII, serno: 000200xxxxxx
13
         AVR Part                      : ATmega328P
14
...
15
         Programmer Type : STK500V2
16
         Description     : Atmel AVR ISP mkII
17
         Programmer Model: AVRISP mkII
18
         Hardware Version: 1
19
         Firmware Version Master : 1.23
20
         Vtarget         : 4.9 V
21
         SCK period      : 62.12 us
22
23
avrdude: AVR device initialized and ready to accept instructions
24
25
Reading | ################################################## | 100% 0.01s
26
27
avrdude: Device signature = 0x1e950f (probably m328p)
28
avrdude: safemode: hfuse reads as D9
29
avrdude: safemode: efuse reads as FF
30
31
avrdude: safemode: hfuse reads as D9
32
avrdude: safemode: efuse reads as FF
33
avrdude: safemode: Fuses OK (E:FF, H:D9, L:62)
34
35
avrdude done.  Thank you.

Demnach tritt das Problem scheinbar nur mit dem aTeVaL "clone" auf.

Hannes Jochriem von eHajo und Jörg Wunsch (avrdude) lesen hier ja ab und 
zu mit. Vielleicht kommt da noch ein Kommentar.

von Stefan F. (Gast)


Lesenswert?

Hat das Gerät von eHajo einen "richtigen" USB Chip oder emuliert er USB 
nur über gewöhnliche I/O Pins?

Nachtrag: hat er, hätte ich mal vorher selbst nachschauen sollen.

von Alexander S. (alesi)


Lesenswert?

Stefanus F. schrieb:
> Hat das Gerät von eHajo einen "richtigen" USB Chip oder emuliert er USB
> nur über gewöhnliche I/O Pins?

Hallo,

Infos zum aTeVaL-Board von eHajo gibt es hier:
   https://www.ehajo.de/bausaetze/bedrahtet/89/ateval-microchip-avr-evaluationsboard
   http://dokuwiki.ehajo.de/artikel:ateval

und zum Atmel AVRISP MkII hier:
   https://www.microchip.com/webdoc/avrispmkii/index.html

Das aTeVaL hat einen ATmega32U2 mit USB 2.0 Full-speed Device Module.

von Alexander S. (alesi)


Lesenswert?

Hallo,

zusätzlich zum aTeVaL von eHajo und AVRISP MkII von Atmel habe ich jetzt 
noch den AVR-ISP-Stick von eHajo getestet. Aufbau mit STK500 wie beim 
Test mit dem AVRISP MkII (s. o.), allerdings kommen die 5 V vom 
AVR-ISP-Stick.
Der AVR-ISP-Stick von eHajo funktioniert soweit auch an beiden USB 
Anschlüssen.
1. Test an USB1 (Bus 001):
1
# tail /var/log/syslog
2
Jul 30 17:09:47 deb10 kernel: [ 8265.568852] usb 3-1: USB disconnect, device number 3
3
Jul 30 17:10:41 deb10 kernel: [ 8319.654760] usb 1-1.3: new low-speed USB device number 5 using ehci-pci
4
Jul 30 17:10:41 deb10 kernel: [ 8319.768206] usb 1-1.3: New USB device found, idVendor=1781, idProduct=0c9f
5
Jul 30 17:10:41 deb10 kernel: [ 8319.768210] usb 1-1.3: New USB device strings: Mfr=0, Product=2, SerialNumber=0
6
Jul 30 17:10:41 deb10 kernel: [ 8319.768212] usb 1-1.3: Product: USBtinyISP
7
Jul 30 17:10:41 deb10 mtp-probe: checking bus 1, device 5: "/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.3"
8
Jul 30 17:10:41 deb10 mtp-probe: bus: 1, device: 5 was not an MTP device
9
10
# avrdude -c usbtiny -P usb -p m328p -v
11
...
12
         Using Port                    : usb
13
         Using Programmer              : usbtiny
14
avrdude: usbdev_open(): Found USBtinyISP, bus:device: 001:005
15
         AVR Part                      : ATmega328P
16
...
17
         Programmer Type : USBtiny
18
         Description     : USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/
19
avrdude: programmer operation not supported
20
21
avrdude: Using SCK period of 10 usec
22
avrdude: AVR device initialized and ready to accept instructions
23
24
Reading | ################################################## | 100% 0.01s
25
26
avrdude: Device signature = 0x1e950f (probably m328p)
27
avrdude: safemode: hfuse reads as D9
28
avrdude: safemode: efuse reads as FF
29
30
avrdude: safemode: hfuse reads as D9
31
avrdude: safemode: efuse reads as FF
32
avrdude: safemode: Fuses OK (E:FF, H:D9, L:62)
33
34
avrdude done.  Thank you.

2. Test an USB3 (Bus 003)
1
# tail /var/log/syslog
2
Jul 30 17:15:53 deb10 kernel: [ 8631.478129] usb 1-1.3: USB disconnect, device number 5
3
Jul 30 17:15:58 deb10 kernel: [ 8636.897930] usb 3-2: new low-speed USB device number 4 using xhci_hcd
4
Jul 30 17:15:59 deb10 kernel: [ 8637.041654] usb 3-2: New USB device found, idVendor=1781, idProduct=0c9f
5
Jul 30 17:15:59 deb10 kernel: [ 8637.041657] usb 3-2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
6
Jul 30 17:15:59 deb10 kernel: [ 8637.041659] usb 3-2: Product: USBtinyISP
7
Jul 30 17:15:59 deb10 mtp-probe: checking bus 3, device 4: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2"
8
Jul 30 17:15:59 deb10 mtp-probe: bus: 3, device: 4 was not an MTP device
9
10
# avrdude -c usbtiny -P usb -p m328p -v
11
...
12
         Using Port                    : usb
13
         Using Programmer              : usbtiny
14
avrdude: usbdev_open(): Found USBtinyISP, bus:device: 003:004
15
         AVR Part                      : ATmega328P
16
...
17
         Programmer Type : USBtiny
18
         Description     : USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/
19
avrdude: programmer operation not supported
20
21
avrdude: Using SCK period of 10 usec
22
avrdude: AVR device initialized and ready to accept instructions
23
24
Reading | ################################################## | 100% 0.00s
25
26
avrdude: Device signature = 0x1e950f (probably m328p)
27
avrdude: safemode: hfuse reads as D9
28
avrdude: safemode: efuse reads as FF
29
30
avrdude: safemode: hfuse reads as D9
31
avrdude: safemode: efuse reads as FF
32
avrdude: safemode: Fuses OK (E:FF, H:D9, L:62)
33
34
avrdude done.  Thank you.

Infos zum AVR-ISP-Stick gibt es bei eHajo unter
    https://www.ehajo.de/bausaetze/smd/79/avr-isp-stick
    http://dokuwiki.ehajo.de/bausaetze:avr-isp-stick:anleitung

Den Stick habe ich nur einige Male angeschlossen. Wie reproduzierbar das 
ist, muss sich noch zeigen. Auch habe ich noch keine hex-Dateien 
geschrieben.

von Alexander S. (alesi)


Lesenswert?

Hallo,

einen habe ich noch...

zusätzlich zum aTeVaL von eHajo, AVRISP MkII von Atmel und AVR-ISP-Stick 
von eHajo habe ich jetzt noch den USP-mkII, auch von eHajo, getestet.
    https://www.ehajo.de/boards/151/usp-mkii-avr-programmer
    http://dokuwiki.ehajo.de/bausaetze:usp-mkii:anleitung
Aufbau mit STK500 wie beim Test mit dem AVR-ISP-Stick (s. o.) und 5 V 
vom USP-mkII.
An USB1 (Bus 001) zeigt der USP-mkII nur sporadisch eine Fehlermeldung.
1. Test an USB1 (Bus 001):
1
# tail /var/log/syslog
2
Jul 31 22:52:41 deb10 kernel: [14167.114434] usb 1-2: new full-speed USB device number 2 using xhci_hcd
3
Jul 31 22:52:41 deb10 kernel: [14167.256018] usb 1-2: New USB device found, idVendor=03eb, idProduct=2104
4
Jul 31 22:52:41 deb10 kernel: [14167.256021] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
5
Jul 31 22:52:41 deb10 kernel: [14167.256023] usb 1-2: Product: USP mkII
6
Jul 31 22:52:41 deb10 kernel: [14167.256025] usb 1-2: Manufacturer: eHaJo
7
Jul 31 22:52:41 deb10 kernel: [14167.256027] usb 1-2: SerialNumber: 0002002xxxxx
8
9
# 1. Aufruf von avrdude (Fehlermeldung, fuse kann aber gelesen werden)
10
# avrdude -c avrispmkii -P usb -p m328p -v
11
...
12
         Using Port                    : usb
13
         Using Programmer              : avrispmkii
14
avrdude: usbdev_open(): Found USP mkII, serno: 0002002xxxxxx
15
         AVR Part                      : ATmega328P
16
...
17
         Programmer Type : STK500V2
18
         Description     : Atmel AVR ISP mkII
19
         Programmer Model: AVRISP mkII
20
         Hardware Version: 0
21
         Firmware Version Master : 1.24
22
         Vtarget         : 5.0 V
23
         SCK period      : 20.12 us
24
25
avrdude: usbdev_send(): wrote 0 out of 1 bytes, err = could not detach kernel driver from interface 0: No data available
26
avrdude: stk500_send_mk2(): failed to send command to serial port
27
avrdude: AVR device initialized and ready to accept instructions
28
29
Reading | ################################################## | 100% 0.00s
30
31
avrdude: Device signature = 0x1e950f (probably m328p)
32
avrdude: safemode: hfuse reads as D9
33
avrdude: safemode: efuse reads as FF
34
35
avrdude: safemode: hfuse reads as D9
36
avrdude: safemode: efuse reads as FF
37
avrdude: safemode: Fuses OK (E:FF, H:D9, L:62)
38
39
avrdude done.  Thank you.
40
41
# 2. Aufruf von avrdude (keine Fehlermeldung)
42
# avrdude -c avrispmkii -P usb -p m328p -v
43
         Using Port                    : usb
44
         Using Programmer              : avrispmkii
45
avrdude: usbdev_open(): Found USP mkII, serno: 0002002xxxxx
46
         AVR Part                      : ATmega328P
47
...
48
         Programmer Type : STK500V2
49
         Description     : Atmel AVR ISP mkII
50
         Programmer Model: AVRISP mkII
51
         Hardware Version: 0
52
         Firmware Version Master : 1.24
53
         Vtarget         : 5.0 V
54
         SCK period      : 20.12 us
55
56
avrdude: AVR device initialized and ready to accept instructions
57
58
Reading | ################################################## | 100% 0.00s
59
60
avrdude: Device signature = 0x1e950f (probably m328p)
61
avrdude: safemode: hfuse reads as D9
62
avrdude: safemode: efuse reads as FF
63
64
avrdude: safemode: hfuse reads as D9
65
avrdude: safemode: efuse reads as FF
66
avrdude: safemode: Fuses OK (E:FF, H:D9, L:62)
67
68
avrdude done.  Thank you.

2. Test an USB3 (Bus 003)
1
Jul 31 23:10:18 deb10 kernel: [15224.547542] usb 1-2: USB disconnect, device number 2
2
Jul 31 23:10:35 deb10 kernel: [15241.522801] usb 3-1.3: new full-speed USB device number 5 using ehci-pci
3
Jul 31 23:10:35 deb10 kernel: [15241.636500] usb 3-1.3: New USB device found, idVendor=03eb, idProduct=2104
4
Jul 31 23:10:35 deb10 kernel: [15241.636504] usb 3-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
5
Jul 31 23:10:35 deb10 kernel: [15241.636506] usb 3-1.3: Product: USP mkII
6
Jul 31 23:10:35 deb10 kernel: [15241.636507] usb 3-1.3: Manufacturer: eHaJo
7
Jul 31 23:10:35 deb10 kernel: [15241.636509] usb 3-1.3: SerialNumber: 0002002xxxxx
8
9
# 1. Aufruf von avrdude (kein Fehler)
10
# avrdude -c avrispmkii -P usb -p m328p -v
11
         Using Port                    : usb
12
         Using Programmer              : avrispmkii
13
avrdude: usbdev_open(): Found USP mkII, serno: 0002002xxxxx
14
         AVR Part                      : ATmega328P
15
...
16
         Programmer Type : STK500V2
17
         Description     : Atmel AVR ISP mkII
18
         Programmer Model: AVRISP mkII
19
         Hardware Version: 0
20
         Firmware Version Master : 1.24
21
         Vtarget         : 5.0 V
22
         SCK period      : 20.12 us
23
24
avrdude: AVR device initialized and ready to accept instructions
25
26
Reading | ################################################## | 100% 0.00s
27
28
avrdude: Device signature = 0x1e950f (probably m328p)
29
avrdude: safemode: hfuse reads as D9
30
avrdude: safemode: efuse reads as FF
31
32
avrdude: safemode: hfuse reads as D9
33
avrdude: safemode: efuse reads as FF
34
avrdude: safemode: Fuses OK (E:FF, H:D9, L:62)
35
36
avrdude done.  Thank you.
37
38
# 2. Aufruf von avrdude (kein Fehler)
39
# avrdude -c avrispmkii -P usb -p m328p -v
40
...
41
         Using Port                    : usb
42
         Using Programmer              : avrispmkii
43
avrdude: usbdev_open(): Found USP mkII, serno: 0002002xxxxx
44
         AVR Part                      : ATmega328P
45
...
46
         Programmer Type : STK500V2
47
         Description     : Atmel AVR ISP mkII
48
         Programmer Model: AVRISP mkII
49
         Hardware Version: 0
50
         Firmware Version Master : 1.24
51
         Vtarget         : 5.0 V
52
         SCK period      : 20.12 us
53
54
avrdude: AVR device initialized and ready to accept instructions
55
56
Reading | ################################################## | 100% 0.01s
57
58
avrdude: Device signature = 0x1e950f (probably m328p)
59
avrdude: safemode: hfuse reads as D9
60
avrdude: safemode: efuse reads as FF
61
62
avrdude: safemode: hfuse reads as D9
63
avrdude: safemode: efuse reads as FF
64
avrdude: safemode: Fuses OK (E:FF, H:D9, L:62)
65
66
avrdude done.  Thank you.

Sieht so aus, als ob an meinem PC das aTeVaL und der USP-mkII am USB1 
(Bus 001) in einigen Fällen einen Fehler / eine Warnung liefern und an 
USB3 (Bus 003) nicht. Der AVR-ISP-Stick und der Atmel AVRISP MkII 
scheinen an beiden USB-Anschlüssen einwandfrei zu funktionieren. 
Verallgemeinern kann man das sicher nicht, evtl. ist es ein spezielles 
Problem bei meinem USB1-Anschluss. Außerdem konnte ich die Tests nur 
wenige Male wiederholen.

von Alexander S. (alesi)


Lesenswert?

Hallo,

um die Tests etwas aussagekräftiger zu machen, habe ich per Bash-Skript 
für jeden USB-Programmierer und beide Arten von USB-Buchse avrdude je 
100 Mal aufgerufen. Zwischen den avrdude Aufrufen wurde mit "sleep .5" 
eine halbe Sekunde gewartet.
Zusätzlich zum Atmel AVRISP MkII, aTeVaL, AVR-ISP-Stick, USP-mkII (alle 
eHajo) habe ich noch den USBtinyISP von lady ada und den mySmartUSB MK2 
von myAVR probiert.
Die Tabelle gibt an wie oft die Meldung
1
avrdude: usbdev_send(): wrote 0 out of 1 bytes, err = could not detach kernel driver from interface 0: No data available
2
avrdude: stk500_send_mk2(): failed to send command to serial port
erschienen ist.
1
                      USB-card      USB-front
2
                      ehci-pci      xhci_hcd
3
----------------------------------------------
4
AVRISP MkII              0             0
5
AVR-ISP-Stick            0             0
6
USP-mkII                 0            48
7
aTeVaL                   0           100
8
USBtinyISP               0             0
9
mySmartUSB MK2           0             0
Die Ergebnisse gelten nur für meinen speziellen Aufbau und PC und 
sollten nicht verallgemeinert werden.
Vielleicht liegt es auch einfach an der max. Strombelastbarkeit der 
USB-Anschlüsse in der PC-Front.

von Stefan F. (Gast)


Lesenswert?

> Vielleicht liegt es auch einfach an der max. Strombelastbarkeit

Bist du den sicher, dass USP-mkII und aTeVaL mehr Strom aufnehmen? Auf 
den Fotos beider Produkte sehe ich keine Bauteile, bei denen ich eine 
besonder hohe Stromaufnahme erwarten würde. Die sind doch beide 
vermutlich weit unter 100mA.

Wenn du Recht hast, müsste das Problem verschwinden, wenn du zusätzlich 
ein Netzteil anschließt. Falls das klappt, könnte folgende Erklärung 
aufschlussreich sein:

Ich habe mal gelesen, dass Polyfuses nach dem ersten Auslösen einen 
erhöhten Innenwiderstand bekommen und dass diese Dinger zum Schutz gegen 
Kurzschlüsse oft in USB Ports verbaut sind.

von Jim M. (turboj)


Lesenswert?

Alexander S. schrieb:
> Vielleicht liegt es auch einfach an der max. Strombelastbarkeit der
> USB-Anschlüsse in der PC-Front.

Ich hatte schon sehr grafflige Front-USB in "preiswerten" Gehäusen, die 
auf dem Oszi erkenbar schlechteres Signal liefern.

Eventuell hilft ein zwischengeschalteter USB 2.0 Hub. USB high Speed hat 
ein paar HF Tricks im Ärmel.

Übrigens würde ich auch mal einfach die 5V Spannung messen - ältere 
Netzteile hatten hier öfters mal ein Problem und liefen aus der Toleranz 
raus. Beim aTeVaL Board sollte man da problemlos mit 'nem Multimeter ran 
kommen.

von Alexander S. (alesi)


Lesenswert?

Stefanus F. schrieb:
> Bist du den sicher, dass USP-mkII und aTeVaL mehr Strom aufnehmen?

Nein, deswegen hatte ich "vielleicht" geschrieben. :-)
Ich dachte auch eher an einen kurzen Stromimpuls beim Start und nicht an 
einen Dauerstrom.

Jim M. schrieb:
> Ich hatte schon sehr grafflige Front-USB in "preiswerten" Gehäusen, die
> auf dem Oszi erkenbar schlechteres Signal liefern.

Das will ich nicht ausschließen. Allerdings scheinen die anderen 
Programmer ja kein Problem mit dem USB-Anschluss zu haben.

von Alexander S. (alesi)


Lesenswert?

Jim M. schrieb:
> Übrigens würde ich auch mal einfach die 5V Spannung messen

_ aTeVaL an USB-SD-card-reader: 4,94 V, an USB-PC-Front: 4,95 V
USP-MkII an USB-SD-card-reader: 5,02 V, an USB-PC-Front: 5,03 V

Sieht also erstmal ok aus. Allerdings sind die Spannungen am aTeVal 
etwas niedriger.

von Alexander S. (alesi)


Lesenswert?

Stefanus F. schrieb:
> Ich habe mal gelesen, dass Polyfuses nach dem ersten Auslösen einen
> erhöhten Innenwiderstand bekommen und dass diese Dinger zum Schutz gegen
> Kurzschlüsse oft in USB Ports verbaut sind.

Das aTeVal-Board hat eine Polyfuse:
https://www.ehajo.de/bausaetze/bedrahtet/89/ateval-microchip-avr-evaluationsboard
"...eine 500mA Sicherung (selbstrückstellend) ..."
http://dokuwiki.ehajo.de/_media/bausaetze:evalboard-005.pdf

Da messe ich ca. 0,5 Ohm.
Ich kann mich aber nicht erinnern, dass die jemals ausgelöst hat.

[Edit] Widerstand nachgetragen.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Ich meinte auch eher die Polyfuse am USB Port des Computers, falls 
vorhanden.

von S. R. (svenska)


Lesenswert?

Hast du mal versucht, den xHCI-Treiber zu entladen und die betroffenen 
Ports im OHCI/EHCI-Modus zu betreiben?

von Alexander S. (alesi)


Lesenswert?

S. R. schrieb:
> Hast du mal versucht, den xHCI-Treiber zu entladen und die betroffenen
> Ports im OHCI/EHCI-Modus zu betreiben?

Mit den Interna von USB habe ich mich noch nie näher beschäftigt.
Da müsste ich mich erstmal etwas informieren. Wie ich unter Linux
den Port im OHCI/EHCI-Modus betreiben kann, muss ich erst recherchieren.

von tuxie (Gast)


Lesenswert?

Teste mal einen neueren Kernel - z.B.:

apt install linux-image-4.17.0-0.bpo.1-amd64

von Jim M. (turboj)


Lesenswert?

S. R. schrieb:
> Hast du mal versucht, den xHCI-Treiber zu entladen und die betroffenen
> Ports im OHCI/EHCI-Modus zu betreiben?

Der Trick dürfte für die internen USB Ports im Skylake (und folgenden) 
nicht mehr funktionieren. Ohne xHCI sind die Ports tot.

: Bearbeitet durch User
von S. R. (svenska)


Lesenswert?

Alexander S. schrieb:
> Mit den Interna von USB habe ich mich noch nie näher beschäftigt.

Für USB 2.0 (EHCI) brauchte man immer einen Companion Controller (also 
einen USB 1.1-Controller (OHCI oder UHCI), der die langsamen 
Geschwindigkeiten konnte. Also hat ein "rmmod ehci" ausgereicht, um USB 
2.0 komplett abzuschalten - und Betriebssysteme ohne EHCI-Treiber 
konnten trotzdem USB sprechen.

Auf die gleiche Weise kriegt man auch den USB 3-Controller (xHCI) tot. 
Aber:

Jim M. schrieb:
> Der Trick dürfte für die internen USB Ports im Skylake (und folgenden)
> nicht mehr funktionieren. Ohne xHCI sind die Ports tot.

Das scheint zu stimmen. Ohne xHCI-Treiber gibt es garkein USB mehr.

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.