CP2112 API: INVALID_PARAMETER

OP Persönliche Seite #3339227
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).
Angehängte Dateien:
OP Persönliche Seite #3340248
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren