mirror of
https://github.com/espressif/esp-protocols.git
synced 2025-07-23 15:27:28 +02:00
ethernet: support dm9051
1. move resource allocation from xxx_init to xxx_new 2. fix enabling tx checksum insertion by mistake 3. iperf example: enlarge max arguments 4. add examples for spi-ethernet Closes https://github.com/espressif/esp-idf/issues/3715 Closes https://github.com/espressif/esp-idf/issues/3711 * Original commit: espressif/esp-idf@cb42c29252
This commit is contained in:
committed by
suren-gabrielyan-espressif
parent
680bad646f
commit
ed71a239a8
@ -1,5 +1,4 @@
|
|||||||
menu "Example Connection Configuration"
|
menu "Example Connection Configuration"
|
||||||
|
|
||||||
choice EXAMPLE_CONNECT_INTERFACE
|
choice EXAMPLE_CONNECT_INTERFACE
|
||||||
prompt "Connect using"
|
prompt "Connect using"
|
||||||
default EXAMPLE_CONNECT_WIFI
|
default EXAMPLE_CONNECT_WIFI
|
||||||
@ -15,53 +14,120 @@ menu "Example Connection Configuration"
|
|||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
config EXAMPLE_WIFI_SSID
|
if EXAMPLE_CONNECT_WIFI
|
||||||
depends on EXAMPLE_CONNECT_WIFI
|
config EXAMPLE_WIFI_SSID
|
||||||
string "WiFi SSID"
|
string "WiFi SSID"
|
||||||
default "myssid"
|
default "myssid"
|
||||||
help
|
|
||||||
SSID (network name) for the example to connect to.
|
|
||||||
|
|
||||||
config EXAMPLE_WIFI_PASSWORD
|
|
||||||
depends on EXAMPLE_CONNECT_WIFI
|
|
||||||
string "WiFi Password"
|
|
||||||
default "mypassword"
|
|
||||||
help
|
|
||||||
WiFi password (WPA or WPA2) for the example to use.
|
|
||||||
Can be left blank if the network has no security set.
|
|
||||||
|
|
||||||
choice EXAMPLE_ETH_PHY_MODEL
|
|
||||||
depends on EXAMPLE_CONNECT_ETHERNET
|
|
||||||
prompt "Ethernet PHY Device"
|
|
||||||
default EXAMPLE_ETH_PHY_IP101
|
|
||||||
help
|
|
||||||
Select the PHY driver to use for the example.
|
|
||||||
|
|
||||||
config EXAMPLE_ETH_PHY_IP101
|
|
||||||
bool "IP101"
|
|
||||||
help
|
help
|
||||||
IP101 is a single port 10/100 MII/RMII/TP/Fiber Fast Ethernet Transceiver.
|
SSID (network name) for the example to connect to.
|
||||||
Goto http://www.icplus.com.tw/pp-IP101G.html for more information about it.
|
|
||||||
|
|
||||||
config EXAMPLE_ETH_PHY_RTL8201
|
config EXAMPLE_WIFI_PASSWORD
|
||||||
bool "RTL8201/SR8201"
|
string "WiFi Password"
|
||||||
|
default "mypassword"
|
||||||
help
|
help
|
||||||
RTL8201F/SR8201F is a single port 10/100Mb Ethernet Transceiver with auto MDIX.
|
WiFi password (WPA or WPA2) for the example to use.
|
||||||
Goto http://www.corechip-sz.com/productsview.asp?id=22 for more information about it.
|
Can be left blank if the network has no security set.
|
||||||
|
endif
|
||||||
|
|
||||||
config EXAMPLE_ETH_PHY_LAN8720
|
if EXAMPLE_CONNECT_ETHERNET
|
||||||
bool "LAN8720"
|
choice EXAMPLE_USE_ETHERNET
|
||||||
|
prompt "Ethernet Type"
|
||||||
|
default EXAMPLE_USE_INTERNAL_ETHERNET if IDF_TARGET_ESP32
|
||||||
|
default EXAMPLE_USE_SPI_ETHERNET if !IDF_TARGET_ESP32
|
||||||
help
|
help
|
||||||
LAN8720A is a small footprint RMII 10/100 Ethernet Transceiver with HP Auto-MDIX Support.
|
Select which kind of Ethernet will be used in the example.
|
||||||
Goto https://www.microchip.com/LAN8720A for more information about it.
|
|
||||||
|
|
||||||
config EXAMPLE_ETH_PHY_DP83848
|
config EXAMPLE_USE_INTERNAL_ETHERNET
|
||||||
bool "DP83848"
|
depends on IDF_TARGET_ESP32
|
||||||
help
|
select ETH_USE_ESP32_EMAC
|
||||||
DP83848 is a single port 10/100Mb/s Ethernet Physical Layer Transceiver.
|
bool "Internal EMAC"
|
||||||
Goto http://www.ti.com/product/DP83848J for more information about it.
|
help
|
||||||
|
Select internal Ethernet MAC controller.
|
||||||
|
|
||||||
endchoice
|
config EXAMPLE_USE_SPI_ETHERNET
|
||||||
|
bool "SPI Ethernet Module"
|
||||||
|
select ETH_USE_SPI_ETHERNET
|
||||||
|
help
|
||||||
|
Select external SPI-Ethernet module.
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
if EXAMPLE_USE_INTERNAL_ETHERNET
|
||||||
|
choice EXAMPLE_ETH_PHY_MODEL
|
||||||
|
prompt "Ethernet PHY Device"
|
||||||
|
default EXAMPLE_ETH_PHY_IP101
|
||||||
|
help
|
||||||
|
Select the Ethernet PHY device to use in the example.
|
||||||
|
|
||||||
|
config EXAMPLE_ETH_PHY_IP101
|
||||||
|
bool "IP101"
|
||||||
|
help
|
||||||
|
IP101 is a single port 10/100 MII/RMII/TP/Fiber Fast Ethernet Transceiver.
|
||||||
|
Goto http://www.icplus.com.tw/pp-IP101G.html for more information about it.
|
||||||
|
|
||||||
|
config EXAMPLE_ETH_PHY_RTL8201
|
||||||
|
bool "RTL8201/SR8201"
|
||||||
|
help
|
||||||
|
RTL8201F/SR8201F is a single port 10/100Mb Ethernet Transceiver with auto MDIX.
|
||||||
|
Goto http://www.corechip-sz.com/productsview.asp?id=22 for more information about it.
|
||||||
|
|
||||||
|
config EXAMPLE_ETH_PHY_LAN8720
|
||||||
|
bool "LAN8720"
|
||||||
|
help
|
||||||
|
LAN8720A is a small footprint RMII 10/100 Ethernet Transceiver with HP Auto-MDIX Support.
|
||||||
|
Goto https://www.microchip.com/LAN8720A for more information about it.
|
||||||
|
|
||||||
|
config EXAMPLE_ETH_PHY_DP83848
|
||||||
|
bool "DP83848"
|
||||||
|
help
|
||||||
|
DP83848 is a single port 10/100Mb/s Ethernet Physical Layer Transceiver.
|
||||||
|
Goto http://www.ti.com/product/DP83848J for more information about it.
|
||||||
|
endchoice
|
||||||
|
endif
|
||||||
|
|
||||||
|
if EXAMPLE_USE_SPI_ETHERNET
|
||||||
|
config EXAMPLE_ETH_SPI_HOST
|
||||||
|
int "SPI Host Number"
|
||||||
|
range 0 2
|
||||||
|
default 1
|
||||||
|
help
|
||||||
|
Set the SPI host used to communicate with DM9051.
|
||||||
|
|
||||||
|
config EXAMPLE_ETH_SCLK_GPIO
|
||||||
|
int "SPI SCLK GPIO number"
|
||||||
|
range 0 33
|
||||||
|
default 19
|
||||||
|
help
|
||||||
|
Set the GPIO number used by SPI SCLK.
|
||||||
|
|
||||||
|
config EXAMPLE_ETH_MOSI_GPIO
|
||||||
|
int "SPI MOSI GPIO number"
|
||||||
|
range 0 33
|
||||||
|
default 23
|
||||||
|
help
|
||||||
|
Set the GPIO number used by SPI MOSI.
|
||||||
|
|
||||||
|
config EXAMPLE_ETH_MISO_GPIO
|
||||||
|
int "SPI MISO GPIO number"
|
||||||
|
range 0 33
|
||||||
|
default 25
|
||||||
|
help
|
||||||
|
Set the GPIO number used by SPI MISO.
|
||||||
|
|
||||||
|
config EXAMPLE_ETH_CS_GPIO
|
||||||
|
int "SPI CS GPIO number"
|
||||||
|
range 0 33
|
||||||
|
default 22
|
||||||
|
help
|
||||||
|
Set the GPIO number used by SPI CS.
|
||||||
|
|
||||||
|
config EXAMPLE_ETH_SPI_CLOCK_MHZ
|
||||||
|
int "SPI clock speed (MHz)"
|
||||||
|
range 20 80
|
||||||
|
default 20
|
||||||
|
help
|
||||||
|
Set the clock speed (MHz) of SPI interface.
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
config EXAMPLE_CONNECT_IPV6
|
config EXAMPLE_CONNECT_IPV6
|
||||||
bool "Obtain IPv6 link-local address"
|
bool "Obtain IPv6 link-local address"
|
||||||
@ -69,5 +135,4 @@ menu "Example Connection Configuration"
|
|||||||
help
|
help
|
||||||
By default, examples will wait until IPv4 and IPv6 addresses are obtained.
|
By default, examples will wait until IPv4 and IPv6 addresses are obtained.
|
||||||
Disable this option if the network does not support IPv6.
|
Disable this option if the network does not support IPv6.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
@ -187,8 +187,9 @@ static void start()
|
|||||||
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_GOT_IP6, &on_got_ipv6, NULL));
|
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_GOT_IP6, &on_got_ipv6, NULL));
|
||||||
#endif
|
#endif
|
||||||
eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
|
eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
|
||||||
s_mac = esp_eth_mac_new_esp32(&mac_config);
|
|
||||||
eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
|
eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
|
||||||
|
#if CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET
|
||||||
|
s_mac = esp_eth_mac_new_esp32(&mac_config);
|
||||||
#if CONFIG_EXAMPLE_ETH_PHY_IP101
|
#if CONFIG_EXAMPLE_ETH_PHY_IP101
|
||||||
s_phy = esp_eth_phy_new_ip101(&phy_config);
|
s_phy = esp_eth_phy_new_ip101(&phy_config);
|
||||||
#elif CONFIG_EXAMPLE_ETH_PHY_RTL8201
|
#elif CONFIG_EXAMPLE_ETH_PHY_RTL8201
|
||||||
@ -197,9 +198,33 @@ static void start()
|
|||||||
s_phy = esp_eth_phy_new_lan8720(&phy_config);
|
s_phy = esp_eth_phy_new_lan8720(&phy_config);
|
||||||
#elif CONFIG_EXAMPLE_ETH_PHY_DP83848
|
#elif CONFIG_EXAMPLE_ETH_PHY_DP83848
|
||||||
s_phy = esp_eth_phy_new_dp83848(&phy_config);
|
s_phy = esp_eth_phy_new_dp83848(&phy_config);
|
||||||
|
#endif
|
||||||
|
#elif CONFIG_EXAMPLE_USE_SPI_ETHERNET
|
||||||
|
gpio_install_isr_service(0);
|
||||||
|
spi_device_handle_t spi_handle = NULL;
|
||||||
|
spi_bus_config_t buscfg = {
|
||||||
|
.miso_io_num = CONFIG_EXAMPLE_ETH_MISO_GPIO,
|
||||||
|
.mosi_io_num = CONFIG_EXAMPLE_ETH_MOSI_GPIO,
|
||||||
|
.sclk_io_num = CONFIG_EXAMPLE_ETH_SCLK_GPIO,
|
||||||
|
.quadwp_io_num = -1,
|
||||||
|
.quadhd_io_num = -1,
|
||||||
|
};
|
||||||
|
ESP_ERROR_CHECK(spi_bus_initialize(CONFIG_EXAMPLE_ETH_SPI_HOST, &buscfg, 1));
|
||||||
|
spi_device_interface_config_t devcfg = {
|
||||||
|
.command_bits = 1,
|
||||||
|
.address_bits = 7,
|
||||||
|
.mode = 0,
|
||||||
|
.clock_speed_hz = CONFIG_EXAMPLE_ETH_SPI_CLOCK_MHZ * 1000 * 1000,
|
||||||
|
.spics_io_num = CONFIG_EXAMPLE_ETH_CS_GPIO,
|
||||||
|
.queue_size = 20
|
||||||
|
};
|
||||||
|
ESP_ERROR_CHECK(spi_bus_add_device(CONFIG_EXAMPLE_ETH_SPI_HOST, &devcfg, &spi_handle));
|
||||||
|
/* dm9051 ethernet driver is based on spi driver, so need to specify the spi handle */
|
||||||
|
mac_config.spi_hdl = spi_handle;
|
||||||
|
s_mac = esp_eth_mac_new_dm9051(&mac_config);
|
||||||
|
s_phy = esp_eth_phy_new_dm9051(&phy_config);
|
||||||
#endif
|
#endif
|
||||||
esp_eth_config_t config = ETH_DEFAULT_CONFIG(s_mac, s_phy);
|
esp_eth_config_t config = ETH_DEFAULT_CONFIG(s_mac, s_phy);
|
||||||
|
|
||||||
ESP_ERROR_CHECK(esp_eth_driver_install(&config, &s_eth_handle));
|
ESP_ERROR_CHECK(esp_eth_driver_install(&config, &s_eth_handle));
|
||||||
s_connection_name = "Ethernet";
|
s_connection_name = "Ethernet";
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user