Subject: RT1040 LPI2C3 – FIFO error while reading WHO_AM_I register from accelerometer

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Subject: RT1040 LPI2C3 – FIFO error while reading WHO_AM_I register from accelerometer

685 Views
Harisha
Contributor I

Hello,

I am working on the i.MX RT1040 EVK using LPI2C3 to interface with an accelerometer (slave address = 0x18 base).
My goal is to read the WHO_AM_I register (address = 0x13) to check if the accelerometer is responding.

Steps I am following:

  1. Call LPI2C_MasterStart() with slave address 0x18 and write intent.

  2. Wait until TX FIFO count = 0 using LPI2C_MasterGetFifoCounts() to ensure TX FIFO is empty.

  3. Check for acknowledge from the slave — ACK is received.

  4. Send the WHO_AM_I register address (0x13) using LPI2C_MasterSend().

  5. Check ACK again — slave sends ACK.

Problem:

  • After sending the register address, TX FIFO count = 1 (not empty), meaning the transaction/byte is not being sent on the bus.

  • FIFO error flag is set in LPI2C_MasterGetStatusFlags().

  • No data transfer happens after that.

  • status = LPI2C_MasterStart(EXAMPLE_I2C_MASTER, 0x18, kLPI2C_Write);
    if (status == kStatus_Success) {
    LPI2C_MasterGetFifoCounts(EXAMPLE_I2C_MASTER, NULL, &txCount);
    while (txCount) {
    LPI2C_MasterGetFifoCounts(EXAMPLE_I2C_MASTER, NULL, &txCount);
    }

    if (LPI2C_MasterGetStatusFlags(EXAMPLE_I2C_MASTER) & kLPI2C_MasterNackDetectFlag) {
    return kStatus_LPI2C_Nak;
    }

    uint8_t regAddr = 0x13;
    reVal = LPI2C_MasterSend(EXAMPLE_I2C_MASTER, &regAddr, 1);
    if (reVal != kStatus_Success) {
    return -1;
    }

    LPI2C_MasterGetFifoCounts(EXAMPLE_I2C_MASTER, NULL, &txCount);
    printf("TX FIFO Count: %d\r\n", txCount);

    uint32_t flags = LPI2C_MasterGetStatusFlags(EXAMPLE_I2C_MASTER);
    printf("Status = 0x%08X\r\n", flags);
    }

  • Question:
    Why is the FIFO error flag set, and why does TX FIFO count remain 1 after LPI2C_MasterSend()?
    Is there any specific configuration needed for LPI2C3 TX FIFO flush or clock settings before sending register data?

    Additional Info:

    • Using default LPI2C driver from MCUXpresso SDK.

    • LPI2C3 clock and pin mux are already configured.

    • Slave ACK is received correctly during START condition.

    • Using polling mode (not interrupt/DMA).

    Thanks in advance!

0 Kudos
Reply
2 Replies

653 Views
gusarambula
NXP TechSupport
NXP TechSupport

Hello  @Harisha 

Would you please share which accelerometer you are using?

Regards,
Gustavo

0 Kudos
Reply

634 Views
Harisha
Contributor I
i am using FXLS8974CFR3 triaxial accelerometer
0 Kudos
Reply
%3CLINGO-SUB%20id%3D%22lingo-sub-2152793%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ESubject%3A%20RT1040%20LPI2C3%20%E2%80%93%20FIFO%20error%20while%20reading%20WHO_AM_I%20register%20from%20accelerometer%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2152793%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%2C%3C%2FP%3E%3CP%3EI%20am%20working%20on%20the%20%3CSTRONG%3Ei.MX%20RT1040%20EVK%3C%2FSTRONG%3E%20using%20%3CSTRONG%3ELPI2C3%3C%2FSTRONG%3E%20to%20interface%20with%20an%20accelerometer%20(slave%20address%20%3D%200x18%20base).%3CBR%20%2F%3EMy%20goal%20is%20to%20read%20the%20%3CSTRONG%3EWHO_AM_I%3C%2FSTRONG%3E%20register%20(address%20%3D%200x13)%20to%20check%20if%20the%20accelerometer%20is%20responding.%3C%2FP%3E%3CP%3E%3CSTRONG%3ESteps%20I%20am%20following%3A%3C%2FSTRONG%3E%3C%2FP%3E%3COL%3E%3CLI%3E%3CP%3ECall%20LPI2C_MasterStart()%20with%20slave%20address%200x18%20and%20write%20intent.%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3EWait%20until%20%3CSTRONG%3ETX%20FIFO%20count%20%3D%200%3C%2FSTRONG%3E%20using%20LPI2C_MasterGetFifoCounts()%20to%20ensure%20TX%20FIFO%20is%20empty.%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3ECheck%20for%20%3CSTRONG%3Eacknowledge%3C%2FSTRONG%3E%20from%20the%20slave%20%E2%80%94%20ACK%20is%20received.%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3ESend%20the%20WHO_AM_I%20register%20address%20(0x13)%20using%20LPI2C_MasterSend().%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3ECheck%20ACK%20again%20%E2%80%94%20slave%20sends%20ACK.%3C%2FP%3E%3C%2FLI%3E%3C%2FOL%3E%3CP%3E%3CSTRONG%3EProblem%3A%3C%2FSTRONG%3E%3C%2FP%3E%3CUL%3E%3CLI%3E%3CP%3EAfter%20sending%20the%20register%20address%2C%20%3CSTRONG%3ETX%20FIFO%20count%20%3D%201%3C%2FSTRONG%3E%20(not%20empty)%2C%20meaning%20the%20transaction%2Fbyte%20is%20not%20being%20sent%20on%20the%20bus.%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%3CSTRONG%3EFIFO%20error%20flag%3C%2FSTRONG%3E%20is%20set%20in%20LPI2C_MasterGetStatusFlags().%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3ENo%20data%20transfer%20happens%20after%20that.%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3Estatus%20%3D%20LPI2C_MasterStart(EXAMPLE_I2C_MASTER%2C%200x18%2C%20kLPI2C_Write)%3B%3CBR%20%2F%3Eif%20(status%20%3D%3D%20kStatus_Success)%20%7B%3CBR%20%2F%3ELPI2C_MasterGetFifoCounts(EXAMPLE_I2C_MASTER%2C%20NULL%2C%20%26amp%3BtxCount)%3B%3CBR%20%2F%3Ewhile%20(txCount)%20%7B%3CBR%20%2F%3ELPI2C_MasterGetFifoCounts(EXAMPLE_I2C_MASTER%2C%20NULL%2C%20%26amp%3BtxCount)%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3Eif%20(LPI2C_MasterGetStatusFlags(EXAMPLE_I2C_MASTER)%20%26amp%3B%20kLPI2C_MasterNackDetectFlag)%20%7B%3CBR%20%2F%3Ereturn%20kStatus_LPI2C_Nak%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3Euint8_t%20regAddr%20%3D%200x13%3B%3CBR%20%2F%3EreVal%20%3D%20LPI2C_MasterSend(EXAMPLE_I2C_MASTER%2C%20%26amp%3BregAddr%2C%201)%3B%3CBR%20%2F%3Eif%20(reVal%20!%3D%20kStatus_Success)%20%7B%3CBR%20%2F%3Ereturn%20-1%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3CP%3ELPI2C_MasterGetFifoCounts(EXAMPLE_I2C_MASTER%2C%20NULL%2C%20%26amp%3BtxCount)%3B%3CBR%20%2F%3Eprintf(%22TX%20FIFO%20Count%3A%20%25d%5Cr%5Cn%22%2C%20txCount)%3B%3C%2FP%3E%3CP%3Euint32_t%20flags%20%3D%20LPI2C_MasterGetStatusFlags(EXAMPLE_I2C_MASTER)%3B%3CBR%20%2F%3Eprintf(%22Status%20%3D%200x%2508X%5Cr%5Cn%22%2C%20flags)%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%3CSTRONG%3EQuestion%3A%3C%2FSTRONG%3E%3CBR%20%2F%3EWhy%20is%20the%20%3CSTRONG%3EFIFO%20error%20flag%3C%2FSTRONG%3E%20set%2C%20and%20why%20does%20TX%20FIFO%20count%20remain%201%20after%20LPI2C_MasterSend()%3F%3CBR%20%2F%3EIs%20there%20any%20specific%20configuration%20needed%20for%20LPI2C3%20TX%20FIFO%20flush%20or%20clock%20settings%20before%20sending%20register%20data%3F%3C%2FP%3E%3CP%3E%3CSTRONG%3EAdditional%20Info%3A%3C%2FSTRONG%3E%3C%2FP%3E%3CUL%3E%3CLI%3E%3CP%3EUsing%20default%20LPI2C%20driver%20from%20MCUXpresso%20SDK.%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3ELPI2C3%20clock%20and%20pin%20mux%20are%20already%20configured.%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3ESlave%20ACK%20is%20received%20correctly%20during%20START%20condition.%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3EUsing%20polling%20mode%20(not%20interrupt%2FDMA).%3C%2FP%3E%3C%2FLI%3E%3C%2FUL%3E%3CP%3EThanks%20in%20advance!%3C%2FP%3E%3C%2FLI%3E%3C%2FUL%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-2152793%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3ECommunication%20%26amp%3B%20Control(I3C%20%7C%20I2C%20%7C%20SPI%20%7C%20FlexCAN%20%7C%20Ethernet%20%7C%20FlexIO)%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2153052%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20Subject%3A%20RT1040%20LPI2C3%20%E2%80%93%20FIFO%20error%20while%20reading%20WHO_AM_I%20register%20from%20accelerometer%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2153052%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3Ei%20am%20using%20FXLS8974CFR3%20triaxial%20accelerometer%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2152932%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20Subject%3A%20RT1040%20LPI2C3%20%E2%80%93%20FIFO%20error%20while%20reading%20WHO_AM_I%20register%20from%20accelerometer%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2152932%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHello%26nbsp%3B%26nbsp%3B%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F253824%22%20target%3D%22_blank%22%3E%40Harisha%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EWould%20you%20please%20share%20which%20accelerometer%20you%20are%20using%3F%3C%2FP%3E%0A%3CP%3ERegards%2C%3CBR%20%2F%3EGustavo%3C%2FP%3E%3C%2FLINGO-BODY%3E