Hi I'm interfacing MMA8452Q with nrf51822 using TWI all read-write function working fine but when I try to read acceleration data nrf_drv_twi_rx & nrf_drv_twi_tx function return error code 3. here is my code flow.
- Read WHO_AM_I register (OK)//Value Read 0x2A
- Set CTRL_REG1 register to standby mode(OK) //Write value 0x00
- Set M_CTRL_REG1 register(OK)//Write value 0x1F
- Set M_CTRL_REG2 register(OK)//Write value 0x20
- Set XYZ_DATA_CFG register(OK)//Write value 0x01
- Set CTRL_REG1 register to normal mode(OK) //Write value 0x01
- But after this facing error when I again try to read read acc data
register read code:
void FXOS8700CQ_I2C_registers_read(uint8_t slave_addr, uint8_t reg_addr, uint8_t pdata[], uint32_t bytes)
{
ret_code_t ret_code;
ret_code = nrf_drv_twi_tx(&p_twi, slave_addr, ®_addr, bytes, true);
#ifdef fxos_debug
SEGGER_RTT_printf(0, "\nRead register's tx error code:%x", ret_code);
#endif
APP_ERROR_CHECK (ret_code);
ret_code = nrf_drv_twi_rx(&p_twi, slave_addr, pdata, bytes);
#ifdef fxos_debug
SEGGER_RTT_printf(0, "\nRead register's rx error code:%x", ret_code);
SEGGER_RTT_printf(0, "\nRead register's rx byte:%d", bytes);
#endif
APP_ERROR_CHECK (ret_code);
}
Register address:
#define FXOS8700CQ_OUT_X_MSB 0x01
#define FXOS8700CQ_OUT_X_LSB 0x02
#define FXOS8700CQ_OUT_Y_MSB 0x03
#define FXOS8700CQ_OUT_Y_LSB 0x04
#define FXOS8700CQ_OUT_Z_MSB 0x05
#define FXOS8700CQ_OUT_Z_LSB 0x06
#define FXOS8700CQ_WHO_AM_I 0x0D
#define FXOS8700CQ_XYZ_DATA_CFG 0x0E
#define FXOS8700CQ_CTRL_REG1 0x2A
#define FXOS8700CQ_M_CTRL_REG1 0x5B
#define FXOS8700CQ_M_CTRL_REG2 0x5C
MMA8452 Datasheet
Note: Same MMA8452Q sensor working with other micro-controller. There is no issue with hardware.