Felsöka USB-enhet som använder libusb [LÖST]

I detta forum diskuterar vi frågor relaterade till fysisk hårdvara.
Ubunturelaterade frågor ska ställas i Hårdvara
Kategoriregler
I detta forum diskuterar vi frågor relaterade till fysisk hårdvara.
Ubunturelaterade frågor ska ställas i Hårdvara
m!rage
Inlägg: 2550
Blev medlem: 28 apr 2009, 21:47
OS: Arch Linux
Ort: Lund

Felsöka USB-enhet som använder libusb [LÖST]

Inlägg av m!rage »

Jag har byggt en programmerare av en AVR-mikrokontroller som kopplas till datorn och emulerar en USB-enhet.
Den insatte kan läsa mer här: http://www.fischl.de/usbasp/ och http://www.obdev.at/products/vusb/index.html
Problemet är att den bara fungerar ibland. Det verkar vara i princip helt slumpmässigt, men jag har fått för mig att det går bättre om man kopplar in den och sen låter den vara i några minuter, utan att försöka ansluta till den med programmet avrdude (som kommunicerar med den via libusb)
När den kopplas in visas följande i dmesg:

Kod: Markera allt

[39708.928076] usb 3-1: new low speed USB device using uhci_hcd and address 52
[39709.303884] usb 3-1: configuration #1 chosen from 1 choice
Enheten enumereras alltså korrekt. Om allt fungerar visas ingenting mer och avrdude kan ansluta till programmeraren. Om avrdude misslyckas ger programmet följande utskrift:

Kod: Markera allt

$ avrdude -c usbasp -p m168 
avrdude: Warning: cannot query manufacturer for device: error sending control message: Protocol error
avrdude: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc
och i dmesg visas:

Kod: Markera allt

[39476.392142] usb 3-1: usbfs: USBDEVFS_CONTROL failed cmd avrdude rqt 128 rq 6 len 255 ret -71
Då är det "kört" och jag måste dra ur och koppla in enheten igen. lsusb när allt är som det ska:

Kod: Markera allt

$ lsusb -vs 003:052

Bus 003 Device 052: ID 16c0:05dc VOTI USBasp AVR Programmer
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass          255 Vendor Specific Class
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x16c0 VOTI
  idProduct          0x05dc USBasp AVR Programmer
  bcdDevice            1.03
  iManufacturer           1 www.fischl.de
  iProduct                2 USBasp
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           18
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower               50mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         0 (Defined at Interface level)
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
Device Status:     0x0000
  (Bus Powered)
lsusb när den inte fungerar:

Kod: Markera allt

$ lsusb -vs 003:055

Bus 003 Device 055: ID 16c0:05dc VOTI USBasp AVR Programmer
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass          255 Vendor Specific Class
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x16c0 VOTI
  idProduct          0x05dc USBasp AVR Programmer
  bcdDevice            1.03
  iManufacturer           1 
  iProduct                2 
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           18
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower               50mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         0 (Defined at Interface level)
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
cannot read device status, Protocol error (71)
När jag körde lsusb gav det denna utskrift i dmesg:

Kod: Markera allt

[40803.665148] usb 3-1: usbfs: USBDEVFS_CONTROL failed cmd lsusb rqt 128 rq 6 len 255 ret -71          
[40803.669124] usb 3-1: usbfs: USBDEVFS_CONTROL failed cmd lsusb rqt 128 rq 6 len 255 ret -71          
[40803.673099] usb 3-1: usbfs: USBDEVFS_CONTROL failed cmd lsusb rqt 128 rq 0 len 2 ret -71
Hela tiden error -71, vad betyder det? Eftersom den faktiskt fungerar utan problem ibland tror jag inte att det är ett hårdvarufel, men jag kan ju ha fel.
Lite mer info:
Ibland visas error -71 direkt vid inkoppling:

Kod: Markera allt

[41691.941458] usb 3-1: new low speed USB device using uhci_hcd and address 62
[41692.087877] usb 3-1: device descriptor read/all, error -71
dmesg när enheten inte kan enumereras (för att jag kopplat bort mikrokontrollern):

Kod: Markera allt

[40998.032086] usb 3-1: new low speed USB device using uhci_hcd and address 58                         
[40998.152137] usb 3-1: device descriptor read/64, error -71                                           
[40998.380099] usb 3-1: device descriptor read/64, error -71
[40998.596123] usb 3-1: new low speed USB device using uhci_hcd and address 59                         
[40998.716117] usb 3-1: device descriptor read/64, error -71
[40998.940068] usb 3-1: device descriptor read/64, error -71                                           
[40999.156075] usb 3-1: new low speed USB device using uhci_hcd and address 60                         
[40999.568055] usb 3-1: device not accepting address 60, error -71                                     
[40999.680125] usb 3-1: new low speed USB device using uhci_hcd and address 61
[41000.088057] usb 3-1: device not accepting address 61, error -71                                     
[41000.088093] hub 3-0:1.0: unable to enumerate USB device on port 1
Att det är en low speed-enhet identifieras av pullup-motståndet på D- till 3.3V (se schemat på första länken).
libusb version (vet inte vilken av de två som används):

Kod: Markera allt

$ aptitude show libusb-0.1-4
Paket: libusb-0.1-4
Tillstånd: installerat
Automatiskt installerade: nej
Version: 2:0.1.12-14
Prioritet: nödvändigt
Sektion: libs
Underhållare: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Uppackad storlek: 98,3k
Beroende: libc6 (>= 2.4)
Konfliktar: libccid (< 0.9.2-3), libusb0
Ersätter: libusb0
Beskrivning: userspace USB programming library
 Library for programming USB applications without the knowledge of Linux kernel internals.
Webbplats: http://www.linux-usb.org/

$ aptitude show libusb-1.0-0
Paket: libusb-1.0-0
Tillstånd: installerat
Automatiskt installerade: ja
Version: 2:1.0.6-1
Prioritet: valfri
Sektion: libs
Underhållare: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Uppackad storlek: 115k
Beroende: libc6 (>= 2.8)
Beskrivning: userspace USB programming library
 Library for programming USB applications without the knowledge of Linux kernel internals.
Webbplats: http://www.linux-usb.org/
Hoppas att infon räcker för att någon ska se vad felet är!
Senast redigerad av 1 m!rage, redigerad totalt 7 gånger.
m!rage
Inlägg: 2550
Blev medlem: 28 apr 2009, 21:47
OS: Arch Linux
Ort: Lund

Re: Felsöka USB-enhet som använder libusb

Inlägg av m!rage »

Skitsamma, det var ett hårdvarufel trots allt. En annan programmerare som användes för att programmera programmeraren ( ;D) var inkopplad och störde, dvs resettade mikrokontrollern vid uppstart så den inte var beredd då datorn började skicka usb-signaler
Skriv svar

Återgå till "Hårdvara som hårdvara"