Accelerometer FXLS8974 - bug in library ?

cancel
Showing results for 
Search instead for 
Did you mean: 

Accelerometer FXLS8974 - bug in library ?

Jump to solution
822 Views
adrian_chmiel
Contributor III

Hi,

I work on your new product FXLS8974 accelerometer and probably I found bug.

It's regarding interrupt configuration, fuction fxls896xaf_config_interrupt with look:

...
 // configure the interrupts sources with desired pin configuration setting for fxls896xaf
status = sensor_comm_write(&pDriver->comHandle, FXLS896xAF_SENS_CONFIG4, 1, &ctrlReg);
// Enable the desired interrupt sources.
status = sensor_comm_write(&pDriver->comHandle, FXLS896xAF_INT_EN, 1, &pConfig->intSources.w);
// configure the interrupt routing
status = sensor_comm_write(&pDriver->comHandle, FXLS896xAF_INT_EN, 1, &pConfig->int1_2.w);

status = set_mode(pDriver, ACTIVE, NULL);
...

 

I think, in marked line, should be call to FXLS896xAF_INT_PIN_SEL, not again FXLS896xAF_INT_EN.

BTW
How to put the code in the frame? Like <code> in standard forums?

 

Best regards

Adrian Chmiel

Labels (1)
1 Solution
804 Views
TomasVaverka
NXP TechSupport
NXP TechSupport

Hi Adrian,

You are right, the correct implementation is:

// configure the interrupt routing
status = sensor_comm_write(&pDriver->comHandle, FXLS896xAF_INT_PIN_SEL, 1, &pConfig->int1_2.w);

Thanks for pointing this out, we will fix it ASAP. 

The code can be inserted/edited using the Insert/Edit code sample button:

Capture.JPG

Best regards,

Tomas

View solution in original post

0 Kudos
4 Replies
805 Views
TomasVaverka
NXP TechSupport
NXP TechSupport

Hi Adrian,

You are right, the correct implementation is:

// configure the interrupt routing
status = sensor_comm_write(&pDriver->comHandle, FXLS896xAF_INT_PIN_SEL, 1, &pConfig->int1_2.w);

Thanks for pointing this out, we will fix it ASAP. 

The code can be inserted/edited using the Insert/Edit code sample button:

Capture.JPG

Best regards,

Tomas

0 Kudos
558 Views
adrian_chmiel
Contributor III

Hi Tomas,

I found another bug, a small one this time.

file fxls896xaf_driver.h, desctription of fxls896xaf_deinit() function (end of file)

 

/*! @brief       The interface function to de-initialize the fxls896xaf sensor.
 *  @details     This function de-initialize the fxls896xaf sensor.
 *  [in]   pDriver - Pointer to the driver
 *  [out]  selftest - Pointer to the self-test metadata.
 *  @return      returns the status of the operation.
 */
uint8_t fxls896xaf_deinit(fxls896xaf_driver_t *pDriver);

 

In description is information about param[out], but this argument does not exist in the function.

it was probably created in the process of copying.

 

And next one, fxls896xaf_config_interrupt() function, line 368:

...
	//Read the CRTL3 and preserve the existing configuration bits of the control registers other than interrupt configuration bits
	status = sensor_comm_read(&pDriver->comHandle, FXLS896xAF_SENS_CONFIG4, 1, &ctrlReg);

	// Update the Ctrl reg with polarity and open drain/push pull
	ctrlReg |= ((uint8_t)(pConfig->control.ipol | (pConfig->control.pp_od << FXLS896xAF_SENS_CONFIG4_INT_PP_OD_SHIFT)) & (FXLS896xAF_SENS_CONFIG4_INT_POL_MASK | FXLS896xAF_SENS_CONFIG4_INT_PP_OD_MASK));

	// configure the interrupts sources with desired pin configuration setting for fxls896xaf
...

incorrect implementation of the register bit change, thus the bits cannot be reset.

My proposition of implementation:

...
	// Update the Ctrl reg with polarity and open drain/push pull
	ctrlReg = (ctrlReg & ~(FXLS896xAF_SENS_CONFIG4_INT_POL_MASK | FXLS896xAF_SENS_CONFIG4_INT_PP_OD_MASK)) | ((uint8_t)(pConfig->control.ipol | (pConfig->control.pp_od << FXLS896xAF_SENS_CONFIG4_INT_PP_OD_SHIFT)));
...

 

One more question, I'm introducing modifications to the library, which in my opinion will become more universal, is there a place for sending changes or proposition of changes?

Best regards,

Adrian Chmiel

0 Kudos
533 Views
TomasVaverka
NXP TechSupport
NXP TechSupport

Hi Adrian,

Thanks again for reporting these bugs. There is a plan to fix them in both the FXLS896xAF and FXLS8974CF driver releases by end of April. 

Best regards,

Tomas

0 Kudos
794 Views
adrian_chmiel
Contributor III

if I can suggest anything else, I would like to suggest a separate function to start and stop the accelerometer.
In library is a set_mode function in the code but it is local.

The libraries assume that the accelerometer is always on, if we want to otherwise, we would have to manually control the registers or modify lib.

I think it would be good if the libraries were checking the status of the accelerometer (ACTIVE/STANDBY) and not always running it as in the above interrupt setting function.

0 Kudos