Skip to content

Commit 7b14a58

Browse files
authored
Add support for more ESP32 ethernet boards (#2365)
1 parent b0235cd commit 7b14a58

21 files changed

+422
-139
lines changed

.vscode/cmake-variants.TEMPLATE.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,10 @@
7070
"ETH_PHY_ADDR": "<Address-of-the-PHY-chip-leave-empty-to-use-default>",
7171
"ETH_MDC_GPIO": "<GPIO-number-for-SMI-MDC-pin-leave-empty-to-use-default>",
7272
"ETH_MDIO_GPIO": "<GPIO-number-for-SMI-MDIO-pin-leave-empty-to-use-default>",
73-
"ETH_PHY_RST_GPIO": "<GPIO-number-for-PHY-reset-leave-empty-to-use-default>",
73+
"ESP32_ETHERNET_INTERFACE": "<Type-of-PHY-or-SPI-device-used-leave-empty-to-use-default-Lan8720",
74+
"ETH_PHY_RST_GPIO": "<GPIO-number-for-PHY-reset-leave-empty-to-use-default-of-none>",
7475
"ETH_RMII_CLK_OUT_GPIO": "<GPIO-number-that-will-output-the-RMII-CLK-signal-leave-empty-if-not-used>",
76+
"ETH_RMII_CLK_IN_GPIO": "<GPIO-number-that-will-be-input-for-RMII-CLK-signal-leave-empty-if-not-used>",
7577
"NF_BUILD_RTM": "OFF-default-ON-to-enable-RTM-build",
7678
"NF_TARGET_HAS_NANOBOOTER": "ON-default-OFF-to-signal-that-target-does-not-have-nanoBooter",
7779
"NF_TRACE_TO_STDIO": "OFF-default-ON-to-enable-trace-messages-to-stdio",

CMake/Modules/FindNF_Network.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,7 @@ macro(nf_add_lib_network)
517517
target_compile_definitions(
518518
${LIB_NAME} PUBLIC
519519
-DPLATFORM_ESP32
520-
${NFALN_EXTRA_COMPILER_DEFINITIONS}
520+
${NFALN_EXTRA_COMPILE_DEFINITIONS}
521521
)
522522

523523
else()

CMake/binutils.ESP32.cmake

Lines changed: 68 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,57 @@
55

66
include(binutils.common)
77

8+
# process ESP32 Ethernet options
9+
macro(nf_process_esp32_ethernet_options)
10+
11+
# need to process this?
12+
if(ESP32_ETHERNET_SUPPORT)
13+
14+
if(NOT ESP32_ETHERNET_INTERFACE)
15+
# default to LAN8720
16+
set(ESP32_ETHERNET_INTERFACE "LAN8720" CACHE INTERNAL "Defaulting LAN8720")
17+
18+
message(STATUS "\n\n*** No Ethernet interface defined. Defaulting to LAN8720. ***\n\n")
19+
endif()
20+
21+
# list of supported PHYs
22+
set(ESP32_SUPPORTED_PHY "LAN8720" "IP101" "RTL8201" "DP83848" "KSZ8041" CACHE INTERNAL "supported ESP32 PHYs")
23+
# list of supported ETH SPI PHYs
24+
# ENJ28J60 currently not supported, driver in IDF examples (TODO)
25+
set(ESP32_SUPPORTED_ETH_SPI "W5500" "DM9051" "ENJ28J60" CACHE INTERNAL "supported ESP32 ETH SPIs")
26+
27+
list(FIND ESP32_SUPPORTED_PHY ${ESP32_ETHERNET_INTERFACE} ESP32_PHY_INDEX)
28+
29+
if(ESP32_PHY_INDEX EQUAL -1)
30+
31+
# can't find this under supported PHYs
32+
33+
# try with SPIs
34+
list(FIND ESP32_SUPPORTED_ETH_SPI ${ESP32_ETHERNET_INTERFACE} ESP32_ETH_SPI_INDEX)
35+
36+
if(ESP32_ETH_SPI_INDEX EQUAL -1)
37+
# can't find it under SPIs either
38+
message(FATAL_ERROR "\n\nSomething wrong happening: can't find support for Ethernet interface ${ESP32_ETHERNET_INTERFACE}!\n\n")
39+
else()
40+
# store SPI option
41+
set(ESP32_ETHERNET_SPI_OPTION TRUE CACHE INTERNAL "Set ESP32_ETHERNET_SPI option")
42+
set(ESP32_ETHERNET_INTERNAL_OPTION FALSE CACHE INTERNAL "Set ESP32_ETHERNET_INTERNAL option")
43+
# set define with SPI module
44+
set(ESP32_ETHERNET_DEFINES -DESP32_ETHERNET_SPI_MODULE_${ESP32_ETHERNET_INTERFACE} CACHE INTERNAL "define for Ethernet SPI module option")
45+
endif()
46+
47+
else()
48+
# store PHY option
49+
set(ESP32_ETHERNET_INTERNAL_OPTION TRUE CACHE INTERNAL "Set ESP32_ETHERNET_INTERNAL option")
50+
set(ESP32_ETHERNET_SPI_OPTION FALSE CACHE INTERNAL "Set ESP32_ETHERNET_SPI option")
51+
# set define with PHY name
52+
set(ESP32_ETHERNET_DEFINES -DESP32_ETHERNET_PHY_${ESP32_ETHERNET_INTERFACE} CACHE INTERNAL "define for Ethernet PHY interface option")
53+
endif()
54+
55+
endif()
56+
57+
endmacro()
58+
859
# find a set of files on a list of possible locations
960
macro(nf_find_esp32_files_at_location files locations)
1061

@@ -165,6 +216,8 @@ macro(nf_add_platform_dependencies target)
165216
nf_add_lib_network(
166217
BUILD_TARGET
167218
${target}
219+
EXTRA_COMPILE_DEFINITIONS
220+
${ESP32_ETHERNET_DEFINES}
168221
EXTRA_SOURCES
169222
${TARGET_ESP32_IDF_NETWORK_SOURCES}
170223
EXTRA_INCLUDES
@@ -470,6 +523,11 @@ macro(nf_add_idf_as_library)
470523

471524
message(STATUS "\n-- SDK CONFIG is: '${SDKCONFIG_DEFAULTS_FILE}'.")
472525

526+
# Save original contents to be restored later
527+
file(READ
528+
"${SDKCONFIG_DEFAULTS_FILE}"
529+
SDKCONFIG_ORIGINAL_CONTENTS)
530+
473531
# set list with the IDF components to add
474532
# need to match the list below with the respective libraries
475533
set(IDF_COMPONENTS_TO_ADD
@@ -498,40 +556,6 @@ macro(nf_add_idf_as_library)
498556
if(ESP32_ETHERNET_SUPPORT)
499557
list(APPEND IDF_COMPONENTS_TO_ADD esp_eth)
500558
list(APPEND IDF_LIBRARIES_TO_ADD idf::esp_eth)
501-
502-
# check for ETH_RMII_CLK_OUT_GPIO in the build options
503-
if(ETH_RMII_CLK_OUT_GPIO)
504-
505-
message(STATUS "\nETH_RMII_CLK_OUT_GPIO specified. Updating SDK CONFIG to enable CLK output on GPIO${ETH_RMII_CLK_OUT_GPIO}.\n")
506-
507-
# need to read the supplied SDK CONFIG file and replace the appropriate options
508-
file(READ
509-
"${SDKCONFIG_DEFAULTS_FILE}"
510-
SDKCONFIG_DEFAULT_CONTENTS)
511-
512-
string(REPLACE
513-
"#CONFIG_ETH_RMII_CLK_OUTPUT=y"
514-
"CONFIG_ETH_RMII_CLK_OUTPUT=y"
515-
SDKCONFIG_DEFAULT_NEW_CONTENTS
516-
"${SDKCONFIG_DEFAULT_CONTENTS}")
517-
518-
string(REPLACE
519-
"#CONFIG_ETH_RMII_CLK_OUT_GPIO=n"
520-
"CONFIG_ETH_RMII_CLK_OUT_GPIO=${ETH_RMII_CLK_OUT_GPIO}"
521-
SDKCONFIG_DEFAULT_FINAL_CONTENTS
522-
"${SDKCONFIG_DEFAULT_NEW_CONTENTS}")
523-
524-
# need to temporarilly allow changes in source files
525-
set(CMAKE_DISABLE_SOURCE_CHANGES OFF)
526-
527-
file(WRITE
528-
${SDKCONFIG_DEFAULTS_FILE}
529-
${SDKCONFIG_DEFAULT_FINAL_CONTENTS})
530-
531-
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
532-
533-
endif()
534-
535559
endif()
536560

537561
# handle specifics for ESP32S2 series
@@ -640,8 +664,17 @@ macro(nf_add_idf_as_library)
640664
PROJECT_VER ${BUILD_VERSION}
641665
)
642666

667+
#Restore original sdkconfig back to defaults
668+
set(CMAKE_DISABLE_SOURCE_CHANGES OFF)
669+
670+
file(WRITE
671+
${SDKCONFIG_DEFAULTS_FILE}
672+
${SDKCONFIG_ORIGINAL_CONTENTS})
673+
674+
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
675+
643676
if(USE_NETWORKING_OPTION)
644-
677+
645678
FetchContent_GetProperties(esp32_idf)
646679

647680
# get list of source files for lwIP

CMakePresets.json

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,7 @@
547547
"NF_FEATURE_RTC": "ON",
548548
"NF_FEATURE_HAS_SDCARD": "ON",
549549
"ESP32_ETHERNET_SUPPORT": "ON",
550+
"ETH_PHY_RST_GPIO": "5",
550551
"ETH_RMII_CLK_OUT_GPIO": "17",
551552
"API_System.IO.FileSystem": "ON",
552553
"API_nanoFramework.Device.OneWire": "ON"
@@ -618,6 +619,72 @@
618619
"TOUCHPANEL_INTERFACE": "Spi_To_TouchPanel.cpp"
619620
}
620621
},
622+
{
623+
"name": "ESP32_ETHERNET_KIT_1.2_preset",
624+
"inherits": [
625+
"general-preset",
626+
"xtensa-esp32-preset"
627+
],
628+
"hidden": true,
629+
"cacheVariables": {
630+
"SDK_CONFIG_FILE": "sdkconfig.default_ble_rev3.esp32",
631+
"NF_BUILD_RTM": "OFF",
632+
"NF_FEATURE_DEBUGGER": "ON",
633+
"NF_FEATURE_RTC": "ON",
634+
"NF_FEATURE_HAS_SDCARD": "ON",
635+
"ESP32_ETHERNET_SUPPORT": "ON",
636+
"ESP32_ETHERNET_INTERFACE": "IP101",
637+
"ETH_PHY_RST_GPIO": "5",
638+
"ETH_RMII_CLK_IN_GPIO" : "0",
639+
"ETH_PHY_ADDR": "1",
640+
"API_System.IO.FileSystem": "ON",
641+
"API_nanoFramework.Device.OneWire": "ON",
642+
"API_nanoFramework.Device.Bluetooth": "ON"
643+
}
644+
},
645+
{
646+
"name": "ESP32_WT32_ETH01_preset",
647+
"inherits": [
648+
"general-preset",
649+
"xtensa-esp32-preset"
650+
],
651+
"hidden": true,
652+
"cacheVariables": {
653+
"SDK_CONFIG_FILE": "sdkconfig.default_nopsram.esp32",
654+
"NF_BUILD_RTM": "OFF",
655+
"NF_FEATURE_DEBUGGER": "ON",
656+
"NF_FEATURE_RTC": "ON",
657+
"NF_FEATURE_HAS_SDCARD": "ON",
658+
"ESP32_ETHERNET_SUPPORT": "ON",
659+
"ETH_RMII_CLK_IN_GPIO" : "0",
660+
"ETH_PHY_ADDR":"1",
661+
"ETH_PHY_RST_GPIO": "16",
662+
"API_System.IO.FileSystem": "ON",
663+
"API_nanoFramework.Device.OneWire": "ON"
664+
}
665+
},
666+
{
667+
"name": "ESP32_WESP32_preset",
668+
"inherits": [
669+
"general-preset",
670+
"xtensa-esp32-preset"
671+
],
672+
"hidden": true,
673+
"cacheVariables": {
674+
"SDK_CONFIG_FILE": "",
675+
"NF_BUILD_RTM": "OFF",
676+
"NF_FEATURE_DEBUGGER": "ON",
677+
"NF_FEATURE_RTC": "ON",
678+
"NF_FEATURE_HAS_SDCARD": "ON",
679+
"ESP32_ETHERNET_SUPPORT": "ON",
680+
"ESP32_ETHERNET_INTERFACE": "RTL8201",
681+
"ETH_RMII_CLK_IN_GPIO" : "0",
682+
"ETH_MDIO_GPIO":"17",
683+
"ETH_MDC_GPIO": "16",
684+
"API_System.IO.FileSystem": "ON",
685+
"API_nanoFramework.Device.OneWire": "ON"
686+
}
687+
},
621688
{
622689
"name": "M5StickC_preset",
623690
"inherits": [

CMakeUserPresets.TEMPLATE.json

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,20 @@
294294
"NF_INTEROP_ASSEMBLIES": null
295295
}
296296
},
297+
{
298+
"name": "ESP32_LILYGO_BLE",
299+
"inherits": [
300+
"user-local-tools",
301+
"user-prefs",
302+
"ESP32_LILYGO_preset"
303+
],
304+
"cacheVariables": {
305+
"TARGET_NAME": "${presetName}",
306+
"NF_INTEROP_ASSEMBLIES": null,
307+
"SDK_CONFIG_FILE": "sdkconfig.default_nopsram_ble.esp32",
308+
"API_nanoFramework.Device.Bluetooth": "ON"
309+
}
310+
},
297311
{
298312
"name": "ESP32_OLIMEX",
299313
"inherits": [
@@ -306,6 +320,84 @@
306320
"NF_INTEROP_ASSEMBLIES": null
307321
}
308322
},
323+
{
324+
"name": "ESP32_OLIMEX_BLE",
325+
"inherits": [
326+
"user-local-tools",
327+
"user-prefs",
328+
"ESP32_OLIMEX_preset"
329+
],
330+
"cacheVariables": {
331+
"TARGET_NAME": "${presetName}",
332+
"NF_INTEROP_ASSEMBLIES": null,
333+
"SDK_CONFIG_FILE": "sdkconfig.default_nopsram_ble.esp32",
334+
"API_nanoFramework.Device.Bluetooth": "ON"
335+
}
336+
},
337+
{
338+
"name": "ESP32_ETHERNET_KIT_1.2",
339+
"inherits": [
340+
"user-local-tools",
341+
"user-prefs",
342+
"ESP32_ETHERNET_KIT_1.2_preset"
343+
],
344+
"cacheVariables": {
345+
"TARGET_NAME": "${presetName}",
346+
"NF_INTEROP_ASSEMBLIES": null
347+
}
348+
},
349+
{
350+
"name": "ESP32_WT32_ETH01",
351+
"inherits": [
352+
"user-local-tools",
353+
"user-prefs",
354+
"ESP32_WT32_ETH01_preset"
355+
],
356+
"cacheVariables": {
357+
"TARGET_NAME": "${presetName}",
358+
"NF_INTEROP_ASSEMBLIES": null
359+
}
360+
},
361+
{
362+
"name": "ESP32_WT32_ETH01_BLE",
363+
"inherits": [
364+
"user-local-tools",
365+
"user-prefs",
366+
"ESP32_WT32_ETH01_preset"
367+
],
368+
"cacheVariables": {
369+
"TARGET_NAME": "${presetName}",
370+
"NF_INTEROP_ASSEMBLIES": null,
371+
"SDK_CONFIG_FILE": "sdkconfig.default_nopsram_ble.esp32",
372+
"API_nanoFramework.Device.Bluetooth": "ON"
373+
}
374+
},
375+
{
376+
"name": "ESP32_WESP32",
377+
"inherits": [
378+
"user-local-tools",
379+
"user-prefs",
380+
"ESP32_WESP32_preset"
381+
],
382+
"cacheVariables": {
383+
"TARGET_NAME": "${presetName}",
384+
"NF_INTEROP_ASSEMBLIES": null
385+
}
386+
},
387+
{
388+
"name": "ESP32_WESP32_BLE",
389+
"inherits": [
390+
"user-local-tools",
391+
"user-prefs",
392+
"ESP32_WESP32_preset"
393+
],
394+
"cacheVariables": {
395+
"TARGET_NAME": "${presetName}",
396+
"NF_INTEROP_ASSEMBLIES": null,
397+
"SDK_CONFIG_FILE": "sdkconfig.default_nopsram_ble.esp32",
398+
"API_nanoFramework.Device.Bluetooth": "ON"
399+
}
400+
},
309401
{
310402
"name": "LilygoTWatch2020",
311403
"inherits": [
@@ -700,11 +792,46 @@
700792
"displayName": "ESP32_LILYGO",
701793
"configurePreset": "ESP32_LILYGO"
702794
},
795+
{
796+
"name": "ESP32_LILYGO_BLE",
797+
"displayName": "ESP32_LILYGO_BLE",
798+
"configurePreset": "ESP32_LILYGO_BLE"
799+
},
703800
{
704801
"name": "ESP32_OLIMEX",
705802
"displayName": "ESP32_OLIMEX",
706803
"configurePreset": "ESP32_OLIMEX"
707804
},
805+
{
806+
"name": "ESP32_OLIMEX_BLE",
807+
"displayName": "ESP32_OLIMEX_BLE",
808+
"configurePreset": "ESP32_OLIMEX_BLE"
809+
},
810+
{
811+
"name": "ESP32_ETHERNET_KIT_1.2",
812+
"displayName": "ESP32_ETHERNET_KIT_1.2",
813+
"configurePreset": "ESP32_ETHERNET_KIT_1.2"
814+
},
815+
{
816+
"name": "ESP32_WT32_ETH01",
817+
"displayName": "ESP32_WT32_ETH01",
818+
"configurePreset": "ESP32_WT32_ETH01"
819+
},
820+
{
821+
"name": "ESP32_WT32_ETH01_BLE",
822+
"displayName": "ESP32_WT32_ETH01_BLE",
823+
"configurePreset": "ESP32_WT32_ETH01_BLE"
824+
},
825+
{
826+
"name": "ESP32_WESP32",
827+
"displayName": "ESP32_WESP32",
828+
"configurePreset": "ESP32_WESP32"
829+
},
830+
{
831+
"name": "ESP32_WESP32_BLE",
832+
"displayName": "ESP32_WESP32_BLE",
833+
"configurePreset": "ESP32_WESP32_BLE"
834+
},
708835
{
709836
"name": "LilygoTWatch2020",
710837
"displayName": "LilygoTWatch2020",

0 commit comments

Comments
 (0)