Hello,
in my application I use SPI communication to control my display. For that I have configured the pins for spi4 in the dts and all works fine.
&spi4 {
status = "okay";
pinctrl-0 = <&spi4_default>;
pinctrl-names = "default";
cs-gpios = <&gpio0 11 GPIO_ACTIVE_LOW>;
lcdspi: lcdspi@0{
compatible="vnd,spi-device";
reg =<0>;
spi-max-frequency=<15000000>;
};
};
Now I would like to access the display already from wihtin the mcuboot. Basically to display a potential firmware update progress.
I created a patch for the mcuboot in the Nordic SDK that tries to get the SPI device as I do in the application.
static const spi_operation_t lcdCtrl_ms_ch1_operation = SPI_WORD_SET(8) | SPI_OP_MODE_MASTER;
static const struct spi_dt_spec lcdCtrl_ms_ch1_dev = SPI_DT_SPEC_GET(DT_NODELABEL(lcdspi), lcdCtrl_ms_ch1_operation, 0);
int main()
{
lcdCtrl_mu8_DataBuffer[0] = MAGIC_DATA;
lcdCtrl_ms_tx_buf.buf = lcdCtrl_mu8_DataBuffer;
lcdCtrl_ms_tx_buf.len = 1;
gpio_pin_set_dt(&lcdCtrl_Pin_dc, 0); /* COMMAND MODE */
spi_transceive_dt(&lcdCtrl_ms_ch1_dev, &lcdCtrl_ms_tx_set, &lcdCtrl_ms_rx_set);
}
I also added the CONFIG_SPI=y to the mcuboot.conf.
Unfortunately when I build it the linker gives me the following error:
c:/ncs/toolchains/b620d30767/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd.exe: app/libapp.a(lcdCtrl_mcuboot.c.obj): in function `z_impl_s pi_transceive': C:/ncs/v2.9.0/zephyr/include/zephyr/drivers/spi.h:773: undefined reference to `__device_dts_ord_134' c:/ncs/toolchains/b620d30767/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd.exe: app/libapp.a(lcdCtrl_mcuboot.c.obj):(.rodata.lcdCtrl_ms_ch 1_dev+0x0): undefined reference to `__device_dts_ord_134' collect2.exe: error: ld returned 1 exit status ninja: build stopped: subcommand failed.
Can anyone assist me with this?
Thanks, Tom