mirror of
https://github.com/licsber/micropython.git
synced 2024-09-20 00:50:24 +08:00
esp32/network_lan: Fix and simplify the code for ETH-SPI devices.
SPI support was not enabled, and was not adapted for esp-idf v5.x. This change enables SPI ethernet for all boards and adapts the code for esp-idf v5.x. The change follows the sample implementation of @hemakumarm72, but adds the changes for the other adapters as well. Further, it simplifies the code by removing actions from netwwork_lan.c which are done in the esp-idf drivers later, like setting the default values for .command_bits and .address_bits, and registering the SPI interface. Tested with a Wiznet W5500 breakout. Signed-off-by: robert-hh <robert@hammelrath.com>
This commit is contained in:
parent
b2f220dff8
commit
c4e63ace66
@ -91,3 +91,8 @@ CONFIG_UART_ISR_IN_IRAM=y
|
||||
CONFIG_ADC_SUPPRESS_DEPRECATE_WARN=y
|
||||
CONFIG_RMT_SUPPRESS_DEPRECATE_WARN=y
|
||||
CONFIG_I2S_SUPPRESS_DEPRECATE_WARN=y
|
||||
|
||||
CONFIG_ETH_USE_SPI_ETHERNET=y
|
||||
CONFIG_ETH_SPI_ETHERNET_W5500=y
|
||||
CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL=y
|
||||
CONFIG_ETH_SPI_ETHERNET_DM9051=y
|
||||
|
@ -180,37 +180,15 @@ STATIC mp_obj_t get_lan(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_ar
|
||||
phy_config.phy_addr = self->phy_addr;
|
||||
phy_config.reset_gpio_num = self->phy_power_pin;
|
||||
self->phy = NULL;
|
||||
|
||||
#if CONFIG_ETH_USE_SPI_ETHERNET
|
||||
spi_device_handle_t spi_handle = NULL;
|
||||
if (IS_SPI_PHY(args[ARG_phy_type].u_int)) {
|
||||
spi_device_interface_config_t devcfg = {
|
||||
.mode = 0,
|
||||
.clock_speed_hz = MICROPY_PY_NETWORK_LAN_SPI_CLOCK_SPEED_MZ * 1000 * 1000,
|
||||
.queue_size = 20,
|
||||
.spics_io_num = self->phy_cs_pin,
|
||||
};
|
||||
switch (args[ARG_phy_type].u_int) {
|
||||
#if CONFIG_ETH_SPI_ETHERNET_DM9051
|
||||
case PHY_DM9051: {
|
||||
devcfg.command_bits = 1;
|
||||
devcfg.address_bits = 7;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#if CONFIG_ETH_SPI_ETHERNET_W5500
|
||||
case PHY_W5500: {
|
||||
devcfg.command_bits = 16;
|
||||
devcfg.address_bits = 8;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
spi_host_device_t host = machine_hw_spi_get_host(args[ARG_spi].u_obj);
|
||||
if (spi_bus_add_device(host, &devcfg, &spi_handle) != ESP_OK) {
|
||||
mp_raise_msg(&mp_type_OSError, MP_ERROR_TEXT("spi_bus_add_device failed"));
|
||||
}
|
||||
}
|
||||
spi_device_interface_config_t devcfg = {
|
||||
.mode = 0,
|
||||
.clock_speed_hz = MICROPY_PY_NETWORK_LAN_SPI_CLOCK_SPEED_MZ * 1000 * 1000,
|
||||
.queue_size = 20,
|
||||
.spics_io_num = self->phy_cs_pin,
|
||||
.command_bits = 0, // Can both be set to 0, as the respective
|
||||
.address_bits = 0, // driver fills in proper default values.
|
||||
};
|
||||
#endif
|
||||
|
||||
switch (args[ARG_phy_type].u_int) {
|
||||
@ -236,7 +214,8 @@ STATIC mp_obj_t get_lan(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_ar
|
||||
#if CONFIG_ETH_USE_SPI_ETHERNET
|
||||
#if CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL
|
||||
case PHY_KSZ8851SNL: {
|
||||
eth_ksz8851snl_config_t chip_config = ETH_KSZ8851SNL_DEFAULT_CONFIG(spi_handle);
|
||||
spi_host_device_t host = machine_hw_spi_get_host(args[ARG_spi].u_obj);
|
||||
eth_ksz8851snl_config_t chip_config = ETH_KSZ8851SNL_DEFAULT_CONFIG(host, &devcfg);
|
||||
chip_config.int_gpio_num = self->phy_int_pin;
|
||||
mac = esp_eth_mac_new_ksz8851snl(&chip_config, &mac_config);
|
||||
self->phy = esp_eth_phy_new_ksz8851snl(&phy_config);
|
||||
@ -245,7 +224,8 @@ STATIC mp_obj_t get_lan(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_ar
|
||||
#endif
|
||||
#if CONFIG_ETH_SPI_ETHERNET_DM9051
|
||||
case PHY_DM9051: {
|
||||
eth_dm9051_config_t chip_config = ETH_DM9051_DEFAULT_CONFIG(spi_handle);
|
||||
spi_host_device_t host = machine_hw_spi_get_host(args[ARG_spi].u_obj);
|
||||
eth_dm9051_config_t chip_config = ETH_DM9051_DEFAULT_CONFIG(host, &devcfg);
|
||||
chip_config.int_gpio_num = self->phy_int_pin;
|
||||
mac = esp_eth_mac_new_dm9051(&chip_config, &mac_config);
|
||||
self->phy = esp_eth_phy_new_dm9051(&phy_config);
|
||||
@ -254,7 +234,8 @@ STATIC mp_obj_t get_lan(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_ar
|
||||
#endif
|
||||
#if CONFIG_ETH_SPI_ETHERNET_W5500
|
||||
case PHY_W5500: {
|
||||
eth_w5500_config_t chip_config = ETH_W5500_DEFAULT_CONFIG(spi_handle);
|
||||
spi_host_device_t host = machine_hw_spi_get_host(args[ARG_spi].u_obj);
|
||||
eth_w5500_config_t chip_config = ETH_W5500_DEFAULT_CONFIG(host, &devcfg);
|
||||
chip_config.int_gpio_num = self->phy_int_pin;
|
||||
mac = esp_eth_mac_new_w5500(&chip_config, &mac_config);
|
||||
self->phy = esp_eth_phy_new_w5500(&phy_config);
|
||||
|
Loading…
Reference in New Issue
Block a user