SPI configuration in zephyr by using nRF54l15dk as board configuration

Hi,
I would like to consult how could I deal with this error and build the code succesfully.

In device.h

'__device_dts_ord_113' undeclared here (not in a function); did you mean '__device_dts_ord_11'?

In devicetree_generated .h

'DT_N_S_soc_S_peripheral_50000000_S_spi_c7000_S_mysensor2_0_P_spi_max_frequency' undeclared here (not in a function); did you mean 'DT_N_S_soc_S_peripheral_50000000_S_spi_4a000_S_mx25r6435f_0_P_spi_max_frequency'?

Below is my overlay file

&i2c22 {
    status = "okay";
    pinctrl-0 = <&i2c22_default>;
    pinctrl-1 = <&i2c22_sleep>;
    pinctrl-names = "default", "sleep";

    mysensor: mysensor@77 { //BME280 Test
        compatible = "i2c-device";
        status = "okay";
        reg = <0x77>;
    };
};

&uart21 {
	current-speed = <57600>;
	pinctrl-0 = <&uart21_default>;
	pinctrl-1 = <&uart21_sleep>;
	pinctrl-names = "default", "sleep";
};

&spi21 {
    compatible = "nordic,nrf-spim";
    status = "okay";
    pinctrl-0 = <&spi21_default>;
    pinctrl-1 = <&spi21_sleep>;
    pinctrl-names = "default", "sleep";
    cs-gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;

    mysensor2: mysensor2@0 {
        compatible = "spi-device";
        reg = <0>;
        spi-max-frequency = <1000000>;
    };
};

&pinctrl {
    /omit-if-no-ref/ i2c22_default: i2c22_default {
        group1 {
            psels = <NRF_PSEL(TWIM_SCL, 1, 11)>,
                    <NRF_PSEL(TWIM_SDA, 1, 12)>;
        };
    };

    /omit-if-no-ref/ i2c22_sleep: i2c22_sleep {
        group1 {
            psels = <NRF_PSEL(TWIM_SCL, 1, 11)>,
                    <NRF_PSEL(TWIM_SDA, 1, 12)>;
            low-power-enable;
        };
    };

    spi21_default: spi21_default {
		group1 {
				psels = <NRF_PSEL(SPIM_SCK, 1, 8)>, 
						<NRF_PSEL(SPIM_MOSI, 1, 13)>,
						<NRF_PSEL(SPIM_MISO, 1, 14)>;
		};
	};

	spi21_sleep: spi21_sleep {
		group1 {
				psels = <NRF_PSEL(SPIM_SCK, 1, 8)>,
						<NRF_PSEL(SPIM_MOSI, 1, 13)>,
						<NRF_PSEL(SPIM_MISO, 1, 14)>;
				low-power-enable;
		};
	};

    uart21_default: uart21_default {
        group1 {
            psels = <NRF_PSEL(UART_TX, 1, 0)>, <NRF_PSEL(UART_RX, 1, 1)>;
        };
    };

    uart21_sleep: uart21_sleep {
        group1 {
            psels = <NRF_PSEL(UART_TX, 1, 0)>, <NRF_PSEL(UART_RX, 1, 1)>;
        };
    };
};


/ {
    zephyr,user {
        cts_pin-gpios = <&gpio1 3 GPIO_ACTIVE_LOW>; //CTS input
        rts_pin-gpios = <&gpio1 2 GPIO_ACTIVE_LOW>; //RTS output
    };
};

Below is the program code

#include <zephyr/types.h>
#include <stddef.h>
#include <errno.h>
#include <zephyr/sys/byteorder.h>

#include <zephyr/logging/log.h>
#include <zephyr/kernel.h>

#include <zephyr/devicetree.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/drivers/spi.h>

#define SPI_NODE  DT_NODELABEL(mysensor2)
/*Retrieve the API-device structure */
#define SPIOP	SPI_WORD_SET(8) | SPI_TRANSFER_MSB
struct spi_dt_spec spispec = SPI_DT_SPEC_GET(SPI_NODE, SPIOP, 0);

/* For spi thread */
K_THREAD_STACK_DEFINE(spi_stack_area, 1280);
static k_tid_t spi_thread_id;
static struct k_thread spi_thread_data;

static int bme_write_reg(uint8_t reg, uint8_t value)
{
	int err;

	//Delcare a tx buffer having register address and data */
	uint8_t tx_buf[] = {(reg & 0x7F), value}; 
    struct spi_buf	tx_spi_buf 		= {.buf = tx_buf, .len = sizeof(tx_buf)};
    struct spi_buf_set tx_spi_buf_set	= {.buffers = &tx_spi_buf, .count = 1};

	/* call the spi_write_dt function with SPISPEC to write buffers */
	err = spi_write_dt(&spispec, &tx_spi_buf_set);
	if (err < 0) {
		LOG_ERR("spi_write_dt() failed, err %d", err);
		return err;
	}

	return 0;
}

static void spi_thread(void *p1, void *p2, void *p3) {
    printk("[%s]\n", __func__);
	while (1) {
		k_sleep(K_MSEC(10));
		bme_write_reg(0xF2, 0x04); //CTRLHUM 0xF2
	}
}

void spi_start(void) {
	printk("[%s]\n", __func__);

    //Check if SPI and GPIO devices are ready */
	int err = spi_is_ready_dt(&spispec);
    if (!err) {
		printk("Error: SPI device is not ready, err: %d", err);
	}

	if (spi_thread_id == NULL) {
		spi_thread_id = k_thread_create(&spi_thread_data, spi_stack_area,
			K_THREAD_STACK_SIZEOF(spi_stack_area),
			spi_thread, NULL, NULL, NULL,
			3, 0, K_NO_WAIT);

		int ret = k_thread_name_set(spi_thread_id, "SPI_THREAD");
		if (ret) {
			printk("[%s], Set thread name failed = %d\n", __func__, ret);
		}
	}
}

Here is the project configuration

#Add for I2C
CONFIG_I2C=y

#Add for UART
CONFIG_SERIAL=y
CONFIG_UART_ASYNC_API=y
CONFIG_UART_INTERRUPT_DRIVEN=n

#Add for Using inteneral RC
CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y

#Add for GPIO Configure
CONFIG_GPIO=y
CONFIG_NFCT_PINS_AS_GPIOS=y

#Add for set the thread name
CONFIG_THREAD_NAME=y
CONFIG_THREAD_MAX_NAME_LEN=12

#Add for SPI
CONFIG_SPI=y

  • Hello,

    It is a bit hard to tell from your screenshot, but are those error messages coming from the "Problems" tab? If so, you can just ignore these. This tab has some issues when it comes to understanding the application context of the open projects. 

    and build the code succesfully

    Have you tried building the application? If so, does it build successfully, or do you see any errors in the build log? If you see any errors, can you please upload the entire (!) build log here?

    Best regards,

    Edvin

Related