Hallo zusammen,
ich bin Not geraten und vielleicht weiß jemand Rat.
Ich verwende den ATtiny85-20SU, und habe libusb installiert.
Alles wunderbar, libusb erzeugt keinen Physikalischen COM port (Fehler?)
Aber ich verwende die Arduino IDE über DIGISPARK 16.5Mhz (Default)
Der COM -Port wird also scheinbar ignoriert da nicht vorhanden.
Soweit alles gut und auch Programmierbar.
Ich möchte nun die libusb direkt ansprechen um Serial Daten mit dem
ATtiny zu teilen, dazu verwende ich teile des Codebeispiels aus
der libusb/bulk.c
Das Gerät wird gefunden und ich kann es öffnen und ein Interface
erlangen.
Leider schlägt jedes Read oder Write mit einem Fehlercode -5 oder -22
fehl.
1
// Device vendor and product id.
2
#define MY_VID 0x16D0
3
#define MY_PID 0x0753
4
5
// Device configuration and interface id.
6
#define MY_CONFIG 1
7
#define MY_INTF 0
8
9
// Device endpoint(s)
10
#define EP_IN 0x81
11
#define EP_OUT 0x01
12
13
// Device of bytes to transfer.
14
#define BUF_SIZE 8
15
16
17
usb_dev_handle *open_dev(void)
18
{
19
struct usb_bus *bus;
20
struct usb_device *dev;
21
22
for (bus = usb_get_busses(); bus; bus = bus->next)
Wie lauten die Fehlermeldungen zu den Codes? Wenigstens eine klingt nach
timeout, d.h. der µC hat die Daten nicht rechtzeitig bereitgestellt oder
abgenommen.
Ist das VUSB? Dort würde ich eher mit Control Transfers arbeiten, Bulk
ist bei low speed laut USB Spec nicht erlaubt.
Hallo Jim,
die Meldungen aus dem Codefragment lauten wie folgt:
Vendor 16d04 Product 7534
error writing:
libusb0-dll:err [submit_async] submitting request failed, win error: The
parameter is incorrect.
error reading:
libusb0-dll:err [submit_async] submitting request failed, win error: The
parameter is incorrect.
Press any key to continue . . .
Ich habe mit usb_control_msg statt bulk die selben Fehler erlangt.
Auf dem Chip habe ich ein blockendes Read auf den Serialport,
es soll schreiben falls Daten rdy.
Ich verwende TinyWireM Objekt. hoffe das ist überhaupt das richtige.
(Bin gerade neu dazu gestoßen vorher ADuc70)
Wenn der Chip keine lese/schreib Aktionen auslöst sollte ja das timeout
wirken, alle Fehler werden sofort ausgelöst.
IDE Prog:
> Ich verwende TinyWireM Objekt
Für USB ist das sicher das falsche Objekt. TinyWireM braucht man IMHO
für I²C, ich sehe in dem Sketch nichts für USB. Die VID und PID sind vom
Bootloader.
Wenn Du USB Bulk Daten austauchen wills, solltest Du Dir einen
potenteren µC aussuchen, der USB nativ anbinden kann. Das ist mit 12
MBit/s auch deutlich schneller, die 1,5 MBit bei low speed können
durchaus ein Nadelöhr darstellen.
Hallo Jim,
Es geht eher um die Kommunikation denn die schlägt bei jedem lese oder
schreibversuch, sofort fehl. Öffnen vendor/prod lesen alles kein
Problem.
Nach dem erfolgreichen öffnen des Gerätes via Libusb0.dll
Löst bereits die blose Abfrage nach device details folgenden Fehler aus:
libusb0-dll:err [control_msg] sending control message failed, win error:
A device attached to the system is not functioning.
Die IDE hat keine Probleme mit dem Gerät zu kommunizieren.
>>potenteren µC aussuchen
Naja es ist ja kein Spassproject, und bereits der entscheid für einen
micro-controller abgewogen.
Man möchte also nur geringe Daten gelegentlich tauschen.
Scheinbar liegt ein genereller Fehler vor.
Die USB Deskriptoren muss man nich abfragen. Die Strukturen die
usb_get_busses() holt enthalten bereits alles nötige bis auf Strings.
Dort sollte man sich erstmal die Endpoint Deskriptoren ansehen.
Unter Linux geht das einfach mit
1
lsusb -v
aber unter Windows kenne ich kein leider nichts vergleichbares.