Forum: PC-Programmierung libusb-win32 für Sunplus "SPCP825 USB to UART Bridge" in V&A Multimeterkabel VA4000


von Info (Gast)


Angehängte Dateien:

Lesenswert?

Treiber für den Wandler "Sunplus SPCP825" (VID:PID 04fc:0201, REV_7109) 
gibt es offenbar nicht mehr für Windows: 
Beitrag "Re: [S] Multimeter PC-Kabel: UNI-T UT-D04, V&A VA4000, V&A VA4001"

Martin Schewe hat die USB Transfers des Kabels für Linux abgehört und 
mit Libusb unter Linux implementiert: http://multimeter.schewe.com/

Im Anhang gibt es einen MinGW "Port", leider gibt es folgenden Fehler:
1
> optocoupler.exe
2
starting...
3
cli options done
4
open device...
5
scanning USB devices
6
Device: Vendor: 0x04FC Product: 0x0201
7
found device
8
Endpoint address: 0x81
9
Max packet size: 16
10
Endpoint address: 0x02
11
Max packet size: 8
12
setup device...
13
claim interface, send control messages
14
Status: 0, Error: No error
15
Status: 0, Error: No error
16
Status: 0, Error: No error
17
Status: 0, Error: No error
18
device opened, discarding buffer...
19
USB bulk write return value: -22
20
Error: libusb0-dll:err [_usb_setup_async] invalid endpoint 0x81

Treiber in multimeter-0.1_win32\libusb-win32-bin-1.2.6.0\bin, ggf. durch 
die Debug-Version aus libusb-win32-bin-debug-1.2.6.0.zip (sourceforge) 
ersetzen.

Test der Installation:
1
 multimeter-0.1/libusb-win32-bin-1.2.6.0/bin/x86
2
> testlibusb.exe
3
4
Dev #0: 0000 - 0000
5
6
  Dev #1: 04FC - USB to RS232C Adapter

Im Anhang die modifizierten Quellen, aktuelle libusb-win32, sowie 
dbgview, das mit der debugversion der Bibliothek folgendes ausgibt:
1
libusb0-sys:[release_all_interfaces] releasing all interfaces bound to file object 0x423fc80
2
libusb0-sys:[release_all_interfaces] releasing all interfaces bound to file object 0x423fc80
3
libusb0-sys:[get_descriptor] buffer size: 18 type: 0001 recipient: 0000 index: 0000 language id: 0000 timeout: 5000
4
libusb0-sys:[release_all_interfaces] releasing all interfaces bound to file object 0x423fc80
5
libusb0-sys:[get_descriptor] buffer size: 9 type: 0002 recipient: 0000 index: 0000 language id: 0000 timeout: 1000
6
libusb0-sys:[get_descriptor] buffer size: 32 type: 0002 recipient: 0000 index: 0000 language id: 0000 timeout: 1000
7
libusb0-sys:[release_all_interfaces] releasing all interfaces bound to file object 0x423fc80
8
libusb0-sys:[claim_interface] interface 0
9
libusb0-sys:[vendor_class_request] type: vendor
10
libusb0-sys:[vendor_class_request] recipient: device
11
libusb0-sys:[vendor_class_request] request: 0x21
12
libusb0-sys:[vendor_class_request] value: 0x0303
13
libusb0-sys:[vendor_class_request] index: 0x0000
14
libusb0-sys:[vendor_class_request] size: 0
15
libusb0-sys:[vendor_class_request] direction: out
16
libusb0-sys:[vendor_class_request] timeout: 1000
17
libusb0-sys:dbg [call_usbd_ex] status = 00000000h
18
libusb0-sys:[vendor_class_request] 0 bytes transmitted
19
libusb0-sys:[vendor_class_request] type: vendor
20
libusb0-sys:[vendor_class_request] recipient: device
21
libusb0-sys:[vendor_class_request] request: 0x22
22
libusb0-sys:[vendor_class_request] value: 0x0100
23
libusb0-sys:[vendor_class_request] index: 0x0000
24
libusb0-sys:[vendor_class_request] size: 0
25
libusb0-sys:[vendor_class_request] direction: out
26
libusb0-sys:[vendor_class_request] timeout: 1000
27
libusb0-sys:dbg [call_usbd_ex] status = 00000000h
28
libusb0-sys:[vendor_class_request] 0 bytes transmitted
29
libusb0-sys:[vendor_class_request] type: vendor
30
libusb0-sys:[vendor_class_request] recipient: device
31
libusb0-sys:[vendor_class_request] request: 0x21
32
libusb0-sys:[vendor_class_request] value: 0x0303
33
libusb0-sys:[vendor_class_request] index: 0x0000
34
libusb0-sys:[vendor_class_request] size: 0
35
libusb0-sys:[vendor_class_request] direction: out
36
libusb0-sys:[vendor_class_request] timeout: 1000
37
libusb0-sys:dbg [call_usbd_ex] status = 00000000h
38
libusb0-sys:[vendor_class_request] 0 bytes transmitted
39
libusb0-sys:[release_interface] interface 0
40
libusb0-sys:[release_all_interfaces] releasing all interfaces bound to file object 0x423fc80

Leider komme ich nicht weiter, da ich mich mit USB noch nie beschäftigt 
habe. Liegt das Problem wahrscheinlicher in den Unterschieden der 
libusb-Varianten oder an ggf. geänderter Hardware? Kann sich USB unter 
Windows anders verhalten als unter Linux (abgesehen davon, das es 
standardisiert ist)?

So einen Fehler findet man auch anderswo im Netz, aber ich werde aus den 
Antworten nicht schlau.

von Info (Gast)


Lesenswert?

Device info von hier: 
http://sigrok.org/wiki/Device_cables/Info#V.26A_VA4000
1
$ lsusb -vvv
2
Bus 005 Device 069: ID 04fc:0201 Sunplus Technology Co., Ltd
3
Device Descriptor:
4
  bLength                18
5
  bDescriptorType         1
6
  bcdUSB               1.10
7
  bDeviceClass            0 (Defined at Interface level)
8
  bDeviceSubClass         0 
9
  bDeviceProtocol         0 
10
  bMaxPacketSize0         8
11
  idVendor           0x04fc Sunplus Technology Co., Ltd
12
  idProduct          0x0201 
13
  bcdDevice            1.00
14
  iManufacturer           0 
15
  iProduct                2 RS232C to USB Adapter
16
  iSerial                 0 
17
  bNumConfigurations      1
18
  Configuration Descriptor:
19
    bLength                 9
20
    bDescriptorType         2
21
    wTotalLength           32
22
    bNumInterfaces          1
23
    bConfigurationValue     1
24
    iConfiguration          0 
25
    bmAttributes         0x80
26
      (Bus Powered)
27
    MaxPower              100mA
28
    Interface Descriptor:
29
      bLength                 9
30
      bDescriptorType         4
31
      bInterfaceNumber        0
32
      bAlternateSetting       0
33
      bNumEndpoints           2
34
      bInterfaceClass         0 (Defined at Interface level)
35
      bInterfaceSubClass      0 
36
      bInterfaceProtocol      0 
37
      iInterface              0 
38
      Endpoint Descriptor:
39
        bLength                 7
40
        bDescriptorType         5
41
        bEndpointAddress     0x81  EP 1 IN
42
        bmAttributes            2
43
          Transfer Type            Bulk
44
          Synch Type               None
45
          Usage Type               Data
46
        wMaxPacketSize     0x0010  1x 16 bytes
47
        bInterval               0
48
      Endpoint Descriptor:
49
        bLength                 7
50
        bDescriptorType         5
51
        bEndpointAddress     0x02  EP 2 OUT
52
        bmAttributes            2
53
          Transfer Type            Bulk
54
          Synch Type               None
55
          Usage Type               Data
56
        wMaxPacketSize     0x0008  1x 8 bytes
57
        bInterval               0
58
Device Status:     0x0000
59
  (Bus Powered)

von Mark 99 (Gast)


Lesenswert?

Info schrieb:
> Leider komme ich nicht weiter, da ich mich mit USB noch nie beschäftigt
> habe.

Wenn es ein ernstes Problem ist, dann wirst du kaum drumherum kommen. 
USB Complete von Jan Axelson ist das Lehrbuch der Wahl. Die Standards 
sind zwar frei erhältlich aber ein ziemlich heftiges Kaliber.

> Liegt das Problem wahrscheinlicher in den Unterschieden der
> libusb-Varianten

Kann sein, muss man halt (mühsam) debuggen.

> oder an ggf. geänderter Hardware?

Kann sein, muss man halt debuggen.

> Kann sich USB unter Windows anders verhalten als unter Linux (abgesehen
> davon, das es standardisiert ist)?

Ja, schon weil die prinzipielle Treiberarchitektur eine andere ist.

Zum Debuggen: Wireshark mit USB-Unterstützung ist nützlich.

von Info (Gast)


Lesenswert?

Ja, schade, die Wahrscheinlichkeit, dass sich (hier) ein USB Experte mit 
besagtem Programmierkabel und Windows 7 findet, dürfte gering sein.
Da sich der Aufwand für mich dann nicht lohnt -> Abbruch.

von Jim M. (turboj)


Lesenswert?

Ich würde einfach eine Linux VM mit VMware Player installieren und das 
USB Gerät durchreichen.

Die Fehlermeldung beim MingW Port deutet auf flachen Endpoint hin: Es 
wird versucht, auf dem 0x81 zu schreiben. Vom Endpoint 0x81 kann der PC 
aber nur lesen (das sagt das 0x80 Bit: IN). Zum Schreiben muss der 
Endpoint 0x02 benutzt werden.

von Info (Gast)


Lesenswert?

Jim Meba schrieb:
> Die Fehlermeldung beim MingW Port deutet auf flachen Endpoint hin: Es
> wird versucht, auf dem 0x81 zu schreiben. Vom Endpoint 0x81 kann der PC
> aber nur lesen (das sagt das 0x80 Bit: IN). Zum Schreiben muss der
> Endpoint 0x02 benutzt werden.

Damit kann "das Kabel" leider nichts anfangen:
1
USB bulk write return value: -116
2
Error: libusb0-dll:err [_usb_reap_async] timeout error

von Christian R. (supachris)


Lesenswert?

Info schrieb:
> Damit kann "das Kabel" leider nichts anfangen:
> USB bulk write return value: -116
> Error: libusb0-dll:err [_usb_reap_async] timeout error

Das kann genauso gut bedeuten, dass du da ein Protokoll einhalten musst. 
Wahrscheinlich macht die Firmware einen STALL auf dem Endpoint, wenn die 
Daten nicht wie erwartet kommen.

von Info (Gast)


Lesenswert?

Richtig - wenn keine Daten abzuholen sind, gibt es einen Timeout.
Das Problem war also eigentlich nur das read/write Bit in der 
Endpoint-Adresse, bzw. die im Code genutzte bulk Funktion.
Ich poste bei Gelegenheit meinen rudimentären code und exe für VA38.

Danke für die Hilfe.

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.