I am working on a school project and need to set up SPI communication between a wiznet,W5500 and the nRF54L15DK. I can build and run my program but I am getting no responce when I ping the device. When looking over my prj.conf I have a warning associated to CONFIG_ETH_W5500=y that says
CONFIG_ETH_W5500 was assigned the value y, but got the value n. Missing dependencies:
DT_HAS_WIZNET_W5500_ENABLED.
Here is the prj.conf
# Networking config CONFIG_NETWORKING=y # w5500 driver config CONFIG_SPI=y CONFIG_NET_L2_ETHERNET=y CONFIG_ETH_W5500=y # Network address config CONFIG_NET_CONFIG_SETTINGS=y CONFIG_NET_CONFIG_NEED_IPV4=y CONFIG_NET_CONFIG_MY_IPV4_ADDR="192.168.101.52" CONFIG_NET_CONFIG_PEER_IPV4_ADDR="192.168.1.1" # choose RTT console or UART console CONFIG_SERIAL=y CONFIG_UART_CONSOLE=y CONFIG_CONSOLE=y CONFIG_USE_SEGGER_RTT=n CONFIG_RTT_CONSOLE=n # General config CONFIG_LOG=y CONFIG_LOG_DEFAULT_LEVEL=3 CONFIG_NET_LOG=y
Here is the overlay
&pinctrl {
spi22_default: spi22_default {
group1 {
psels = <NRF_PSEL(SPIM_SCK, 2, 7)>,
<NRF_PSEL(SPIM_MOSI, 2, 6)>,
<NRF_PSEL(SPIM_MISO, 2, 8)>;
};
};
spi22_sleep {
group1{
psels = <NRF_PSEL(SPIM_SCK, 2, 7)>,
<NRF_PSEL(SPIM_MOSI, 2, 6)>,
<NRF_PSEL(SPIM_MISO, 2, 8)>;
low-power-enable;
};
};
};
// Enable wiznet W5500
&spi22 {
compatible = "nordic,nrf-spim";
status = "okay";
pinctrl-0 = <&spi22_default>;
pinctrl-1 = <&spi22_sleep>;
pinctrl-names = "default", "sleep";
cs-gpios = <&gpio2 9 GPIO_ACTIVE_LOW>;
w5500: w5500@0 {
compatible = "wiznet,w5500";
label = "w5500";
reg = <0>;
spi-max-frequency = <8000000>;
reset-gpios = <&gpio2 10 GPIO_ACTIVE_LOW>;
int-gpios = <&gpio2 3 GPIO_ACTIVE_LOW>;
status = "okay";
};
};
// Enable UART for console output
&uart20 {
status = "okay";
};
// Disable unused LEDS
&led0 {
status = "disabled";
};
&led2 {
status = "disabled";
};main.c
/*
* W5500 SPI communication test
* Using SPI22 on GPIO port 2
*/
#include <zephyr/kernel.h>
#include <zephyr/sys/printk.h>
#include <zephyr/device.h>
#include <zephyr/drivers/spi.h>
#include <zephyr/drivers/gpio.h>
// W5500 Regiser Addresses
#define W5500_VERSIONR 0x04
#define W5500_COMMON_REG_BLOCK 0x00
// Get W5500 SPI configuration from devicetree
#define W5500_NODE DT_NODELABEL(w5500)
#define SPI_NODE DT_BUS(W5500_NODE)
static const struct device *spi_dev = DEVICE_DT_GET(SPI_NODE);
// SPI config with cs from devicetree
static struct spi_cs_control cs_ctrl = SPI_CS_CONTROL_INIT(W5500_NODE, 2);
static struct spi_config spi_cfg = {
.frequency = 8000000, // 8 MHz
.operation = SPI_WORD_SET(8) | SPI_TRANSFER_MSB, // Mode 0
.cs = {
.gpio = SPI_CS_GPIOS_DT_SPEC_GET(W5500_NODE),
.delay = 2,
},
};
// Reset GPIO
#if DT_NODE_HAS_PROP(W5500_NODE, reset_gpios)
static const struct gpio_dt_spec reset_gpio = GPIO_DT_SPEC_GET(W5500_NODE, reset_gpios);
#define HAS_RESET_GPIO 1
#else
#define HAS_RESET_GPIO 0
#endif
static void reset_w5500(void)
{
#if HAS_RESET_GPIO
printk("Restting W5500 \n");
gpio_pin_set_dt(&reset_gpio, 1); // Assert reset
k_msleep(10);
gpio_pin_set_dt(&reset_gpio, 0); // Release reset
k_msleep(100);
printk("Reset complete \n");
#else
printk("No rest GPIO configured \n");
#endif
}
int main(void)
{
int ret;
uint8_t version;
printk("\n\n");
printk("========================================\n");
printk(" W5500 SPI test \n");
printk("========================================\n\n");
// Check SPI device
if (!device_is_ready(spi_dev)) {
printk("ERROR: SPI device not ready!\n");
return -1;
}
printk("SPI device ready! \n");
// Check CS GPIO form spi_cfg
if (!gpio_is_ready_dt(&spi_cfg.cs.gpio)) {
printk("ERROR: CS GPIO not ready!\n");
return -1;
}
printk("CS GPIO ready \n");
#if HAS_RESET_GPIO
if(!gpio_is_ready_dt(&reset_gpio)) {
printk("ERROR: Reset GPIO not ready! \n");
return -1;
}
ret = gpio_pin_configure_dt(&reset_gpio, GPIO_OUTPUT_INACTIVE);
if(ret<0) {
printk("ERROR: Failed to configure Reset: %d \n", ret);
return -1;
}
printk("Reset GPIO configured \n");
#endif
reset_w5500();
return 0;
}Currently just trying to make the warning go away but also wondering why I can't ping the device.