Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs
This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

LIS2DH12 driver issue in nRF SDK v15.0

Hi,

There are several new drivers under "nRF5_SDK_15.0.0_a53641a\components\drivers_ext\", but no example now.

I have setup the HTS221 driver and it works. I turn to LIS2DH12 driver, but it not work.

For send and receive more i2c data then HTS221, I change some Marco like this:

#define MAX_PENDING_TRANSACTIONS    33

#define LIS2DH12_MIN_QUEUE_SIZE       32

And read who_am_i successfully.

when try to read accelerate data, it stuck in somewhere, where I cannot traced.

Could you kindly share with me a example, which is using the new LIS2DH12 driver?

Parents
  • Hi ,

    I'm too trying to setup the LIS2DH12 driver to read out the WHO_AM_I register. I've adapted the twi_sensor example code according to my needs and your code snippets. Due to some previous issues when compiling I used the sdk_config.h from the twi_master_using_nrf_twi_mngr example.

    When I run the attached code the application starts, runs to the "Here." debug print, crashes and resets to continue in an endless cycle.

    Would you mind sharing a minimal example on how to read out the WHO_AM_I register using the drivers or point me in a general direction to keep searching?

    /* TWI instance ID. */
    #define TWI_INSTANCE_ID             0
    #define MAX_PENDING_TRANSACTIONS    33
    #define LIS2DH12_MIN_QUEUE_SIZE     32
    
    NRF_TWI_MNGR_DEF(m_nrf_twi_mngr, MAX_PENDING_TRANSACTIONS, TWI_INSTANCE_ID);
    NRF_TWI_SENSOR_DEF(m_nrf_twi_sensor, &m_nrf_twi_mngr, LIS2DH12_MIN_QUEUE_SIZE);
    LIS2DH12_INSTANCE_DEF(m_lis2dh12, &m_nrf_twi_sensor, LIS2DH12_BASE_ADDRESS_HIGH);
    
    static uint8_t m_sample = 0;
    
    void print_identity(ret_code_t r, void *p_register_data)
    {
        NRF_LOG_INFO("Identity: %d", *((uint8_t *)p_register_data));
    }
    
    /**
     * @brief Function for main application entry.
     */
    int main(void)
    {
        APP_ERROR_CHECK(NRF_LOG_INIT(NULL));
        NRF_LOG_DEFAULT_BACKENDS_INIT();
    
        NRF_LOG_INFO("TWI sensor example started.");
        NRF_LOG_FLUSH();
    
        ret_code_t err = lis2dh12_init(&m_lis2dh12);
        NRF_LOG_INFO("Here.");
        NRF_LOG_FLUSH();
        APP_ERROR_CHECK(err);
        while (true)
        {
            nrf_delay_ms(500);
            err = lis2dh12_who_am_i_read(&m_lis2dh12, print_identity, &m_sample);
            APP_ERROR_CHECK(err);
            NRF_LOG_FLUSH();
        }
    }
    

  • Maybe you could check the err from :

    ret_code_t err = lis2dh12_init(&m_lis2dh12);

    What is it?

     

    BR,

    Edvin

  • I'm just trying to initialize with lis2dh12_init after setting everything set up and I'm getting:

    <error> app: ERROR 536936356 [Unknown error code] at C:\SEGGER Embedded Studio for ARM Projects\Wireless_TCT_Device\main.c:203
    PC at: 0x00000721
    <error> app: End of error report
    

    I have:

    #define MAX_PENDING_TRANSACTIONS    32
    
    NRF_TWI_MNGR_DEF(m_nrf_twi_mngr, MAX_PENDING_TRANSACTIONS, TWI_INSTANCE_ID);
    NRF_TWI_SENSOR_DEF(m_nrf_twi_sensor,&m_nrf_twi_mngr,32);
    LIS2DH12_INSTANCE_DEF(m_lis2dh12,&m_nrf_twi_sensor,LIS2DH12_BASE_ADDRESS_HIGH);
    
    int main()
    {
    
        uint32_t err_code;
        
        nrf_drv_twi_config_t const config = {
           .scl                = 12,
           .sda                = 13,
           .frequency          = NRF_DRV_TWI_FREQ_100K,
           .interrupt_priority = APP_IRQ_PRIORITY_LOWEST,
           .clear_bus_init     = false
        };
        
        err_code = nrf_twi_mngr_init(&m_nrf_twi_mngr, &config);
        APP_ERROR_CHECK(err_code);
        
        err_code = nrf_twi_sensor_init(&m_nrf_twi_sensor);
        APP_ERROR_CHECK(err_code);
        
        err_code = lis2dh12_init(&m_lis2dh12);
        APP_ERROR_CHECK(&err_code);
        NRF_LOG_INFO("LIS2DH Init.");
        
    }

  • You are checking the address of err_code on line 27 in your snippet. It is obviously not 0, so APP_ERROR_CHECK(&err_code) stops the application. Remove the "&"  in APP_ERROR_CHECK(&err_code); and see if that helps.

     

    BR,

    Edvin

Reply Children
  • Whoops! That fixed it. I changed that for some reason looking at your above post. Before it was failing because I wasn't initiating twi_sensor.

    Edit: Actually it worked because it programmed the DK instead of the external board which does't have the low frequency oscillator. Is it required for TWI?

    Edit 2: Changed it to RC in SDK config and it worked. I'll take that as a yes to my question.

Related