This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

TWI not getting properly

Dear nordic,

I started to integrate PCF853(RTC module) using i2c. but its not getting proper output can you help me what wrong i do?

slave  address:- 0x51

read register address:-0x01(control register2)

below code iam trying to read control register2(0x01) according to datasheet the default value is 0x00 but i got 0xB3

pcf8563 prortocol

/**
 * @brief TWI events handler.
 */
void twi_handler(nrf_drv_twi_evt_t const * p_event, void * p_context)
{

    switch (p_event->type)
    {
        case NRF_DRV_TWI_EVT_DONE:
            if (p_event->xfer_desc.type == NRF_DRV_TWI_XFER_RX)
            {
                data_handler(m_sample);
            }
            m_xfer_done = true;
            break;
        default:
            break;
    }
}

/**
 * @brief UART initialization.
 */
void twi_init (void)
{
    ret_code_t err_code;

    const nrf_drv_twi_config_t twi_lm75b_config = {
       .scl                = ARDUINO_SCL_PIN,
       .sda                = ARDUINO_SDA_PIN,
       .frequency          = NRF_DRV_TWI_FREQ_100K,
       .interrupt_priority = APP_IRQ_PRIORITY_HIGH,
       .clear_bus_init     = false
    };

    err_code = nrf_drv_twi_init(&m_twi, &twi_lm75b_config, twi_handler, NULL);
    APP_ERROR_CHECK(err_code);

    nrf_drv_twi_enable(&m_twi);
}
int main(void)
{

m_xfer_done = false;
	err_code = nrf_drv_twi_tx(&m_twi, PCF8563_I2C_ADDR_WRITE, reg, sizeof(reg), false);
	NRF_LOG_INFO("error found in reading = %d",err_code);

	
while (m_xfer_done == false);
m_xfer_done = false;
   nrf_drv_twi_rx(&m_twi, PCF8563_I2C_ADDR_WRITE, RW_Reg, 1);
	 while (m_xfer_done == false);

}

I need a help from your side . what wrong i do?

Related