Summary:
I must be doing something wrong when making the board files for a custom board (nRF52840 SOC), because I'm unable to initialize the LIS2DW12 using Zephyr's built-in sensor drivers.
Details:
Here's my device tree, you can see the relevant I2C portions where I'm configuring things for the LIS2DW12:
// Copyright (c) 2024 Nordic Semiconductor ASA // SPDX-License-Identifier: Apache-2.0 /dts-v1/; #include <nordic/nrf52840_qiaa.dtsi> #include "type2ab_evb-pinctrl.dtsi" / { model = "Type2AB_EVB"; compatible = "murata,type2ab-evb"; chosen { zephyr,console = &uart0; zephyr,shell-uart = &uart0; zephyr,uart-mcumgr = &uart0; zephyr,bt-mon-uart = &uart0; zephyr,bt-c2h-uart = &uart0; zephyr,sram = &sram0; zephyr,flash = &flash0; zephyr,code-partition = &slot0_partition; }; leds { compatible = "gpio-leds"; led0: led_0 { gpios = <&gpio0 28 GPIO_ACTIVE_LOW>; label = "Green LED 0"; }; led1: led_1 { gpios = <&gpio0 21 GPIO_ACTIVE_LOW>; label = "Red LED 0"; }; }; /* These aliases are provided for compatibility with samples */ aliases { led0 = &led0; led1 = &led1; }; }; &gpiote { status = "okay"; }; &gpio0 { status = "okay"; sense-edge-mask = <0xffffffff>; }; &gpio1 { status = "okay"; sense-edge-mask = <0xffffffff>; }; &i2c0 { compatible = "nordic,nrf-twi"; status = "okay"; pinctrl-0 = <&i2c0_default>; pinctrl-1 = <&i2c0_sleep>; pinctrl-names = "default", "sleep"; lis2dw12: lis2dw12@19 { compatible = "st,lis2dw12"; status = "okay"; // https://devzone.nordicsemi.com/f/nordic-q-a/107801/usage-of-interrupts-from-i2c-device reg = <0x19>; // https://community.st.com/t5/mems-sensors/dts-configuration-for-lis2dw12/td-p/148824 power-mode=<0>; }; }; &uart0 { compatible = "nordic,nrf-uarte"; status = "okay"; current-speed = <115200>; pinctrl-0 = <&uart0_default>; pinctrl-1 = <&uart0_sleep>; pinctrl-names = "default", "sleep"; }; &flash0 { partitions { compatible = "fixed-partitions"; #address-cells = <1>; #size-cells = <1>; boot_partition: partition@0 { label = "mcuboot"; reg = <0x0 0xc000>; }; slot0_partition: partition@c000 { label = "image-0"; reg = <0xc000 0x72000>; }; slot1_partition: partition@7e000 { label = "image-1"; reg = <0x7e000 0x72000>; }; scratch_partition: partition@f0000 { label = "image-scratch"; reg = <0xf0000 0xa000>; }; storage_partition: partition@fa000 { label = "storage"; reg = <0xfa000 0x6000>; }; }; };
Here's my source file showing how I'm initializing the device:
/* * Copyright (c) 2016 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ #include <zephyr/kernel.h> // Basing the sensor stuff on this: https://github.com/nrfconnect/sdk-zephyr/blob/main/samples/shields/x_nucleo_iks01a3/standard/src/main.c or https://github.com/nrfconnect/sdk-zephyr/blob/main/drivers/sensor/st/lis2dw12/lis2dw12.c#L11 #include <zephyr/drivers/sensor.h> #include <zephyr/device.h> const struct device *const lis2dw12 = DEVICE_DT_GET_ONE(st_lis2dw12); static void lis2dw12_config(const struct device *lis2dw12) { struct sensor_value odr_attr, fs_attr; /* set LIS2DW12 accel/gyro sampling frequency to 100 Hz */ odr_attr.val1 = 100; odr_attr.val2 = 0; if (sensor_attr_set(lis2dw12, SENSOR_CHAN_ACCEL_XYZ, SENSOR_ATTR_SAMPLING_FREQUENCY, &odr_attr) < 0) { printk("Cannot set sampling frequency for LIS2DW12 accel\n"); return; } sensor_g_to_ms2(16, &fs_attr); if (sensor_attr_set(lis2dw12, SENSOR_CHAN_ACCEL_XYZ, SENSOR_ATTR_FULL_SCALE, &fs_attr) < 0) { printk("Cannot set sampling frequency for LIS2DW12 gyro\n"); return; } } int main(void) { const struct device *const lis2dw12 = DEVICE_DT_GET_ONE(st_lis2dw12); if (!device_is_ready(lis2dw12)) { printk("%s: device not ready.\n", lis2dw12->name); return 0; } lis2dw12_config(lis2dw12); while (1) { k_msleep(1000); } return 0; }
And here's the output I'm getting:
[00:00:00.786,773] <err> LIS2DW12: Not able to read dev id *** Booting nRF Connect SDK v3.5.99-ncs1 *** lis2dw12@19: device not ready.
The reason I suspect it's device-tree related, is because when I try to enable CONFIG_LIS2DW12=y in the prj.conf file, I get the following:
Here's my board files:
/cfs-file/__key/support-attachments/beef5d1b77644c448dabff31668f3a47-c25bd29ee12544218166867fd8023a11/boards.zip
Here's my project:
/cfs-file/__key/communityserver-discussions-components-files/4/6763.sensor.zip