Hello,
I'm working on a driver for the PCF85063A RTC in SDK 17 with the nRF52DK. I am able to successfully set registers, however I'm getting strange behavior with reads.
void read_RTC(void)
{
uint8_t clock_data[7];
uint8_t reg_address = 0x04;
ret_code_t err_code = 0;
err_code = nrf_drv_twi_tx(&m_twi, RTC_ADDRESS, ®_address, 1, true);
if (err_code != NRF_SUCCESS)
{
NRF_LOG_ERROR("TWI TX failed. Error code: %d", err_code);
return;
}
nrf_delay_ms(10);
err_code = nrf_drv_twi_rx(&m_twi, RTC_ADDRESS, clock_data, sizeof(clock_data));
if (err_code != NRF_SUCCESS)
{
NRF_LOG_ERROR("TWI RX failed. Error code: %d", err_code);
return;
}
for(int i = 0; i < sizeof(clock_data); i++)
{
NRF_LOG_INFO("Data[%d]: 0x%02X", i, clock_data[i]);
}
}
I want to first write to the clock to set the address pointer to 0x04 using nrf_drv_twi_tx with the no_stop flag set to true. I then want to read 7 bytes for all the relevant time data using nrf_drv_twi_rx, This works correctly, but when I try to read other registers by changing the reg_address from 0x04 to 0x00 for example to read the first registers I get the same clock data back reading 7 bytes from register 0x04 - 0x0A, so it seems the address pointer is not being set correctly by the tx.
Another strange behavior I noticed is that the data I get shifts if I send buffers of different sizes. For instance a buffer of size 7 always returns the information in registers 0x04 - 0x0A, but if I change the size of the buffer to 10 I get the information from registers 0x00 - 0x09.
It seems there is an issue with how the address pointer is updating, but I'm not sure what is going on.
Thanks!
