mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-08 04:27:12 +03:00
add SPI ethernet
This commit is contained in:
@@ -295,6 +295,94 @@ static void eth_event_handler(void *arg, esp_event_base_t event_base,
|
||||
}
|
||||
}
|
||||
|
||||
static void eth_init(void) {
|
||||
esp_eth_mac_t *mac;
|
||||
esp_eth_phy_t *phy;
|
||||
esp_err_t err = ESP_OK;
|
||||
eth_config_t const *eth = config_eth_get( );
|
||||
|
||||
// quick check if we have a valid ethernet configuration
|
||||
if ((eth->mdc == -1 && eth->mosi == -1) || !*eth->model) {
|
||||
ESP_LOGI(TAG, "No ethernet");
|
||||
return;
|
||||
}
|
||||
|
||||
tcpip_adapter_set_default_eth_handlers();
|
||||
esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, ð_event_handler, NULL);
|
||||
|
||||
eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
|
||||
eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
|
||||
phy_config.phy_addr = 1;
|
||||
phy_config.reset_gpio_num = eth->rst;
|
||||
|
||||
if (eth->rmii) {
|
||||
#ifdef CONFIG_ETH_USE_ESP32_EMAC
|
||||
mac_config.smi_mdc_gpio_num = eth->mdc;
|
||||
mac_config.smi_mdio_gpio_num = eth->mdio;
|
||||
mac = esp_eth_mac_new_esp32(&mac_config);
|
||||
phy = esp_eth_phy_new_lan8720(&phy_config);
|
||||
ESP_LOGI(TAG, "Adding ethernet RMII with mdc %d and mdio %d", eth->mdc, eth->mdio);
|
||||
#else
|
||||
ESP_LOGE(TAG, "Ethernet RMII set but not included in compilation");
|
||||
return;
|
||||
#endif
|
||||
} else {
|
||||
#ifdef CONFIG_ETH_SPI_ETHERNET_DM9051
|
||||
spi_device_handle_t spi_handle = NULL;
|
||||
spi_host_device_t host = SPI3_HOST;
|
||||
|
||||
if (eth->host != -1) {
|
||||
// don't use system's shared SPI
|
||||
spi_bus_config_t buscfg = {
|
||||
.miso_io_num = eth->miso,
|
||||
.mosi_io_num = eth->mosi,
|
||||
.sclk_io_num = eth->clk,
|
||||
.quadwp_io_num = -1,
|
||||
.quadhd_io_num = -1,
|
||||
};
|
||||
|
||||
// can't use SPI0
|
||||
if (eth->host == 1) host = SPI2_HOST;
|
||||
err |= spi_bus_initialize(host, &buscfg, 1);
|
||||
} else {
|
||||
// when we use shared SPI, we assume it has been initialized
|
||||
host = spi_system_host;
|
||||
}
|
||||
|
||||
spi_device_interface_config_t devcfg = {
|
||||
.command_bits = 1,
|
||||
.address_bits = 7,
|
||||
.mode = 0,
|
||||
.clock_speed_hz = eth->speed,
|
||||
.spics_io_num = eth->cs,
|
||||
.queue_size = 20
|
||||
};
|
||||
|
||||
err |= spi_bus_add_device(host, &devcfg, &spi_handle);
|
||||
|
||||
// dm9051 ethernet driver is based on spi driver
|
||||
eth_dm9051_config_t dm9051_config = ETH_DM9051_DEFAULT_CONFIG(spi_handle);
|
||||
// we assume that isr has been installed already
|
||||
dm9051_config.int_gpio_num = eth->intr;
|
||||
mac = esp_eth_mac_new_dm9051(&dm9051_config, &mac_config);
|
||||
phy = esp_eth_phy_new_dm9051(&phy_config);
|
||||
ESP_LOGI(TAG, "Adding ethernet SPI on host %d with mosi %d and miso %d", host, eth->mosi, eth->miso);
|
||||
#else
|
||||
ESP_LOGE(TAG, "Ethernet SPI set but not included in compilation");
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
|
||||
esp_eth_handle_t eth_handle = NULL;
|
||||
err |= esp_eth_driver_install(&config, ð_handle);
|
||||
err |= esp_eth_start(eth_handle);
|
||||
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Can't install Ethernet driver %d", err);
|
||||
}
|
||||
}
|
||||
|
||||
void wifi_manager_init_wifi(){
|
||||
/* event handler and event group for the wifi driver */
|
||||
ESP_LOGD(TAG, "Initializing wifi. Creating event group");
|
||||
@@ -317,31 +405,7 @@ void wifi_manager_init_wifi(){
|
||||
ESP_LOGD(TAG, "Initializing wifi. Starting wifi");
|
||||
ESP_ERROR_CHECK( esp_wifi_start() );
|
||||
|
||||
//ETH
|
||||
|
||||
eth_config_t const *eth = config_eth_get( );
|
||||
ESP_LOGE(TAG, "ETH MDC %d", eth->mdc);
|
||||
ESP_LOGE(TAG, "ETH MDIO %d", eth->mdio);
|
||||
ESP_LOGE(TAG, "ETH RST %d", eth->rst);
|
||||
|
||||
ESP_ERROR_CHECK(tcpip_adapter_set_default_eth_handlers());
|
||||
ESP_ERROR_CHECK(esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, ð_event_handler, NULL));
|
||||
|
||||
eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
|
||||
eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
|
||||
phy_config.phy_addr = 1;
|
||||
phy_config.reset_gpio_num = eth->rst;
|
||||
|
||||
mac_config.smi_mdc_gpio_num = eth->mdc;
|
||||
mac_config.smi_mdio_gpio_num = eth->mdio;
|
||||
esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&mac_config);
|
||||
esp_eth_phy_t *phy = esp_eth_phy_new_lan8720(&phy_config);
|
||||
|
||||
esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
|
||||
esp_eth_handle_t eth_handle = NULL;
|
||||
ESP_ERROR_CHECK(esp_eth_driver_install(&config, ð_handle));
|
||||
ESP_ERROR_CHECK(esp_eth_start(eth_handle));
|
||||
//END_ETH
|
||||
eth_init();
|
||||
|
||||
taskYIELD();
|
||||
ESP_LOGD(TAG, "Initializing wifi. done");
|
||||
|
||||
Reference in New Issue
Block a user