Wie liest eine Folge von bytes über I2C?
Ich Lesen möchte eine Sequenz von bytes, die von meinem Beschleunigungssensor. Ich kann Sie nicht arbeiten.
Wenn ich lese byte für byte ist alles ok, aber wenn ich versuche zu Lesen, Folge ich nicht bekommen kann einen wahren Werte.
void ADXL_ReadSeq(uint8_t StartAddr,signed char *data)
{
//StartAddr |= (1<<7); //
while(I2C_GetFlagStatus(I2CG, I2C_FLAG_BUSY)); //While the bus is busy
I2C_GenerateSTART(I2CG, ENABLE); //Send START condition
while(!I2C_CheckEvent(I2CG, I2C_EVENT_MASTER_MODE_SELECT)); //Test on EV5 and clear it
I2C_Send7bitAddress(I2CG, DEV_ADDR<< 1, I2C_Direction_Transmitter); //Send address for write (SAD+W)
while(!I2C_CheckEvent(I2CG, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); //Test on EV6 and clear it
I2C_SendData(I2CG,ADXL_R| ADXL_MB|StartAddr ); //Send the internal address to read from: MSB of the address first
while(!I2C_CheckEvent(I2CG, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //Test on EV8 and clear it
I2C_GenerateSTART(I2CG, ENABLE); //Send STRAT condition a second time
while(!I2C_CheckEvent(I2CG, I2C_EVENT_MASTER_MODE_SELECT)); //Test on EV5 and clear it
I2C_Send7bitAddress(I2CG, DEV_ADDR<< 1, I2C_Direction_Receiver); //Send address for read
while(!I2C_CheckEvent(I2CG,I2C_EVENT_MASTER_BYTE_RECEIVED)); //Test on EV6 and clear it
int num=6;
while (num)
{
if(num==1)
{
I2C_AcknowledgeConfig(I2C1, DISABLE); /* ЧоєуТ»О»єуТЄ№Ш±ХУ¦ґрµД */
I2C_GenerateSTOP(I2C1, ENABLE); /* ·ўЛННЈЦ№О» */
}
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)); /* EV7 */
*data = I2C_ReceiveData(I2C1);
data++;
/* Decrement the read bytes counter */
num--;
}
/* ФЩґОФКРнУ¦ґрДЈКЅ */
I2C_AcknowledgeConfig(I2C1, ENABLE);
}
Was ich falsch mache?
Ich konvertieren diese Funktion auch von anderen Funktion, die verwendet SPI http://code.google.com/p/flyless/source/browse/trunk/FLYLess/src/hal/adxl345.c
- Post Ihr gutes Recht-funktionierenden code, wo die Daten Lesen byte für byte. Hast du Debuggen? (zumindest einige Nachricht über uart) Wo ist er stecken geblieben?
- Der code wird normal ausgeführt, aber die Daten der Beschleunigungsmesser ist falsch. Ich werde einige code später.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen Sie die Dokumentation für Ihre Beschleunigungsmesser. I2C sind sehr Verschieden von SPI und Ihr Gerät vielleicht nicht unterstützt Reihenfolge Lesen von I2C.