-
Notifications
You must be signed in to change notification settings - Fork 248
Description
Build environment: Windows 11
Moddable SDK version: 5.8.0
Target device: Custom ESP32-S3 device with WizNet 5500 Ethernet MAC/PHY
Description
Changes to better support ESP32-S3 and Wiznet 5500 Ethernet chips.
In "modules\network\ethernet\esp32\ethernet.c", at multiple places, it sets the SPI command bits to 3 and address_bits to 5. The Wiznet 5500 requires command bits set to 0 and address_bits set to 16, and other Ethernet SPI chips may require different settings. I would recommend adding a MODDEF to the Ethernet settings to allow these values to be overridden as needed. (needs to be done in 3 places)
#ifdef MODDEF_ETHERNET_SPI_COMMAND_BITS
.command_bits = MODDEF_ETHERNET_SPI_COMMAND_BITS,
#else
.command_bits = 3, // requires a related change to pins/spi
#endif
#ifdef MODDEF_ETHERNET_SPI_ADDRESS_BITS
.address_bits = MODDEF_ETHERNET_SPI_ADDRESS_BITS,
#else
.address_bits = 5,
#endif
In init_spi() when it calls spi_bus_initialize, it sets the DMA channel to 1. This doesn't work on devices like the ESP32-S3, which use SPI DMA channel 1 for the internal Flash and PSRAM; therefore, the user must use DMA channel; 2. A better choice to to allow specifying the DMA channel in the manifest. The value of 3 specifies AUTO SPI_DMA_Channel, that works for all chips except the original ESP32 WROOM chips.
ESP_ERROR_CHECK(spi_bus_initialize(MODDEF_ETHERNET_SPI_PORT, &buscfg, MODDEF_ETHERNET_SPI_DMA_CH));
The SPI_PORT should be a MODDEF variable to allow configuring the appropriate one for the target. The default is HSPI_HOST or VSPI_HOST, and our device uses SPI2_HOST
The Ethernet manifest.json to support this:
"ethernet": {
"hz": 16000000,
"int_pin": 14,
"power_pin": 8,
"hostname":"\"Edgetech01\"",
"spi": {
"command_bits": 16,
"address_bits": 8,
"cs_pin": 10,
"port": "SPI2_HOST",
"miso_pin": 13,
"mosi_pin": 11,
"sck_pin": 12,
"polling_ms": 0,
"dma_ch": 3;
}
}
These changes will allow a target device to use Ethernet with the standard Moddable distribution.
To include the Espressif built in Ethernet components I need to add esp_eth esp_netif libraries. These are not in the Espressif Component Registry so the dependency settings cannot be used. I had to modify moddable\build\devices\esp32\xsProj-esp32s3\main\CMakeLists.txt add_prebuilt_library to include these libraries. I don't know a way to add them to our custom target.
add_prebuilt_library(xsesp32 ${CMAKE_BINARY_DIR}/xs_${ESP32_SUBCLASS}.a
REQUIRES esp_timer esp_wifi spi_flash bt esp_lcd nvs_flash spiffs esp_driver_gpio esp_driver_spi esp_eth esp_netif log ${ESP_COMPONENTS}
)