FXLS8471Q i2c communication sample

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

FXLS8471Q i2c communication sample

Jump to solution
2,115 Views
piotrrosenbaum
Contributor I

Hi !

I Can't communicate with FXLS8471Q via i2c. I want to read WHO_I_AM register but device don't respond.

After read who value is 255. Can You show me a example code how to read it ?

#define FXLS8471Q_SLAVE_ADDR       0x1E

#define FXLS8471Q_WHOAMI     0x0D

void FXLS_init(void) {

    uint8_t who;

    Soft_I2C1_send_address(FXLS8471Q_SLAVE_ADDR);

    Soft_I2C1_send_data(FXLS8471Q_WHOAMI, END);

    Soft_I2C1_send_address(FXLS8471Q_SLAVE_ADDR);

    Soft_I2C1_send_data(0x00, END);

    who = Soft_I2C1_read_data(END);

}

Tags (2)
0 Kudos
1 Solution
1,689 Views
TomasVaverka
NXP TechSupport
NXP TechSupport

Hi Piotr,

Here is an example code to read the WHO_AM_I register (0x0D) using I2C when SA0 = SA1 = 0.

//FXLS8471Q 7-bit I2C address

#define FXLS8471Q_I2C_ADDRESS   0x1E // SA0 pin = SA1 = 0 -> 7-bit I2C address is 0x1E

who_am_i = I2C_ReadRegister(FXLS8471Q_I2C_ADDRESS, 0x0D);

unsigned char I2C_ReadRegister(unsigned char u8SlaveAddress, unsigned char u8RegisterAddress)

{

  unsigned char result;

  

  I2C_Start();         

  I2C0_D = u8SlaveAddress << 1; /* Send I2C device address with W/R bit = 0 */

  I2C_Wait();

  I2C0_D = u8RegisterAddress; /* Send register address */

  I2C_Wait();

  I2C_RepeatedStart();

  I2C0_D = (u8SlaveAddress << 1) | 0x01; /* Send I2C device address this time with W/R bit = 1 */

  I2C_Wait();

  I2C_EnterRxMode();

  I2C_DisableAck();

  result = I2C0_D;

  I2C_Wait();

  I2C_Stop(); 

  result = I2C0_D;

  Pause(50);

  return result;

}

A copy from the data sheet:

Single byte read_text.JPG

Single byte read.JPG

I hope it helps.

Regards,

Tomas

PS: If my answer helps to solve your question, please mark it as "Correct". Thank you.

View solution in original post

0 Kudos
1 Reply
1,690 Views
TomasVaverka
NXP TechSupport
NXP TechSupport

Hi Piotr,

Here is an example code to read the WHO_AM_I register (0x0D) using I2C when SA0 = SA1 = 0.

//FXLS8471Q 7-bit I2C address

#define FXLS8471Q_I2C_ADDRESS   0x1E // SA0 pin = SA1 = 0 -> 7-bit I2C address is 0x1E

who_am_i = I2C_ReadRegister(FXLS8471Q_I2C_ADDRESS, 0x0D);

unsigned char I2C_ReadRegister(unsigned char u8SlaveAddress, unsigned char u8RegisterAddress)

{

  unsigned char result;

  

  I2C_Start();         

  I2C0_D = u8SlaveAddress << 1; /* Send I2C device address with W/R bit = 0 */

  I2C_Wait();

  I2C0_D = u8RegisterAddress; /* Send register address */

  I2C_Wait();

  I2C_RepeatedStart();

  I2C0_D = (u8SlaveAddress << 1) | 0x01; /* Send I2C device address this time with W/R bit = 1 */

  I2C_Wait();

  I2C_EnterRxMode();

  I2C_DisableAck();

  result = I2C0_D;

  I2C_Wait();

  I2C_Stop(); 

  result = I2C0_D;

  Pause(50);

  return result;

}

A copy from the data sheet:

Single byte read_text.JPG

Single byte read.JPG

I hope it helps.

Regards,

Tomas

PS: If my answer helps to solve your question, please mark it as "Correct". Thank you.

0 Kudos
%3CLINGO-SUB%20id%3D%22lingo-sub-493646%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EFXLS8471Q%20i2c%20communication%20sample%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-493646%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%20!%3C%2FP%3E%3CP%3EI%20Can't%20communicate%20with%20FXLS8471Q%20via%20i2c.%20I%20want%20to%20read%20WHO_I_AM%20register%20but%20device%20don't%20respond.%3C%2FP%3E%3CP%3EAfter%20read%20who%20value%20is%20255.%20Can%20You%20show%20me%20a%20example%20code%20how%20to%20read%20it%20%3F%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CPRE%20__default_attr%3D%22c%2B%2B%22%20__jive_macro_name%3D%22code%22%20class%3D%22_jivemacro_uid_1464013746319501%20jive_macro_code%20jive_text_macro%22%20data-renderedposition%3D%22134_50_798_32%22%20jivemacro_uid%3D%22_1464013746319501%22%3E%3CP%3E%23define%20FXLS8471Q_SLAVE_ADDR%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%200x1E%20%3C%2FP%3E%3CP%3E%23define%20FXLS8471Q_WHOAMI%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%200x0D%3C%2FP%3E%3C%2FPRE%3E%3CP%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CPRE%20__default_attr%3D%22c%2B%2B%22%20__jive_macro_name%3D%22code%22%20class%3D%22_jivemacro_uid_14640136729548970%20jive_macro_code%20jive_text_macro%22%20data-renderedposition%3D%22244_50_798_224%22%20jivemacro_uid%3D%22_14640136729548970%22%3E%3CP%3Evoid%20FXLS_init(void)%20%7B%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20uint8_t%20who%3B%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20Soft_I2C1_send_address(FXLS8471Q_SLAVE_ADDR)%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20Soft_I2C1_send_data(FXLS8471Q_WHOAMI%2C%20END)%3B%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20Soft_I2C1_send_address(FXLS8471Q_SLAVE_ADDR)%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20Soft_I2C1_send_data(0x00%2C%20END)%3B%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%26nbsp%3B%26nbsp%3B%20who%20%3D%20Soft_I2C1_read_data(END)%3B%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%7D%3C%2FP%3E%3C%2FPRE%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-493647%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20FXLS8471Q%20i2c%20communication%20sample%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-493647%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EHi%20Piotr%2C%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3EHere%20is%20an%20example%20code%20to%20read%20the%20WHO_AM_I%20register%20(0x0D)%20using%20%3CSPAN%20lang%3D%22EN-US%22%3EI%3CSUP%3E2%3C%2FSUP%3EC%20when%20SA0%20%3D%20SA1%20%3D%200.%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CPRE%20__default_attr%3D%22c%2B%2B%22%20__jive_macro_name%3D%22code%22%20class%3D%22jive_macro_code%20jive_text_macro%20_jivemacro_uid_14642664011759806%22%20data-renderedposition%3D%22117_8_1192_32%22%20jivemacro_uid%3D%22_14642664011759806%22%20modifiedtitle%3D%22true%22%3E%3CP%3E%2F%2FFXLS8471Q%207-bit%20I2C%20address%3C%2FP%3E%3CP%3E%23define%20FXLS8471Q_I2C_ADDRESS%26nbsp%3B%26nbsp%3B%200x1E%20%2F%2F%20SA0%20pin%20%3D%20SA1%20%3D%200%20-%26gt%3B%207-bit%20I2C%20address%20is%200x1E%20%3C%2FP%3E%3C%2FPRE%3E%3CP%3E%3C%2FP%3E%3CPRE%20__default_attr%3D%22c%2B%2B%22%20__jive_macro_name%3D%22code%22%20class%3D%22jive_macro_code%20jive_text_macro%20_jivemacro_uid_14642662161523383%22%20data-renderedposition%3D%22175_8_1192_16%22%20jivemacro_uid%3D%22_14642662161523383%22%3E%3CP%3Ewho_am_i%20%3D%20I2C_ReadRegister(FXLS8471Q_I2C_ADDRESS%2C%200x0D)%3B%3C%2FP%3E%3C%2FPRE%3E%3CP%3E%3C%2FP%3E%3CPRE%20__default_attr%3D%22c%2B%2B%22%20__jive_macro_name%3D%22code%22%20class%3D%22jive_macro_code%20jive_text_macro%20_jivemacro_uid_14642660521477583%22%20data-renderedposition%3D%22217_8_1192_416%22%20jivemacro_uid%3D%22_14642660521477583%22%3E%3CP%3Eunsigned%20char%20I2C_ReadRegister(unsigned%20char%20u8SlaveAddress%2C%20unsigned%20char%20u8RegisterAddress)%3C%2FP%3E%3CP%3E%7B%3C%2FP%3E%3CP%3E%26nbsp%3B%20unsigned%20char%20result%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26nbsp%3B%20%3C%2FP%3E%3CP%3E%26nbsp%3B%20I2C_Start()%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%26nbsp%3B%20%3C%2FP%3E%3CP%3E%26nbsp%3B%20I2C0_D%20%3D%20u8SlaveAddress%20%26lt%3B%26lt%3B%201%3B%20%2F*%20Send%20I2C%20device%20address%20with%20W%2FR%20bit%20%3D%200%20*%2F%3C%2FP%3E%3CP%3E%26nbsp%3B%20I2C_Wait()%3B%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%20I2C0_D%20%3D%20u8RegisterAddress%3B%20%2F*%20Send%20register%20address%20*%2F%3C%2FP%3E%3CP%3E%26nbsp%3B%20I2C_Wait()%3B%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%20I2C_RepeatedStart()%3B%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%20I2C0_D%20%3D%20(u8SlaveAddress%20%26lt%3B%26lt%3B%201)%20%7C%200x01%3B%20%2F*%20Send%20I2C%20device%20address%20this%20time%20with%20W%2FR%20bit%20%3D%201%20*%2F%20%3C%2FP%3E%3CP%3E%26nbsp%3B%20I2C_Wait()%3B%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%20I2C_EnterRxMode()%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%20I2C_DisableAck()%3B%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%20result%20%3D%20I2C0_D%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%20I2C_Wait()%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%20I2C_Stop()%3B%26nbsp%3B%20%3C%2FP%3E%3CP%3E%26nbsp%3B%20result%20%3D%20I2C0_D%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%20Pause(50)%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%20return%20result%3B%3C%2FP%3E%3CP%3E%7D%3C%2FP%3E%3C%2FPRE%3E%3CP%3E%3C%2FP%3E%3CP%3EA%20copy%20from%20the%20data%20sheet%3A%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Single%20byte%20read_text.JPG%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Single%20byte%20read_text.JPG%22%20style%3D%22width%3A%20689px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F58141i23EEB5F8ABC667A7%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22Single%20byte%20read_text.JPG%22%20alt%3D%22Single%20byte%20read_text.JPG%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Single%20byte%20read.JPG%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Single%20byte%20read.JPG%22%20style%3D%22width%3A%20854px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F58167i81568F9C4BD43EDE%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22Single%20byte%20read.JPG%22%20alt%3D%22Single%20byte%20read.JPG%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3EI%20hope%20it%20helps.%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3ERegards%2C%3C%2FP%3E%3CP%3ETomas%3C%2FP%3E%3CP%3E%3C%2FP%3E%3CP%3E%3CSPAN%20style%3D%22font-size%3A%2011px%3B%20font-family%3A%20arial%2C%20helvetica%2C%20'helvetica%20neue'%2C%20verdana%2C%20sans-serif%3B%20color%3A%20%2351626f%3B%22%3E%3CEM%3EPS%3A%20If%20my%20answer%20helps%20to%20solve%20your%20question%2C%20please%20mark%20it%20as%20%22Correct%22.%20Thank%20you.%3C%2FEM%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E