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

Want to send value on a particular register using SPI

void spi_read_write(0x1E,0x00) ==> output 0x10 as return value of register read.

Here I want to send value 0x90 as register value in the argument of spi_read_write(0x1E, 0x90) function, after  sending this it is retaining  0x10 as a rx_data buffer. Here is my code

static spi_rx_data[2] = {0x00,0x00};

void init(void)
{
    spi_read_write(ACCEL_WHO_M_I,0x00);  //this is working perfectly
    spi_read_write(ACCEL_REG_CTRL0,0x00); //return value spi_rx_data = 0xff,0x10
    
    spi_read_write(ACCEL_REG_CTRL0,0x90); //return value spi_rx_data = 0xff,0x10 also returning 0x10 previous value instead of 0x90
}

void spi_read_write(uint8_t register_pointer, uint8_t register_value)
{
    ret_code_t err_code;
    uint8_t data[2] ={0};
    uint8_t rx_buf;
   
    memset(spi_rx_data,0x00,sizeof(spi_rx_data));
    
    register_pointer |= 0x80;
    
    data[0] = register_pointer;
    data[1] = register_value;
    
    
    err_code = nrf_drv_spi_transfer(&spi, data,sizeof(data), spi_rx_data,sizeof(spi_rx_data));
    NRF_LOG_HEXDUMP_INFO(spi_rx_data,sizeof(spi_rx_data));
    APP_ERROR_CHECK(err_code);  
   
} 

Parents Reply
  • i added  nrf_delay_ms(200); between spi_read_write_reg() and spi_read_write() but no change... Also I am working with

    blocking mode of SPI.

    #define SPI_SS_PIN   4
    #define SPI_MOSI_PIN 21
    #define SPI_MISO_PIN 22
    #define SPI_SCK_PIN 24
    
    
    void spi1_init(void)
    {
        nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG;
        spi_config.ss_pin   = SPI_SS_PIN;
        spi_config.miso_pin = SPI_MISO_PIN;
        spi_config.mosi_pin = SPI_MOSI_PIN;
        spi_config.sck_pin  = SPI_SCK_PIN;
        spi_config.frequency= NRF_DRV_SPI_FREQ_4M;
        spi_config.mode= NRF_DRV_SPI_MODE_0;
        APP_ERROR_CHECK(nrf_drv_spi_init(&spi, &spi_config, NULL));
    
    }
    

Children
No Data
Related