Forum: PC-Programmierung CP2112 API: INVALID_PARAMETER


von Torsten C. (torsten_c) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich die Funktion "GetReadResponse" aus der "CP2112 HID USB-TO-SMBUS API" 
liefert immer den Fehler "INVALID_PARAMETER". Ich habe schon alles 
denkbare probiert und gegoogelt und komme nicht weiter:

Hier ist die API beschrieben:
http://www.silabs.com/Support%20Documents/TechnicalDocs/AN496.pdf

Grundsätzlich geht's ja, siehe unten, aber "HidSmbus_GetReadResponse" 
antwortet immer mit "Result = HID_SMBUS_INVALID_PARAMETER"

Mein Code (VB .NET):
1
Dim hndCP3112Dev As IntPtr = 0
2
Result = HidSmbus_Open(hndCP3112Dev, 0, &H10C4, &HEA90)
… und dann:
1
Dim b() As Byte = {0}
2
Dim status As Byte = 0
3
Dim nrRead As Byte = 0
4
Result = HidSmbus_GetReadResponse(hndCP3112Dev, status, b, 1, nrRead)
5
If Result = HID_SMBUS_INVALID_PARAMETER Then Stop

Ich habe die neueste Version genutzt:
http://www.silabs.com/products/interface/usbtouart/Pages/HID-USB-to-SMBus-Bridge.aspx

Die Funktion wird dort wie folgt deklariert:
1
Public Declare Function HidSmbus_GetReadResponse Lib "SLABHIDtoSMBus.dll" (ByVal device As IntPtr, ByRef status As Byte, ByVal buffer() As Byte, ByVal bufferSize As Byte, ByRef numBytesRead As Byte) As Integer

Wie gesagt, es geht soweit, der Chip fühlt sich angesprochen:

HidSmbus_GetNumDevices:             Geht, der CP2112 wird gefunden
HidSmbus_Open:                      Geht, ich bekomme einen IntPtr
HidSmbus_AddressReadRequest:        Meldet "HID_SMBUS_SUCCESS"
HidSmbus_ForceReadResponse:         Meldet "HID_SMBUS_SUCCESS"
HidSmbus_TransferStatusRequest:     Meldet "HID_SMBUS_SUCCESS"
HidSmbus_GetTransferStatusResponse: Geht auch:
  - bei korrekter I²C-Adresse kommt:
    "HID_SMBUS_S0_COMPLETE"
  - bei falscher I²C-Adresse kommt:
    "HID_SMBUS_S1_BUSY_ADDRESS_NACKED"

Das Problem ist die API-Funktion "HidSmbus_GetReadResponse"^^.

Ich nehme an, dass "ByVal buffer() As Byte" von Silicon Labs in "Declare 
Function" nicht korrekt ist, aber "ByRef buffer() As Byte" oder "ByRef 
buffer As Byte" gehen auch nicht.

Der Prototyp ist gemäß Spec:
1
HID_SMBUS_STATUS HidSmbus_GetTransferStatusResponse (HID_SMBUS_DEVICE device, HID_SMBUS_S0* status, HID_SMBUS_S1* detailedStatus, WORD* numRetries, WORD* bytesRead)

Ich wollte es auch in c++ probieren, aber da bin ich nicht so fit wie in 
VB. Dort hänge ich schon viel früher (siehe Bild).

: Bearbeitet durch User
von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Hallo!

Ich habe nochmal alles erdenkliche für "Declare Function" probiert, 
immer das gleiche Problem.

Der CP2112 wäre doch 'ne feine Sache, um I²C-Sensoren (Licht, 
Beschleunigung, ...) auf einem PC auszulesen. Nutzt den jemand von Euch? 
Funktioniert das bei Euch?

VG Torsten

von max (Gast)


Lesenswert?

Hey Torsten,

in der Beschreibung steht doch, dass Buffer 61 Byte groß sein und als 
Referenz übergeben werden muss, oder täusche ich mich?

Grüße,
Max

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

max schrieb:
> in der Beschreibung steht doch, dass Buffer 61 Byte groß sein und als
> Referenz übergeben werden muss, oder täusche ich mich?

Nein Du täuschst Dich nicht; da steht: "bufferSize … must be at least 61 
bytes."

Manchmal sieht man den Wald vor lauter Bäumen nicht.

Max, Du hast mich gerettet! Ich habe zwei Tage lang den Fehler an der 
falschen Stelle gesucht. Vielen Dank, nun geht's. :-)

Du hast einen bei mir Gut! :-)

Jetzt macht der CP2112 wieder Spaß. :-)

DANKE!

: Bearbeitet durch User
von max (Gast)


Lesenswert?

Freut mich =)

Dann viel Spaß noch!

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.