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.