Forum: Mikrocontroller und Digitale Elektronik [LPC11Cxx] Chip_I2C_MasterRead(.) keine MultipleByteRead-Funktion?


von Note (Gast)


Lesenswert?

Hallo Leute,

kurze Frage an die Runde, da ich hier bei der i2c_11xx-Bibliothek nicht 
weiterkomme. Und zwar geht es um die i2c-Auslesefunktion.
Das Problem ist: Trotz dem korrekt angegebenen xfer.rxSz (größer 1) wird 
nur ein Byte ausgelesen und anschließend die Verbindung per NACK 
beendet. Der StateHandler scheint eigentlich i.O. zu sein.

Hat jemand ein ähnliches Problem?

Danke im Voraus

von Jim M. (turboj)


Lesenswert?

Zeig mal Deinen Code, meine Glaskugel ist in Reparatur.

von Note (Gast)


Lesenswert?

Naja, es ist eben die Standard-Bibliothek, ich verwende ja nur die 
Befehle daraus.
Das ist der Codeausschnitt. Trotz allem wird immer nur ein Byte 
empfangen.



// 7-Bit-Sensoradresse zuweisen
xfer.slaveAddr = I2C_ADDR_SENSOR;
// Anzahl der zu empfangenen Bytes
xfer.rxSz = 2;
// Auf das Empfangs-Array verweisen
xfer.rxBuff = &rxBuffer[0];

Chip_I2C_MasterRead(i2cDev, xfer.slaveAddr, xfer.rxBuff, xfer.rxSz);

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du scheinst nicht der einzige mit diesem Problem zu sein:

https://community.nxp.com/thread/438046

von Note (Gast)


Lesenswert?

Ja genau, den Thread habe ich ebenfalls gefunden gehabt - leider ist es 
so, dass bei mir der stateHandler-0x58 abgearbeitet wird:

/* Rx handling */
case 0x58:  /* Data Received and NACK sent */
cclr &= ~I2C_CON_STO;


Dieser sendet eben direkt ohne die Überprüfung der Byteanzahl ein NACK. 
Für die Abarbeitung der Byteanzahl ist eher der case 0x50 zuständig mit:

case 0x50:  /* Data Received and ACK sent */
*xfer->rxBuff++ = pI2C->DAT;
xfer->rxSz--;

Allem Anschein nach wird dieser aber nicht abgearbeitet, da ich 
unabhängig vom I²C-Device und CommandByte nie mehr als ein Byte aus dem 
Bus herausbekomme (wohlgemerkt, nur beim Lesen, das Schreiben klappt 
hervorragend).

von Note (Gast)


Lesenswert?

Keine Ideen?

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.