From 20032afa0d51cc3e409bc436d3802c65f5942306 Mon Sep 17 00:00:00 2001 From: Gunar Schorcht Date: Thu, 11 Aug 2022 16:34:04 +0200 Subject: [PATCH 1/4] pkg/esp32_sdk_lib_bt_esp32c3: add BLE library for ESP32-C3 --- pkg/esp32_sdk_lib_bt_esp32c3/Kconfig | 14 ++++++++++++++ pkg/esp32_sdk_lib_bt_esp32c3/Makefile | 10 ++++++++++ pkg/esp32_sdk_lib_bt_esp32c3/Makefile.dep | 4 ++++ pkg/esp32_sdk_lib_bt_esp32c3/Makefile.include | 3 +++ pkg/esp32_sdk_lib_bt_esp32c3/doc.txt | 6 ++++++ 5 files changed, 37 insertions(+) create mode 100644 pkg/esp32_sdk_lib_bt_esp32c3/Kconfig create mode 100644 pkg/esp32_sdk_lib_bt_esp32c3/Makefile create mode 100644 pkg/esp32_sdk_lib_bt_esp32c3/Makefile.dep create mode 100644 pkg/esp32_sdk_lib_bt_esp32c3/Makefile.include create mode 100644 pkg/esp32_sdk_lib_bt_esp32c3/doc.txt diff --git a/pkg/esp32_sdk_lib_bt_esp32c3/Kconfig b/pkg/esp32_sdk_lib_bt_esp32c3/Kconfig new file mode 100644 index 000000000000..b8e3be71653f --- /dev/null +++ b/pkg/esp32_sdk_lib_bt_esp32c3/Kconfig @@ -0,0 +1,14 @@ +# Copyright (c) 2021 Gunar Schorcht +# +# This file is subject to the terms and conditions of the GNU Lesser +# General Public License v2.1. See the file LICENSE in the top level +# directory for more details. +# + +config PACKAGE_ESP32_SDK_LIB_BT_ESP32C3 + bool "ESP32 SDK Bluetooth library for the ESP32-C3 SoC" + depends on TEST_KCONFIG + depends on HAS_ARCH_ESP32 + depends on HAS_ESP_BLE_ESP32C3 + help + Vendor SDK Bluetooth library for ESP32-C3 SoC diff --git a/pkg/esp32_sdk_lib_bt_esp32c3/Makefile b/pkg/esp32_sdk_lib_bt_esp32c3/Makefile new file mode 100644 index 000000000000..f86817589b8c --- /dev/null +++ b/pkg/esp32_sdk_lib_bt_esp32c3/Makefile @@ -0,0 +1,10 @@ +PKG_NAME=esp32_sdk_lib_bt_esp32c3 +PKG_URL=https://github.com/espressif/esp32c3-bt-lib +# This is a version in the v4.4.1 release branch +PKG_VERSION=98dcc9591365b5ac486a9f0b474c36bf8c4ca97b +PKG_LICENSE=Apache-2.0 + +include $(RIOTBASE)/pkg/pkg.mk + +# there is nothing to compile +all: diff --git a/pkg/esp32_sdk_lib_bt_esp32c3/Makefile.dep b/pkg/esp32_sdk_lib_bt_esp32c3/Makefile.dep new file mode 100644 index 000000000000..f33fadda9843 --- /dev/null +++ b/pkg/esp32_sdk_lib_bt_esp32c3/Makefile.dep @@ -0,0 +1,4 @@ +# This package can only be used with the ESP32 CPU +FEATURES_REQUIRED += arch_esp32 +FEATURES_REQUIRED += esp_ble +FEATURES_REQUIRED += esp_ble_esp32c3 diff --git a/pkg/esp32_sdk_lib_bt_esp32c3/Makefile.include b/pkg/esp32_sdk_lib_bt_esp32c3/Makefile.include new file mode 100644 index 000000000000..52e67dcb0c51 --- /dev/null +++ b/pkg/esp32_sdk_lib_bt_esp32c3/Makefile.include @@ -0,0 +1,3 @@ +export ESP32_SDK_LIB_BT_DIR ?= $(PKGDIRBASE)/esp32_sdk_lib_bt_esp32c3 + +PSEUDOMODULES += esp32_sdk_lib_bt_esp32c3 diff --git a/pkg/esp32_sdk_lib_bt_esp32c3/doc.txt b/pkg/esp32_sdk_lib_bt_esp32c3/doc.txt new file mode 100644 index 000000000000..7078a9f03ed9 --- /dev/null +++ b/pkg/esp32_sdk_lib_bt_esp32c3/doc.txt @@ -0,0 +1,6 @@ +/** + * @defgroup pkg_esp32_sdk_lib_bt_esp32c3 ESP32 SDK Bluetooth library for the ESP32-C3 SoC + * @ingroup pkg_esp32_sdk + * @brief Vendor SDK Bluetooth library for ESP32-C3 SoC by Espressif + * @see https://github.com/espressif/esp32c3-bt-lib + */ From 0574f463bb40281fe4843630839cfa80ec210310 Mon Sep 17 00:00:00 2001 From: Gunar Schorcht Date: Thu, 11 Aug 2022 16:34:24 +0200 Subject: [PATCH 2/4] cpu/esp_common/freertos: changes required for BLE --- cpu/esp8266/vendor/esp-idf/esp8266/source/esp_wifi_os_adapter.c | 1 - cpu/esp_common/include/freertos/portmacro.h | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cpu/esp8266/vendor/esp-idf/esp8266/source/esp_wifi_os_adapter.c b/cpu/esp8266/vendor/esp-idf/esp8266/source/esp_wifi_os_adapter.c index 35eb8f150ec2..aeee1ef44317 100644 --- a/cpu/esp8266/vendor/esp-idf/esp8266/source/esp_wifi_os_adapter.c +++ b/cpu/esp8266/vendor/esp-idf/esp8266/source/esp_wifi_os_adapter.c @@ -42,7 +42,6 @@ extern void vPortYield(void); extern void vPortYieldFromInt(void); -#define portYIELD vPortYield void thread_yield_higher(void); #endif /* RIOT_VERSION */ diff --git a/cpu/esp_common/include/freertos/portmacro.h b/cpu/esp_common/include/freertos/portmacro.h index 0c7321999456..cfa036ab3b87 100644 --- a/cpu/esp_common/include/freertos/portmacro.h +++ b/cpu/esp_common/include/freertos/portmacro.h @@ -39,6 +39,7 @@ extern "C" { #define portMUX_INITIALIZE mutex_init #define portMUX_INITIALIZER_UNLOCKED MUTEX_INIT +#define portYIELD thread_yield_higher #define portYIELD_FROM_ISR thread_yield_higher #define portENTER_CRITICAL vTaskEnterCritical @@ -64,6 +65,7 @@ extern "C" { #define portNUM_PROCESSORS 1 #define xPortGetCoreID() PRO_CPU_NUM +#define vPortYield portYIELD #endif /* defined(CPU_FAM_ESP32) || defined(CPU_FAM_ESP32S3) */ From 2ec9ca1276561046c3c0498370058f62a8530804 Mon Sep 17 00:00:00 2001 From: Gunar Schorcht Date: Thu, 11 Aug 2022 16:34:58 +0200 Subject: [PATCH 3/4] cpu/esp32: add BLE support in linker scripts for ESP32-C3 --- cpu/esp32/ld/esp32c3/sections.ld | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cpu/esp32/ld/esp32c3/sections.ld b/cpu/esp32/ld/esp32c3/sections.ld index ed9c68032e24..5c848e2b2d0f 100644 --- a/cpu/esp32/ld/esp32c3/sections.ld +++ b/cpu/esp32/ld/esp32c3/sections.ld @@ -258,7 +258,7 @@ SECTIONS KEEP (*(SORT(.esp_system_init_fn) SORT(.esp_system_init_fn.*))) _esp_system_init_fn_array_end = ABSOLUTE(.); - *(EXCLUDE_FILE(*libbt.a *libbtdm_app.a *libnimble.a) .data EXCLUDE_FILE(*libbt.a *libbtdm_app.a *libnimble.a) .data.*) + *(EXCLUDE_FILE(*components/bt/* *libbtdm_app.a) .data EXCLUDE_FILE(*components/bt/* *libbtdm_app.a) .data.*) *(.dram1 .dram1.*) _coredump_dram_start = ABSOLUTE(.); *(.dram1.coredump .dram1.coredump.*) @@ -266,7 +266,7 @@ SECTIONS *components/app_trace/app_trace.*(.rodata .rodata.*) *components/app_trace/app_trace_util.*(.rodata .rodata.*) _bt_data_start = ABSOLUTE(.); - *libbt.a:(.data .data.*) + *components/bt/*(.data .data.*) . = ALIGN(4); _bt_data_end = ABSOLUTE(.); _btdm_data_start = ABSOLUTE(.); @@ -355,7 +355,7 @@ SECTIONS *(.dynbss .dynsbss .gnu.linkonce.b .gnu.linkonce.b.* .gnu.linkonce.sb .gnu.linkonce.sb.* .gnu.linkonce.sb2 .gnu.linkonce.sb2.* .sbss .sbss.* .sbss2 .sbss2.* .scommon .share.mem) *(COMMON) _bt_bss_start = ABSOLUTE(.); - *libbt.a:(.bss .bss.* COMMON) + *components/bt/*(.bss .bss.* COMMON) . = ALIGN(4); _bt_bss_end = ABSOLUTE(.); _btdm_bss_start = ABSOLUTE(.); From aba5e35ac4605edf4bd8ac008ac5e0f5ec79527c Mon Sep 17 00:00:00 2001 From: Gunar Schorcht Date: Fri, 26 Aug 2022 17:10:36 +0200 Subject: [PATCH 4/4] cpu/esp32: add BLE support for ESP32-C3 --- cpu/esp32/Kconfig | 6 +++++ cpu/esp32/Kconfig.common | 1 + cpu/esp32/Kconfig.esp32c3 | 6 +++++ cpu/esp32/Makefile.dep | 3 +++ cpu/esp32/Makefile.features | 7 +++++ cpu/esp32/Makefile.include | 8 +++--- cpu/esp32/doc.txt | 2 +- cpu/esp32/include/sdkconfig.h | 1 - cpu/esp32/include/sdkconfig_esp32c3.h | 38 +++++++++++++++++++++++++++ 9 files changed, 67 insertions(+), 5 deletions(-) diff --git a/cpu/esp32/Kconfig b/cpu/esp32/Kconfig index 84027323f1e3..b5eb561ed587 100644 --- a/cpu/esp32/Kconfig +++ b/cpu/esp32/Kconfig @@ -27,6 +27,12 @@ config HAS_ESP_BLE_ESP32 Indicates that the ESP32x SoC uses the SDK Bluetooth LE library for the ESP32 variant. +config HAS_ESP_BLE_ESP32C3 + bool + help + Indicates that the ESP32x SoC uses the SDK Bluetooth LE library + for the ESP32-C3 variant. + config HAS_ESP_HW_COUNTER bool help diff --git a/cpu/esp32/Kconfig.common b/cpu/esp32/Kconfig.common index 43907cc846ea..35c9ed6016be 100644 --- a/cpu/esp32/Kconfig.common +++ b/cpu/esp32/Kconfig.common @@ -15,6 +15,7 @@ config MODULE_ESP_BLE select MODULE_ESP_IDF_BLE select PACKAGE_ESP32_SDK_LIB_PHY select PACKAGE_ESP32_SDK_LIB_BT_ESP32 if HAS_ESP_BLE_ESP32 + select PACKAGE_ESP32_SDK_LIB_BT_ESP32C3 if HAS_ESP_BLE_ESP32C3 config MODULE_ESP_JTAG bool "Enable JTAG debugging interface" diff --git a/cpu/esp32/Kconfig.esp32c3 b/cpu/esp32/Kconfig.esp32c3 index 02ba97a09ead..6425c78d45c3 100644 --- a/cpu/esp32/Kconfig.esp32c3 +++ b/cpu/esp32/Kconfig.esp32c3 @@ -31,6 +31,12 @@ config CPU_FAM_ESP32C3 select CPU_CORE_RV32IMC select HAS_ARCH_ESP32 select HAS_CPU_ESP32 + select HAS_BLE_ADV_EXT + select HAS_BLE_NIMBLE + select HAS_BLE_NIMBLE_NETIF + select HAS_BLE_PHY_2MBIT + select HAS_ESP_BLE + select HAS_ESP_BLE_ESP32C3 select HAS_ESP_WIFI_ENTERPRISE select HAS_PUF_SRAM diff --git a/cpu/esp32/Makefile.dep b/cpu/esp32/Makefile.dep index 2992395d4257..9a324858f3ab 100644 --- a/cpu/esp32/Makefile.dep +++ b/cpu/esp32/Makefile.dep @@ -25,6 +25,9 @@ ifneq (,$(filter esp_ble,$(USEMODULE))) ifeq (esp32,$(CPU_FAM)) FEATURES_REQUIRED += esp_ble_esp32 USEPKG += esp32_sdk_lib_bt_esp32 + else ifeq (esp32c3,$(CPU_FAM)) + FEATURES_REQUIRED += esp_ble_esp32c3 + USEPKG += esp32_sdk_lib_bt_esp32c3 endif endif diff --git a/cpu/esp32/Makefile.features b/cpu/esp32/Makefile.features index 5b4ee17c9ca8..f077eb35dae9 100644 --- a/cpu/esp32/Makefile.features +++ b/cpu/esp32/Makefile.features @@ -28,6 +28,13 @@ ifeq (esp32,$(CPU_FAM)) FEATURES_PROVIDED += ble_nimble_netif FEATURES_PROVIDED += esp_ble FEATURES_PROVIDED += esp_ble_esp32 +else ifeq (esp32c3,$(CPU_FAM)) + FEATURES_PROVIDED += ble_adv_ext + FEATURES_PROVIDED += ble_nimble + FEATURES_PROVIDED += ble_nimble_netif + FEATURES_PROVIDED += ble_phy_2mbit + FEATURES_PROVIDED += esp_ble + FEATURES_PROVIDED += esp_ble_esp32c3 endif ifneq (,$(filter esp32-wrover% esp32s2%r2 esp32s3%r2 esp32s3%r8 esp32s3%r8v,$(CPU_MODEL))) diff --git a/cpu/esp32/Makefile.include b/cpu/esp32/Makefile.include index a810093989bf..9de0c32bdb07 100644 --- a/cpu/esp32/Makefile.include +++ b/cpu/esp32/Makefile.include @@ -161,10 +161,10 @@ endif LINKFLAGS += -L$(RIOTCPU)/$(CPU)/ld/$(CPU_FAM)/ -ifeq (,$(filter esp_ble,$(USEMODULE))) - LINKFLAGS += -T$(RIOTCPU)/$(CPU)/ld/$(CPU_FAM)/memory.ld -else +ifneq (,$(filter esp32_sdk_lib_bt_esp32,$(USEPKG))) LINKFLAGS += -T$(RIOTCPU)/$(CPU)/ld/$(CPU_FAM)/memory_bt.ld +else + LINKFLAGS += -T$(RIOTCPU)/$(CPU)/ld/$(CPU_FAM)/memory.ld endif LINKFLAGS += -T$(RIOTCPU)/$(CPU)/ld/$(CPU_FAM)/sections.ld @@ -216,6 +216,8 @@ ifneq (,$(filter esp_ble,$(USEMODULE))) ARCHIVES += -lphy -lstdc++ ifeq (esp32,$(CPU_FAM)) ARCHIVES += -lrtc + else ifeq (esp32c3,$(CPU_FAM)) + ARCHIVES += -lbtbb endif endif diff --git a/cpu/esp32/doc.txt b/cpu/esp32/doc.txt index d543b39f85d5..79145f3add0f 100644 --- a/cpu/esp32/doc.txt +++ b/cpu/esp32/doc.txt @@ -241,7 +241,7 @@ The key features of ESP32-C3 are: | SPIs | 3 | yes (1) | | UARTs | 2 | yes | | WiFi | IEEE 802.11 b/g/n built in | yes | -| Bluetooth | Bluetooth 5 (LE) | no | +| Bluetooth | Bluetooth 5 (LE) | yes | | Ethernet | - | - | | CAN | version 2.0 | yes | | IR | up to 4 channels TX/RX | - | diff --git a/cpu/esp32/include/sdkconfig.h b/cpu/esp32/include/sdkconfig.h index 8f9b98160f76..fe62dc58f226 100644 --- a/cpu/esp32/include/sdkconfig.h +++ b/cpu/esp32/include/sdkconfig.h @@ -108,7 +108,6 @@ #define CONFIG_BT_CONTROLLER_ONLY 1 #else #define CONFIG_BT_ENABLED 0 -#define CONFIG_BTDM_RESERVE_DRAM 0 #endif /** diff --git a/cpu/esp32/include/sdkconfig_esp32c3.h b/cpu/esp32/include/sdkconfig_esp32c3.h index eac3d286d8c3..28afc09fb54a 100644 --- a/cpu/esp32/include/sdkconfig_esp32c3.h +++ b/cpu/esp32/include/sdkconfig_esp32c3.h @@ -94,6 +94,44 @@ extern "C" { #define CONFIG_ESP_SLEEP_POWER_DOWN_FLASH 1 #define CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND 1 +/** + * ESP32-C3 BLE driver configuration (DO NOT CHANGE) + */ +#ifdef MODULE_ESP_BLE +#define CONFIG_BT_CTRL_ADV_DUP_FILT_MAX 30 +#define CONFIG_BT_CTRL_BLE_ADV_REPORT_DISCARD_THRSHOLD 20 +#define CONFIG_BT_CTRL_BLE_ADV_REPORT_FLOW_CTRL_NUM 100 +#define CONFIG_BT_CTRL_BLE_ADV_REPORT_FLOW_CTRL_SUPP 1 +#define CONFIG_BT_CTRL_BLE_MAX_ACT 10 +#define CONFIG_BT_CTRL_BLE_MAX_ACT_EFF 10 +#define CONFIG_BT_CTRL_BLE_SCAN_DUPL 1 +#define CONFIG_BT_CTRL_BLE_STATIC_ACL_TX_BUF_NB 0 +#define CONFIG_BT_CTRL_CE_LENGTH_TYPE_EFF 0 +#define CONFIG_BT_CTRL_CE_LENGTH_TYPE_ORIG 1 +#define CONFIG_BT_CTRL_COEX_PHY_CODED_TX_RX_TLIM_DIS 1 +#define CONFIG_BT_CTRL_COEX_PHY_CODED_TX_RX_TLIM_EFF 0 +#define CONFIG_BT_CTRL_DFT_TX_POWER_LEVEL_EFF 10 +#define CONFIG_BT_CTRL_DFT_TX_POWER_LEVEL_P3 1 +#define CONFIG_BT_CTRL_HCI_MODE_VHCI 1 +#define CONFIG_BT_CTRL_HCI_TL 1 +#define CONFIG_BT_CTRL_HCI_TL_EFF 1 +#define CONFIG_BT_CTRL_HW_CCA_EFF 0 +#define CONFIG_BT_CTRL_HW_CCA_VAL 20 +#define CONFIG_BT_CTRL_MODE_EFF 1 +#define CONFIG_BT_CTRL_PINNED_TO_CORE 0 +#define CONFIG_BT_CTRL_RX_ANTENNA_INDEX_0 1 +#define CONFIG_BT_CTRL_RX_ANTENNA_INDEX_EFF 0 +#define CONFIG_BT_CTRL_SCAN_DUPL_CACHE_SIZE 100 +#define CONFIG_BT_CTRL_SCAN_DUPL_TYPE 0 +#define CONFIG_BT_CTRL_SCAN_DUPL_TYPE_DEVICE 1 +#define CONFIG_BT_CTRL_SLEEP_CLOCK_EFF 0 +#define CONFIG_BT_CTRL_SLEEP_MODE_EFF 0 +#define CONFIG_BT_CTRL_TX_ANTENNA_INDEX_0 1 +#define CONFIG_BT_CTRL_TX_ANTENNA_INDEX_EFF 0 +#define CONFIG_BT_ENABLED 1 +#define CONFIG_BT_SOC_SUPPORT_5_0 1 +#endif + #ifdef __cplusplus } #endif