Hi,
I am using nrf Connected SDK v2.6.2 on windows 10. I try to create a blank application project for the device ADXL363 on SPI2 bus on the nRF9160DK board.
I basically followed the sample here: https://github.com/aaron-mohtar-co/Lemon-IoT-LTE-nRF9160/tree/main/Examples/spi_sensor
The error message shown as below:

Main.c
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/devicetree.h>
#include <zephyr/drivers/spi.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(adxl363_driver, CONFIG_LOG_DEFAULT_LEVEL);
/* Get ADXL363 SPI device */
const struct device *adxl_dev = DEVICE_DT_GET_ANY(adi_adxl363);
/* SPI Configuration */
struct spi_config spi_cfg = {
.frequency = 5000000, // 5 MHz SPI clock
.operation = SPI_WORD_SET(8) | SPI_TRANSFER_MSB | SPI_MODE_CPOL | SPI_MODE_CPHA,
.slave = 0,
};
/* Read ADXL363 Device ID */
void adxl363_read_device_id(void) {
uint8_t tx_data[2] = {0x0B, 0x00}; // Read command for Device ID
uint8_t rx_data[2] = {0};
struct spi_buf tx_buf = { .buf = tx_data, .len = sizeof(tx_data) };
struct spi_buf_set tx = { .buffers = &tx_buf, .count = 1 };
struct spi_buf rx_buf = { .buf = rx_data, .len = sizeof(rx_data) };
struct spi_buf_set rx = { .buffers = &rx_buf, .count = 1 };
int ret = spi_transceive(adxl_dev, &spi_cfg, &tx, &rx);
if (ret == 0) {
LOG_INF("ADXL363 Device ID: 0x%02X", rx_data[1]);
if (rx_data[1] == 0xAD) {
LOG_INF("ADXL363 Connection Verified!");
} else {
LOG_ERR("Invalid Device ID! Expected 0xAD but got 0x%02X. Check Wiring!", rx_data[1]);
}
} else {
LOG_ERR("SPI Communication Failed!");
}
}
void main(void) {
LOG_INF("Initializing ADXL363...");
if (!device_is_ready(adxl_dev)) {
LOG_ERR("ADXL363 device not ready! Check DeviceTree and wiring.");
return;
}
LOG_INF("ADXL363 device found. Reading Device ID...");
adxl363_read_device_id();
}
Devicetree
nrf9160dk_nrf9160_ns.overlay
&pinctrl {
spi2_default: spi2_default {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 0, 16)>,
<NRF_PSEL(SPIM_MISO, 0, 18)>,
<NRF_PSEL(SPIM_MOSI, 0, 17)>;
};
};
spi2_sleep: spi2_sleep {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 0, 16)>,
<NRF_PSEL(SPIM_MISO, 0, 18)>,
<NRF_PSEL(SPIM_MOSI, 0, 17)>;
};
};
};
&spi2 {
compatible = "nordic,nrf-spim";
status = "okay";
/* Define CS Pin */
cs-gpios = <&gpio0 15 GPIO_ACTIVE_LOW>;
/* Define Pin Control */
pinctrl-0 = <&spi2_default>;
pinctrl-1 = <&spi2_sleep>;
pinctrl-names = "default", "sleep";
/* ADXL363 Sensor */
adxl363: adxl363@0 {
compatible = "adi,adxl363"; // Use the correct driver binding
reg = <0>; // Chip Select 0
spi-max-frequency = <5000000>; // 5MHz SPI communication speed
label = "ADXL363";
int1-gpios = <&gpio0 19 GPIO_ACTIVE_HIGH>; // INT1 -> P0.19
};
};
The blank application has no \dts directory. So, I created the binding file....
\dts\bindings\sensor\adi,adxl363.yaml
description: Analog Devices ADXL363 3-Axis Accelerometer
compatible: "adi,adxl363"
include: spi-device.yaml
properties:
reg:
type: int
required: true
description: "Chip Select (CS) number"
spi-max-frequency:
type: int
required: true
description: "Maximum SPI frequency in Hz"
int1-gpios:
type: phandle-array
required: false
description: "GPIO connected to the INT1 pin"
int2-gpios:
type: phandle-array
required: false
description: "GPIO connected to the INT2 pin"
How can I define the ADXL363 devicetree via SPI2 properly?