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
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.