LIS3DH TWIM, reading instead of writing

Hello thats my code

void twim_init(twim_config_t *twim)
{
    // ptr_curr = twim->read_buffer;
    // if (twim->write_buffer == NULL)
    // {
    //     LOG_INF("WRITE BUFFER IS NULL");
    // }
    // if (K_WORK_INITER == true)
    // {
    //     k_work_init(&work, show_dump_twim);
    //     K_WORK_INITER = false;
    // }

   // void *p_context;
    //Buff_reset(ptr_curr);
    memset(read_buff, 0, sizeof(uint8_t));
    nrfx_twim_config_t twim_config = {
        .scl_pin = MASTER_SCL_PIN,
        .sda_pin = MASTER_SDA_PIN,
        .frequency = NRF_TWIM_FREQ_100K,
        .interrupt_priority = NRFX_TWIM_DEFAULT_CONFIG_IRQ_PRIORITY,
        .hold_bus_uninit = false};

    nrfx_err_t status = nrfx_twim_init(&twim->instance, &twim_config, NULL, NULL);
    if (status != NRFX_SUCCESS)
    {
        LOG_ERR("TWIM INIT FAILED\n");
    }

    if (status == NRFX_ERROR_ALREADY_INITIALIZED)
    {

        LOG_INF("TWIM ALREADY INITIALIZED\n");
    }

    nrfx_twim_enable(&twim->instance);
    // write_to_sensor(twim, 0x1E, 0b0010000);
    write_to_sensor(twim, LIS3DH_REG_CTRL1, 0x77);
    // write_to_sensor(twim, LIS3DH_REG_CTRL4, 0x88);
    // write_to_sensor(twim, LIS3DH_REG_CTRL5, 0x80);
    // write_to_sensor(twim, LIS3DH_REG_TEMPCFG, 0x80);
    read_from_sensor(twim, LIS3DH_REG_WHOAMI,0);
    // read_from_sensor(twim, LIS3DH_REG_OUT_X_H,1);
    // read_from_sensor(twim, LIS3DH_REG_OUT_Y_L,2);
    // read_from_sensor(twim, LIS3DH_REG_OUT_Y_H,3);
    // read_from_sensor(twim, LIS3DH_REG_OUT_Z_L,4);
    // read_from_sensor(twim, LIS3DH_REG_OUT_Z_H,5);

    // nrfx_twim_xfer_desc_t twim_xfer_desc = NRFX_TWIM_XFER_DESC_TXRX(LIS3DH_DEFAULT_ADDRESS, // BME280 I2C
    //                                                                 twim->write_buffer, // Buffer z adresem rejestru TX
    //                                                                 1,                  // Amount
    //                                                                 ptr_curr,           // RX buffer
    //                                                                 twim->read_len      // Amount
    // );

     //status = nrfx_twim_xfer(&twim->instance, &twim_xfer_desc, NRFX_TWIM_FLAG_RX_POSTINC | NRFX_TWIM_FLAG_REPEATED_XFER);

    if (status != NRFX_SUCCESS)
    {
        LOG_ERR("TWIM XFER FAILED\n");
    }
}

void pp_buffer_swap(twim_config_t *twim)
{
    if (ptr_curr == twim->read_buffer)
    {
        ptr_curr = twim->read_buffer2;
    }
    else
    {
        ptr_curr = twim->read_buffer;
    }
}
void twim_reconf_buff(twim_config_t *twim)
{

    nrfx_twim_xfer_desc_t twim_xfer_desc = NRFX_TWIM_XFER_DESC_TXRX(BME280_I2C_ADDRESS, // BME280 I2C
                                                                    twim->write_buffer, // Buffer z adresem rejestru TX
                                                                    1,                  // Amount
                                                                    ptr_curr,           // RX buffer
                                                                    twim->read_len      // Amount
    );

    nrfx_twim_xfer(&twim->instance, &twim_xfer_desc, NRFX_TWIM_FLAG_RX_POSTINC | NRFX_TWIM_FLAG_REPEATED_XFER);
}
void write_to_sensor(twim_config_t *twim, uint8_t adres, uint8_t value)
{
    uint8_t write_buffx[2];
    write_buffx[0] = adres;
    write_buffx[1] = value;
    nrfx_twim_xfer_desc_t twim_xfer_desc = NRFX_TWIM_XFER_DESC_TX(LIS3DH_DEFAULT_ADDRESS, // BME280 I2C
                                                                  write_buffx,            // Buffer z adresem rejestru TX
                                                                  2                       // Amount
                                                                                          // Amount
    );

    nrfx_twim_xfer(&twim->instance, &twim_xfer_desc, 0);
     // k_sleep(K_MSEC(100));
}

void read_from_sensor(twim_config_t *twim, uint8_t adres, uint8_t i)
{
    
   // adres |= 0x80;
    uint8_t write_buff[1] = {LIS3DH_REG_OUT_X_H};
    nrfx_twim_xfer_desc_t twim_xfer_desc = NRFX_TWIM_XFER_DESC_TXRX(LIS3DH_DEFAULT_ADDRESS, // BME280 I2C
                                                                    write_buff,             // Buffer z adresem rejestru TX
                                                                    1,                      // Amount
                                                                    read_buff,               // RX buffer
                                                                    sizeof(read_buff)       // Amount
    );
    nrfx_twim_xfer(&twim->instance, &twim_xfer_desc, 0);
    LOG_INF("DATA: %d\n", read_buff[0]);
    //memset(&twim->read_buffer[i], 0, sizeof(uint8_t));
    //k_free(twim->read_buffer);
     k_sleep(K_MSEC(100));
     
}

and for a 2 days im completely stuck with reading data from LIS3DH, i guess my functions for writing and reading are fine.  my read buff is just uint8_t read_buff[1] im setting ctrlreg1 to enable normal mode with 400hz frequency(if i remember correctly) and trying to read some data. But ive discovered sth:

why is it doing write operation then reading from 0x19 with 0x77 data, shouldnt it just write to 0x20 0x77 data?? and im only getting data that is 64 192 and 128. Nothing more.

Related