Hello,
I have followed the tutorial series of nRF Connect SDK Tutorial and now I have basic understanding on how the ncs works.
I'm trying to enable SPI0 in the nRF9160 DK using overlay file (project attached in the end)
My overlay file: nrf9160_pca10090ns.overlay
&spi0 {
status = "okay";
cs-gpios = <13>;
sck-pin = <10>;
mosi-pin = <11>;
miso-pin = <12>;
label = "CAN_SPI_0";
};
My CMakeLists.txt
cmake_minimum_required(VERSION 3.13.1)
set(SPI_DTC_OVERLAY_FILE
${CMAKE_CURRENT_SOURCE_DIR}/nrf9160_pca10090ns.overlay
)
include($ENV{ZEPHYR_BASE}/../nrf/cmake/boilerplate.cmake)
include($ENV{ZEPHYR_BASE}/cmake/app/boilerplate.cmake NO_POLICY_SCOPE)
project(NONE)
target_sources(app PRIVATE src/main.c)My main.c
#include <zephyr.h>
#include <sys/printk.h>
#include <drivers/spi.h>
#define SPI_DEVICE_NAME DT_NORDIC_NRF_SPIM_SPI_0_LABEL
void main(void)
{
struct device *spi_dev = device_get_binding(SPI_DEVICE_NAME);
}
When running west build -b nrf9160_pca10090ns -d build_nrf9160_pca10090ns
I get the following error
.
./src/main.c: In function 'main': ../src/main.c:5:25: error: 'DT_NORDIC_NRF_SPIM_SPI_0_LABEL' undeclared (first use in this function); did you mean 'DT_NORDIC_NRF_SPIM_SPI_3_LABEL'? #define SPI_DEVICE_NAME DT_NORDIC_NRF_SPIM_SPI_0_LABEL ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../src/main.c:9:46: note: in expansion of macro 'SPI_DEVICE_NAME' struct device *spi_dev = device_get_binding(SPI_DEVICE_NAME); ^~~~~~~~~~~~~~~ ../src/main.c:5:25: note: each undeclared identifier is reported only once for each function it appears in #define SPI_DEVICE_NAME DT_NORDIC_NRF_SPIM_SPI_0_LABEL ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../src/main.c:9:46: note: in expansion of macro 'SPI_DEVICE_NAME' struct device *spi_dev = device_get_binding(SPI_DEVICE_NAME); ^~~~~~~~~~~~~~~ ../src/main.c:9:17: warning: unused variable 'spi_dev' [-Wunused-variable] struct device *spi_dev = device_get_binding(SPI_DEVICE_NAME); ^~~~~~~ [125/136] Building C object zephyr/CMakeFiles/zephyr.dir/drivers/timer/nrf_rtc_timer.c.obj ninja: build stopped: subcommand failed. ERROR: command exited with status 1: 'C:\Program Files\CMake\bin\cmake.EXE' --build 'D:\DEV\Phantomtracker\software\my_projects\project_hello\hello_world\build_nrf9160_pca10090ns'
To find a solution I tried the following :
- I changed SPI_DEVICE_NAME to SPI3
#define SPI_DEVICE_NAME DT_NORDIC_NRF_SPIM_SPI_3_LABEL
This will buil the project with success. This is make sense because SPI3 is already enabled in ncs\v1.2.0\zephyr\boards\arm\nrf9160_pca10090\Kconfig.defconfig
- I tried to enable SPI0 using Segger Embedded studio as shown in the image below :

I got the following error
-- Configuring done CMake Error at D:/DEV/nRF/ncs/v1.2.0/zephyr/cmake/extensions.cmake:372 (add_library): No SOURCES given to target: drivers__serial Call Stack (most recent call first): D:/DEV/nRF/ncs/v1.2.0/zephyr/cmake/extensions.cmake:349 (zephyr_library_named) D:/DEV/nRF/ncs/v1.2.0/zephyr/drivers/serial/CMakeLists.txt:3 (zephyr_library) CMake Generate step failed. Build files cannot be regenerated correctly. Project load failed Reported error: solution load command failed (1)
Cleaning the project didn't help.
Q1: How can I fix configuration over Segger?
- I tried using ninja menuconfig, but again got the following error
ninja: error: loading 'build.ninja': The system cannot find the file specified
Q2 : Ninja is working since I can build projects, am I missing paths ?
- I thought that I can enable it in the pjr.conf file but I'm not sure what's the string to add. something like CONFIG_SPI_0_NRFX_SPIM = y ?
Q3 : is there any documention that helps defining it ?
- Checking the build folder I can see that SPI0 was set correctly in build_nrf9160_pca10090ns\zephyr\zephyr.dts
spi0: spi@8000 {
#address-cells = < 0x1 >;
#size-cells = < 0x0 >;
reg = < 0x8000 0x1000 >;
interrupts = < 0x8 0x1 >;
status = "okay";
label = "CAN_SPI_0";
cs-gpios = < 0xd >;
sck-pin = < 0xa >;
mosi-pin = < 0xb >;
miso-pin = < 0xc >;
};
Q4 : most important question : can enable SPI in this project ?
Project attached here hello_world.zip
Regards,
hicham