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.
InformationsquelleAutor SevenDays | 2011-12-14
Schreibe einen Kommentar