Yet another Zephyr DeviceTree problem; this time with SPI spi-max-frequency (amongst others)

My question is:  why are XX_frame_format, XX_duplex, and XX_spi_max_frequency #defines not being generated in devicetree_generated.h??

Here's the .dts snippet for &spi3:

&spi3 {
    compatible = "nordic,nrf-spim";
    status = "okay";
    cs-gpios = <&gpio0 19 GPIO_ACTIVE_LOW>;  // Memory CS
    pinctrl-0 = <&spi3_default>;
    pinctrl-1 = <&spi3_sleep>;
    pinctrl-names = "default", "sleep";

    spiflash: spiflash@0 {
        status = "okay";
        compatible = "spi-device";
        reg = <0>;
        label = "spiFlash";
        frame-format = <0>;
        spi-max-frequency = <40000000>;
    };
};

Note that both frame-format and spi-max-frequency are specified.

But when I build I get errors for the following line:

#define SPI_OP  (SPI_OP_MODE_MASTER | SPI_MODE_GET(0) | SPI_WORD_SET(8) | SPI_LINES_SINGLE)
const struct spi_dt_spec spiFlashDt = SPI_DT_SPEC_GET(DT_NODELABEL(spiflash), SPI_OP, 0);

Specifically, complaints about XX_spi_max_frequency and XX_frame_format and XX_duplex not being defined in devicetree_generated.h

Here's the error:

In file included from C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/arch/arm/aarch32/arch.h:20,
                 from C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/arch/cpu.h:19,
                 from C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/kernel_includes.h:33,
                 from C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/kernel.h:17,
                 from ../src/spiFlashRaw.c:7:
zephyr/include/generated/devicetree_generated.h:11437:33: error: 'DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_spi_max_frequency' undeclared here (not in a function); did you mean 'DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_LEN'?
11437 | #define DT_N_NODELABEL_spiflash DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/devicetree.h:4231:29: note: in definition of macro 'DT_CAT3'
 4231 | #define DT_CAT3(a1, a2, a3) a1 ## a2 ## a3
      |                             ^~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/drivers/spi.h:332:30: note: in expansion of macro 'DT_PROP'
  332 |                 .frequency = DT_PROP(node_id, spi_max_frequency),       \
      |                              ^~~~~~~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/drivers/spi.h:386:27: note: in expansion of macro 'SPI_CONFIG_DT'
  386 |                 .config = SPI_CONFIG_DT(node_id, operation_, delay_) \
      |                           ^~~~~~~~~~~~~
../src/spiFlashRaw.c:20:39: note: in expansion of macro 'SPI_DT_SPEC_GET'
   20 | const struct spi_dt_spec spiFlashDt = SPI_DT_SPEC_GET(DT_NODELABEL(spiflash), SPI_OP, 0);
      |                                       ^~~~~~~~~~~~~~~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/devicetree.h:4229:24: note: in expansion of macro 'DT_N_NODELABEL_spiflash'
 4229 | #define DT_CAT(a1, a2) a1 ## a2
      |                        ^~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/devicetree.h:197:29: note: in expansion of macro 'DT_CAT'
  197 | #define DT_NODELABEL(label) DT_CAT(DT_N_NODELABEL_, label)
      |                             ^~~~~~
../src/spiFlashRaw.c:20:55: note: in expansion of macro 'DT_NODELABEL'
   20 | const struct spi_dt_spec spiFlashDt = SPI_DT_SPEC_GET(DT_NODELABEL(spiflash), SPI_OP, 0);
      |                                                       ^~~~~~~~~~~~
In file included from ../src/spiFlashRaw.c:11:
../src/spiFlashRaw.c:18:39: warning: implicit declaration of function 'SPI_MODE_SET'; did you mean 'SPI_MODE_GET'? [-Wimplicit-function-declaration]
   18 | #define SPI_OP  (SPI_OP_MODE_MASTER | SPI_MODE_SET(0) | SPI_WORD_SET(8) | SPI_LINES_SINGLE)
      |                                       ^~~~~~~~~~~~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/drivers/spi.h:333:31: note: in definition of macro 'SPI_CONFIG_DT'
  333 |                 .operation = (operation_) |                             \
      |                               ^~~~~~~~~~
../src/spiFlashRaw.c:20:39: note: in expansion of macro 'SPI_DT_SPEC_GET'
   20 | const struct spi_dt_spec spiFlashDt = SPI_DT_SPEC_GET(DT_NODELABEL(spiflash), SPI_OP, 0);
      |                                       ^~~~~~~~~~~~~~~
../src/spiFlashRaw.c:20:79: note: in expansion of macro 'SPI_OP'
   20 | const struct spi_dt_spec spiFlashDt = SPI_DT_SPEC_GET(DT_NODELABEL(spiflash), SPI_OP, 0);
      |                                                                               ^~~~~~
zephyr/include/generated/devicetree_generated.h:11437:33: error: 'DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_duplex' undeclared here (not in a function); did you mean 'DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_label'?
11437 | #define DT_N_NODELABEL_spiflash DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/devicetree.h:4231:29: note: in definition of macro 'DT_CAT3'
 4231 | #define DT_CAT3(a1, a2, a3) a1 ## a2 ## a3
      |                             ^~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/drivers/spi.h:334:25: note: in expansion of macro 'DT_PROP'
  334 |                         DT_PROP(node_id, duplex) |                      \
      |                         ^~~~~~~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/drivers/spi.h:386:27: note: in expansion of macro 'SPI_CONFIG_DT'
  386 |                 .config = SPI_CONFIG_DT(node_id, operation_, delay_) \
      |                           ^~~~~~~~~~~~~
../src/spiFlashRaw.c:20:39: note: in expansion of macro 'SPI_DT_SPEC_GET'
   20 | const struct spi_dt_spec spiFlashDt = SPI_DT_SPEC_GET(DT_NODELABEL(spiflash), SPI_OP, 0);
      |                                       ^~~~~~~~~~~~~~~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/devicetree.h:4229:24: note: in expansion of macro 'DT_N_NODELABEL_spiflash'
 4229 | #define DT_CAT(a1, a2) a1 ## a2
      |                        ^~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/devicetree.h:197:29: note: in expansion of macro 'DT_CAT'
  197 | #define DT_NODELABEL(label) DT_CAT(DT_N_NODELABEL_, label)
      |                             ^~~~~~
../src/spiFlashRaw.c:20:55: note: in expansion of macro 'DT_NODELABEL'
   20 | const struct spi_dt_spec spiFlashDt = SPI_DT_SPEC_GET(DT_NODELABEL(spiflash), SPI_OP, 0);
      |                                                       ^~~~~~~~~~~~
zephyr/include/generated/devicetree_generated.h:11437:33: error: 'DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_frame_format' undeclared here (not in a function); did you mean 'DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_label_EXISTS'?
11437 | #define DT_N_NODELABEL_spiflash DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0
      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/devicetree.h:4231:29: note: in definition of macro 'DT_CAT3'
 4231 | #define DT_CAT3(a1, a2, a3) a1 ## a2 ## a3
      |                             ^~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/drivers/spi.h:335:25: note: in expansion of macro 'DT_PROP'
  335 |                         DT_PROP(node_id, frame_format),                 \
      |                         ^~~~~~~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/drivers/spi.h:386:27: note: in expansion of macro 'SPI_CONFIG_DT'
  386 |                 .config = SPI_CONFIG_DT(node_id, operation_, delay_) \
      |                           ^~~~~~~~~~~~~
../src/spiFlashRaw.c:20:39: note: in expansion of macro 'SPI_DT_SPEC_GET'
   20 | const struct spi_dt_spec spiFlashDt = SPI_DT_SPEC_GET(DT_NODELABEL(spiflash), SPI_OP, 0);
      |                                       ^~~~~~~~~~~~~~~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/devicetree.h:4229:24: note: in expansion of macro 'DT_N_NODELABEL_spiflash'
 4229 | #define DT_CAT(a1, a2) a1 ## a2
      |                        ^~
C:/Projects/GuidoRail/workspace/zephyr/include/zephyr/devicetree.h:197:29: note: in expansion of macro 'DT_CAT'
  197 | #define DT_NODELABEL(label) DT_CAT(DT_N_NODELABEL_, label)
      |                             ^~~~~~
../src/spiFlashRaw.c:20:55: note: in expansion of macro 'DT_NODELABEL'
   20 | const struct spi_dt_spec spiFlashDt = SPI_DT_SPEC_GET(DT_NODELABEL(spiflash), SPI_OP, 0);
      |                                                       ^~~~~~~~~~~~


And I agree with the error - XX_spi_max_frequency and XX_frame_format and XX_duplex are not in devicetree_generated.h.  My question is why?


Here's the applicable devicetree_generated.h snippet.

/*
 * Devicetree node: /soc/peripheral@40000000/spi@b000/spiflash@0
 *
 * Node identifier: DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0
 */

/* Node's full path: */
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_PATH "/soc/peripheral@40000000/spi@b000/spiflash@0"

/* Node's name with unit-address: */
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_FULL_NAME "spiflash@0"

/* Node parent (/soc/peripheral@40000000/spi@b000) identifier: */
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_PARENT DT_N_S_soc_S_peripheral_40000000_S_spi_b000

/* Node's index in its parent's list of children: */
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_CHILD_IDX 0

/* Helper macros for child nodes of this node. */
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_FOREACH_CHILD(fn)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_FOREACH_CHILD_SEP(fn, sep)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_FOREACH_CHILD_VARGS(fn, ...)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_FOREACH_CHILD_SEP_VARGS(fn, sep, ...)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_FOREACH_CHILD_STATUS_OKAY(fn)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_FOREACH_CHILD_STATUS_OKAY_SEP(fn, sep)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_FOREACH_CHILD_STATUS_OKAY_VARGS(fn, ...)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(fn, sep, ...)

/* Node's dependency ordinal: */
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_ORD 111
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_ORD_STR_SORTABLE 00111

/* Ordinals for what this node depends on directly: */
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_REQUIRES_ORDS \
    110, /* /soc/peripheral@40000000/spi@b000 */

/* Ordinals for what depends directly on this node: */
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_SUPPORTS_ORDS /* nothing */

/* Existence and alternate IDs: */
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_EXISTS 1
#define DT_N_INST_0_spi_device  DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0
#define DT_N_NODELABEL_spiflash DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0

/* Bus info (controller: '/soc/peripheral@40000000/spi@b000', type: '['spi']') */
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_BUS_spi 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_BUS DT_N_S_soc_S_peripheral_40000000_S_spi_b000

/* Macros for properties that are special in the specification: */
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_REG_NUM 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_REG_IDX_0_EXISTS 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_REG_IDX_0_VAL_ADDRESS 0 /* 0x0 */
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_RANGES_NUM 0
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_FOREACH_RANGE(fn)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_IRQ_NUM 0
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_COMPAT_MATCHES_spi_device 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_STATUS_okay 1

/* Pin control (pinctrl-<i>, pinctrl-names) properties: */
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_PINCTRL_NUM 0

/* Generic property macros: */
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status "okay"
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_STRING_UNQUOTED okay
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_STRING_TOKEN okay
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_STRING_UPPER_TOKEN OKAY
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_IDX_0 "okay"
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_IDX_0_EXISTS 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_ENUM_IDX 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_ENUM_VAL_okay_EXISTS 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_ENUM_TOKEN okay
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_ENUM_UPPER_TOKEN OKAY
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_FOREACH_PROP_ELEM(fn) fn(DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0, status, 0)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_FOREACH_PROP_ELEM_SEP(fn, sep) fn(DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0, status, 0)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_FOREACH_PROP_ELEM_VARGS(fn, ...) fn(DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0, status, 0, __VA_ARGS__)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_FOREACH_PROP_ELEM_SEP_VARGS(fn, sep, ...) fn(DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0, status, 0, __VA_ARGS__)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_LEN 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_status_EXISTS 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_compatible {"spi-device"}
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_compatible_IDX_0 "spi-device"
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_compatible_IDX_0_STRING_UNQUOTED spi-device
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_compatible_IDX_0_STRING_TOKEN spi_device
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_compatible_IDX_0_STRING_UPPER_TOKEN SPI_DEVICE
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_compatible_IDX_0_EXISTS 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_compatible_FOREACH_PROP_ELEM(fn) fn(DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0, compatible, 0)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_compatible_FOREACH_PROP_ELEM_SEP(fn, sep) fn(DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0, compatible, 0)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_compatible_FOREACH_PROP_ELEM_VARGS(fn, ...) fn(DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0, compatible, 0, __VA_ARGS__)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_compatible_FOREACH_PROP_ELEM_SEP_VARGS(fn, sep, ...) fn(DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0, compatible, 0, __VA_ARGS__)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_compatible_LEN 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_compatible_EXISTS 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_reg {0 /* 0x0 */}
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_reg_IDX_0 0
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_reg_IDX_0_EXISTS 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_reg_EXISTS 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_label "spiFlash"
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_label_STRING_UNQUOTED spiFlash
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_label_STRING_TOKEN spiFlash
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_label_STRING_UPPER_TOKEN SPIFLASH
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_label_IDX_0 "spiFlash"
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_label_IDX_0_EXISTS 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_label_FOREACH_PROP_ELEM(fn) fn(DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0, label, 0)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_label_FOREACH_PROP_ELEM_SEP(fn, sep) fn(DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0, label, 0)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_label_FOREACH_PROP_ELEM_VARGS(fn, ...) fn(DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0, label, 0, __VA_ARGS__)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_label_FOREACH_PROP_ELEM_SEP_VARGS(fn, sep, ...) fn(DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0, label, 0, __VA_ARGS__)
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_label_LEN 1
#define DT_N_S_soc_S_peripheral_40000000_S_spi_b000_S_spiflash_0_P_label_EXISTS 1

Edit:

!!! Workaround.

I hard-coded the following and the compiler seems happy. Can somebody confirm it's equivalent to what I have in my board .dts file? Thanks

#define SPI_OP  (SPI_OP_MODE_MASTER | SPI_MODE_GET(0) | SPI_WORD_SET(8) | SPI_LINES_SINGLE)

#if 0
const struct spi_dt_spec spiFlashDt = SPI_DT_SPEC_GET(DT_NODELABEL(spiflash), SPI_OP, 0);
#else


const struct spi_dt_spec spiFlashDt =
{
    .bus = DEVICE_DT_GET(DT_NODELABEL(spi3)),
    .config.cs.gpio.dt_flags = GPIO_ACTIVE_LOW,
    .config.cs.gpio.pin = 19,
    .config.cs.delay = 0,
    .config.frequency = 40000000,
    .config.operation = SPI_OP,
    .config.slave = 0,
};

  • Interestingly, that's what I started with based on an example I found online, but VS Code kept giving me the following error:

    And that error went away when I changed "vnd,spi-device" to "spi-device".  Based on your suggestion went back to "vnd,spi-device", ignored the VS Code error, did a rebuild, and voila, devicetree_generated.h now has all the #defined attributes that I need.  So I guess I'll just live with (and ignore) the VS Code complaints.

    Thanks.

Related