Hello,
I am using nrf52832 with PCA10040 and SDK15.1 along with a temperature sensor MAX30205. So far I can write, but I am realizing that I cannot read the second byte of the temperature given by the sensor using the function nrf_drv_twi_xfer() of the driver...
My function looks like this
int8_t twi1_ext_read_transfer(uint8_t i2cAddressMAX30205, uint8_t reg_addr,char *rxData, uint16_t bytesNumberRx,bool repeatedStart) {
ret_code_t err_code;
nrf_drv_twi_xfer_desc_t twi_MAX30205_ReadTransferData;
twi_MAX30205_ReadTransferData.address = i2cAddressMAX30205;
twi_MAX30205_ReadTransferData.p_primary_buf = ®_addr;
twi_MAX30205_ReadTransferData.primary_length = sizeof(reg_addr);
twi_MAX30205_ReadTransferData.p_secondary_buf = rxData;
twi_MAX30205_ReadTransferData.secondary_length = bytesNumberRx;
if(repeatedStart){
twi_MAX30205_ReadTransferData.type = NRF_DRV_TWI_XFER_TXRX;
} else {
twi_MAX30205_ReadTransferData.type = NRF_DRV_TWI_XFER_RX;
}
uint32_t flags = NRF_DRV_TWI_FLAG_NO_XFER_EVT_HANDLER;
err_code = nrf_drv_twi_xfer(&twi_MAX30205, &twi_MAX30205_ReadTransferData, flags);
APP_ERROR_CHECK(err_code);
#if defined(DEBUG_INTERFACE_MAX30205) && defined(EXG_MODULE_TMIC_DK)
NRF_LOG_RAW_INFO("TW1:From device address 0x%04x reading register 0x%04x value 0x%04x \r\n",i2cAddressMAX30205,reg_addr,*rxData);
#endif
return ((int8_t)err_code);
}
If I use that, when calling driver function I see how last byte `data[1]` seems not to have right value
int max30205_read_reg16(int16_t *value, char reg)//, I2C &i2c_bus)
{
int32_t ret;
char data[2] = {0, 0};
max30205_raw_data tmp;
tmp.msb =0;
tmp.lsb=0;
if (reg == MAX30205_REG_TEMPERATURE ||
reg == MAX30205_REG_THYST_LOW_TRIP || reg == MAX30205_REG_TOS_HIGH_TRIP) {
ret = twi1_ext_read_transfer(max30205_address, reg, data, 2, true);
if (ret == 0) {
tmp.msb = data[0];
tmp.lsb = data[1];
*value = tmp.swrd;
return MAX30205_NO_ERROR;
} else {
printf(
"%s: failed to read data: ret: %d\r\n", __func__, ret);
}
} else {
printf("%s: register address is not correct: register: %d\r\n",
__func__, reg);
}
return MAX30205_ERROR;
}
Can someone give me a hint?
Thanks in advance