Driver for ADC1115 with nrf9160

Hello

I am trying to understand how to use the sensor API. As an example I want to connect ADS1115 to the I2C0 pin 11,12.

For reference I take the code from the sensor documentation https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/hardware/peripherals/sensor.html#sensors and add the primitive i2c scanner function just to check physical connection. 

#include <zephyr/kernel.h>
#include <zephyr/drivers/sensor.h>
#include <drivers/i2c.h>
#include <drivers/adc.h>
#include <zephyr/sys/printk.h>
#include <zephyr/logging/log.h>

LOG_MODULE_REGISTER(ads, LOG_LEVEL_DBG);

#define MY_I2C DT_ALIAS(i2c0)

void scan_i2c_bus(const struct device *dev, int i2cbus)
{
        LOG_INF("Scaning I2C_%u bus:", i2cbus);
        for (uint8_t addr = 0; addr < 128; addr++)
        {
                struct i2c_msg msg = {
                    .buf = NULL,
                    .len = 0,
                    .flags = I2C_MSG_WRITE};

                int ret = i2c_transfer(dev, &msg, 1, addr);
                if (ret == 0)
                {
                        LOG_INF("Found device at address 0x%02X", addr);
                }
        }
}

static const struct device *get_ads1x1x_device(void)
{
        const struct device *const dev = DEVICE_DT_GET_ANY(ti_ads1115);

        if (dev == NULL)
        {
                /* No such node, or the node does not have status "okay". */
                LOG_ERR("Error: no device found.");
                return NULL;
        }

        if (!device_is_ready(dev))
        {
                LOG_ERR("Error: Device \"%s\" is not ready; "
                        "check the driver initialization logs for errors.",
                        dev->name);
                return NULL;
        }

        LOG_INF("Found device \"%s\", getting sensor data", dev->name);
        return dev;
}

int main(void)
{
        int err;
        const struct device *ads1115 = get_ads1x1x_device();

        const struct device *devi2c = DEVICE_DT_GET(MY_I2C);
        if (!devi2c)
        {
                LOG_ERR("Could not get I2C device");
                return 0;
        }

        scan_i2c_bus(devi2c, 0);

        if (ads1115 == NULL)
        {
                return 0;
        }
        while (1)
        {
                struct sensor_value volt;

                err = sensor_sample_fetch(ads1115);
                if (err != 0)
                {
                        LOG_ERR("Failed to fetch device %s, err = %d", ads1115->name, err);
                }

                err = sensor_channel_get(ads1115, SENSOR_CHAN_VOLTAGE, &volt);
                if (err != 0)
                {
                        LOG_ERR("Failed to get data from device %s, err = %d", ads1115->name, err);
                }
                LOG_INF("volt: %d.%06d", volt.val1, volt.val2);

                k_sleep(K_MSEC(1000));
        }
        return 0;
}

Here is my overlay file nrf9160dk_nrf9160_ns.overlay

&i2c0 {
    compatible = "nordic,nrf-twim";
    clock-frequency = <I2C_BITRATE_FAST>;
    status = "okay";

    pinctrl-0 = <&i2c0_default>;
    pinctrl-1 = <&i2c0_sleep>;
    pinctrl-names = "default", "sleep";

    ads1115: ads1115@48 {
        compatible = "ti,ads1115";
        #io-channel-cells = <1>;
        reg = <0x48>;
        label = "ADS1115";
    };
};

&spi0 {
    status = "disabled";
};

&uart0 {
    status = "disabled";
};

&pinctrl {

    i2c0_default: i2c0_default {
        group1 {
            psels = <NRF_PSEL(TWIM_SDA, 0, 11)>,
                    <NRF_PSEL(TWIM_SCL, 0, 12)>;
        };
    };

    i2c0_sleep: i2c0_sleep {
        group1 {
            psels = <NRF_PSEL(TWIM_SDA, 0, 11)>,
                    <NRF_PSEL(TWIM_SCL, 0, 12)>;
            low-power-enable;
        };
    };

};

/{
    aliases{
        i2c0 =&i2c0;
    };
};

and prj.conf file

CONFIG_LOG=y
CONFIG_LOG_MODE_IMMEDIATE=y
CONFIG_LOG_BACKEND_RTT=y

CONFIG_USE_SEGGER_RTT=y

CONFIG_CONSOLE=y
CONFIG_RTT_CONSOLE=y
CONFIG_UART_CONSOLE=n

CONFIG_SENSOR=y

CONFIG_I2C=y

CONFIG_ADC=y

CONFIG_ADC_ADS1X1X=y

CONFIG_NEWLIB_LIBC=y
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
CONFIG_NEWLIB_LIBC_FLOAT_SCANF=y

CONFIG_CLOCK_CONTROL_LOG_LEVEL_DBG=y
CONFIG_SENSOR_LOG_LEVEL_DBG=y

The problem is that application reboot each time it enters sensor_sample_fetch() function and I can figure out why. I tried to debug, but debug freeze at 

 513 return api->sample_fetch(dev, SENSOR_CHAN_ALL); in the sensor.h file. 

 Here is the log output

*** Booting Zephyr OS build v3.0.99-ncs1-1  ***

[00:00:00.505,584] <inf> ads: Found device "ADS1115", getting sensor data
[00:00:00.506,072] <inf> ads: Scaning I2C_0 bus:
[00:00:00.506,561] <inf> ads: Found device at address 0x00
[00:00:00.507,080] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.507,720] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.508,361] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.508,972] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.509,613] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.510,253] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.510,894] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.511,535] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.512,176] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.512,817] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.513,458] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.514,129] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.514,770] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.515,411] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.516,052] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.516,693] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.517,364] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.523,010] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.523,651] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.524,291] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.524,932] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.525,573] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.526,214] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.526,855] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.527,526] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.528,167] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.528,808] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.529,449] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.530,090] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.530,731] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.531,341] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.532,012] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.532,653] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.533,294] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.533,935] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.534,576] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.535,217] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.535,858] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.541,503] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.542,144] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.542,785] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.543,426] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.544,067] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.544,708] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.545,349] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.545,989] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.546,661] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.547,302] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.547,943] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.548,583] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.549,224] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.549,865] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.550,537] <inf> ads: Found device at address 0x35
[00:00:00.551,055] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.551,696] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.552,337] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.558,013] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.558,654] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.559,265] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.559,906] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.560,546] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.561,187] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.561,828] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.562,469] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.563,110] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.563,751] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.564,392] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.565,032] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.565,673] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.566,345] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.566,986] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.567,657] <inf> ads: Found device at address 0x48
[00:00:00.568,176] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.568,817] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.569,427] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.570,068] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.570,709] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.576,385] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.577,026] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.577,667] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.578,308] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.578,948] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.579,589] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.580,230] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.580,871] <inf> ads: Found device at address 0x55
[00:00:00.581,390] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.582,031] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.582,672] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.583,312] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.583,953] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.584,594] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.585,266] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.585,906] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.586,547] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.587,188] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.587,829] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.593,505] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.594,116] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.594,757] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.595,428] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.596,069] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.596,710] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.597,351] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.597,991] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.598,632] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.599,304] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.599,945] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.600,585] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.601,226] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.601,867] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.602,508] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.603,149] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.603,790] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.604,431] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.610,107] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.610,748] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.611,389] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.612,030] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.612,640] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.613,281] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.613,922] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.614,562] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.615,234] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.615,875] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.616,516] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.617,156] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
[00:00:00.617,797] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0
*** Booting Zephyr OS build v3.0.99-ncs1-1  ***

[00:00:00.505,584] <inf> ads: Found device "ADS1115", getting sensor data
[00:00:00.506,072] <inf> ads: Scaning I2C_0 bus:
[00:00:00.506,561] <inf> ads: Found device at address 0x00
[00:00:00.507,080] <err> i2c_nrfx_twim: Error 0x0BAE0001 occurred for message 0

I am using SDK 2.0.2
Custom board.

Related