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

nfr52: SPI interface mfrc522: wrong read and write regsister ???

Hi,
I Implement void WriteRegister and ReadRegister SPI interface with mfrc532 but some time right,some time wrong.

Some time i write value in a regsister and i read again it is same value, some time it not same value @@


I have tried implement many different ways of reading and writing function but not success. 
m_rx_buf of nrf52 recived unexpected data.

static uint8_t       m_rx_buf[1];
void PCD_WriteRegister(byte reg, byte value){
        nrf_gpio_pin_write(SPI_SS_PIN,0); 
        m_tx_buf[0] = reg &0x7E;
        m_tx_buf[1] = value;
        memset(m_rx_buf, 0, m_length);
        spi_xfer_done = false;

        nrf_drv_spi_transfer(&spi,&m_tx_buf[0], 2, NULL, 0);

        while (!spi_xfer_done)
        {
            __WFE();
        }
        NRF_LOG_FLUSH();
        nrf_gpio_pin_write(SPI_SS_PIN,1);
}
byte PCD_ReadRegister(byte reg){
        nrf_gpio_pin_write(SPI_SS_PIN,0);
        m_tx_buf[0] = (0x80 | (reg & 0x7E));
        memset(m_rx_buf, 0, m_length);
        spi_xfer_done = false;
    
        nrf_drv_spi_transfer(&spi,&m_tx_buf[0], 1, m_rx_buf, 1);

        while (!spi_xfer_done)
        {
            __WFE();
        }
        memset(m_rx_buf, 0, m_length);
        spi_xfer_done = false;
        uint8_t _reg = 0x00;
        nrf_drv_spi_transfer(&spi,&_reg, 1, m_rx_buf, 1);

        while (!spi_xfer_done)
        {
            __WFE();
        }
        NRF_LOG_FLUSH();
        nrf_gpio_pin_write(SPI_SS_PIN,1);
        return m_rx_buf[0];
}

Write: 

I useing SDK 16. NRF52832. 

Related