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

Reading Data from Sensor by TWIM

Hi,

I would like to read data from sensor and send it over BLE to nRF connect. Unfortunaly, something went wrong while reading the data by TWIM.

I´m using SDK16.

I would like to read 12 Bytes from a Sensor and store this in a Puffer. After this, I send the Puffer ober BLE to nRF connect. So the procedure should be:

- determine Sensor

- determine start register

- read 12 Bytes, starting at start register

- send 12 Bytes ober Bluetooth Low Energy

I think someting goes wrong by collecting the data over TWIM. For doing this, I use the following functions to determine the correct Sensor:

void ICM20948_set_mode(void)
{


      
ret_code_t err_code;

    /* Sensor on */
    uint8_t reg3[2] = {0x06, 0x01};
    nrfx_twim_xfer_desc_t normal_mode_config = NRFX_TWIM_XFER_DESC_TX(ICM20948_ADDR, reg3, sizeof(reg3));
    err_code = nrfx_twim_xfer(&m_twim, &normal_mode_config, NULL);
    while (m_xfer_done == false);

    /* Register choose */
    uint8_t reg4[1] = {0x2D}; // Since this register there are 12 Bytes we would have to read
    m_xfer_done = false;
    nrfx_twim_xfer_desc_t temp_reg_write = NRFX_TWIM_XFER_DESC_TX(ICM20948_ADDR, reg4, sizeof(reg4));
    err_code = nrfx_twim_xfer(&m_twim, &normal_mode_config, NULL);    APP_ERROR_CHECK(err_code);
    while (m_xfer_done == false);


}

After determine the correct sensor and correct register, I would like to read 12 Bytes from the register and send it by bluetooth.:

static void read_sensor_data()
{


    m_xfer_done = false;
    nrfx_twim_xfer_desc_t lm75b_reading = NRFX_TWIM_XFER_DESC_RX(ICM20948_ADDR, &m_sample[0], sizeof(m_sample));
 

    /* Read 12 bytes from the specified address - skip 3 bits dedicated for fractional part of temperature. */
    ret_code_t err_code = nrfx_twim_xfer(&m_twim, &lm75b_reading, NULL);
    APP_ERROR_CHECK(err_code);


// Send data over Bluetooth 
                     
//nrf_delay_ms(100); 
uint32_t err_code2; 
uint16_t length = (uint16_t)12;

err_code2 = ble_nus_data_send(&m_nus, m_sample, &length, m_conn_handle);
if ((err_code2 != NRF_ERROR_INVALID_STATE) &&
(err_code2 != NRF_ERROR_RESOURCES) &&
(err_code2 != NRF_ERROR_NOT_FOUND))
{
APP_ERROR_CHECK(err_code2);
}

}

Unfortunaly, there are not the correct sensor values on nRF connect app. For analyzing, I attached the hole project for you too.

It would be great, if someone could have a look to my functions I use.

Thanks in advance.

Simon

ble_app_uart_with_twim v0.1.zip

Parents Reply Children
No Data
Related