mirror of
https://github.com/espressif/esp-idf
synced 2025-03-09 17:19:09 -04:00
feat(ble): support for putting ble code into flash on ESP32-C6
(cherry picked from commit 02d6d6fd7347525db15f1558023d5e336b96fe85) Co-authored-by: zwl <zhaoweiliang@espressif.com>
This commit is contained in:
parent
00fb58c133
commit
8fb74a1235
@ -890,7 +890,7 @@ if(CONFIG_BT_ENABLED)
|
|||||||
add_prebuilt_library(libble_app
|
add_prebuilt_library(libble_app
|
||||||
"${CMAKE_CURRENT_LIST_DIR}/controller/lib_esp32c6/esp32c6-bt-lib/esp32c61/libble_app.a")
|
"${CMAKE_CURRENT_LIST_DIR}/controller/lib_esp32c6/esp32c6-bt-lib/esp32c61/libble_app.a")
|
||||||
else()
|
else()
|
||||||
if(CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY)
|
if(CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY AND CONFIG_IDF_TARGET_ESP32C2)
|
||||||
add_prebuilt_library(libble_app
|
add_prebuilt_library(libble_app
|
||||||
"controller/lib_${target_name}/${target_name}-bt-lib/libble_app_flash.a")
|
"controller/lib_${target_name}/${target_name}-bt-lib/libble_app_flash.a")
|
||||||
else()
|
else()
|
||||||
|
@ -697,3 +697,11 @@ config BT_LE_CTRL_CHECK_CONNECT_IND_ACCESS_ADDRESS
|
|||||||
Enabling this option will add stricter verification of the Access Address in the CONNECT_IND PDU.
|
Enabling this option will add stricter verification of the Access Address in the CONNECT_IND PDU.
|
||||||
This improves security by ensuring that only connection requests with valid Access Addresses are accepted.
|
This improves security by ensuring that only connection requests with valid Access Addresses are accepted.
|
||||||
If disabled, only basic checks are applied, improving compatibility.
|
If disabled, only basic checks are applied, improving compatibility.
|
||||||
|
|
||||||
|
config BT_CTRL_RUN_IN_FLASH_ONLY
|
||||||
|
bool "Reduce BLE IRAM usage (READ DOCS FIRST) (EXPERIMENTAL)"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Move most IRAM into flash. This will increase the usage of flash and reduce ble performance.
|
||||||
|
Because the code is moved to the flash, the execution speed of the code is reduced.
|
||||||
|
To have a small impact on performance, you need to enable flash suspend (SPI_FLASH_AUTO_SUSPEND).
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
|
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
@ -130,6 +130,10 @@ extern void r_ble_lll_rfmgmt_set_sleep_cb(void *s_cb, void *w_cb, void *s_arg,
|
|||||||
extern void r_ble_rtc_wake_up_state_clr(void);
|
extern void r_ble_rtc_wake_up_state_clr(void);
|
||||||
extern int os_msys_init(void);
|
extern int os_msys_init(void);
|
||||||
extern void os_msys_deinit(void);
|
extern void os_msys_deinit(void);
|
||||||
|
#if CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY
|
||||||
|
extern void r_ble_ll_scan_start_time_init_compensation(uint32_t init_compensation);
|
||||||
|
extern void r_priv_sdk_config_insert_proc_time_set(uint16_t insert_proc_time);
|
||||||
|
#endif // CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY
|
||||||
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
#if CONFIG_FREERTOS_USE_TICKLESS_IDLE
|
||||||
extern sleep_retention_entries_config_t *r_esp_ble_mac_retention_link_get(uint8_t *size, uint8_t extra);
|
extern sleep_retention_entries_config_t *r_esp_ble_mac_retention_link_get(uint8_t *size, uint8_t extra);
|
||||||
extern void r_esp_ble_set_wakeup_overhead(uint32_t overhead);
|
extern void r_esp_ble_set_wakeup_overhead(uint32_t overhead);
|
||||||
@ -494,11 +498,13 @@ static int esp_ecc_gen_dh_key(const uint8_t *peer_pub_key_x, const uint8_t *peer
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int esp_intr_alloc_wrapper(int source, int flags, intr_handler_t handler,
|
static int esp_intr_alloc_wrapper(int source, int flags, intr_handler_t handler, void *arg, void **ret_handle_in)
|
||||||
void *arg, void **ret_handle_in)
|
|
||||||
{
|
{
|
||||||
int rc = esp_intr_alloc(source, flags | ESP_INTR_FLAG_IRAM, handler,
|
#if CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY
|
||||||
arg, (intr_handle_t *)ret_handle_in);
|
int rc = esp_intr_alloc(source, flags, handler, arg, (intr_handle_t *)ret_handle_in);
|
||||||
|
#else
|
||||||
|
int rc = esp_intr_alloc(source, flags | ESP_INTR_FLAG_IRAM, handler, arg, (intr_handle_t *)ret_handle_in);
|
||||||
|
#endif
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1046,6 +1052,10 @@ esp_err_t esp_bt_controller_enable(esp_bt_mode_t mode)
|
|||||||
coex_enable();
|
coex_enable();
|
||||||
#endif // CONFIG_SW_COEXIST_ENABLE
|
#endif // CONFIG_SW_COEXIST_ENABLE
|
||||||
|
|
||||||
|
#if CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY
|
||||||
|
r_ble_ll_scan_start_time_init_compensation(500);
|
||||||
|
r_priv_sdk_config_insert_proc_time_set(500);
|
||||||
|
#endif // CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY
|
||||||
if (r_ble_controller_enable(mode) != 0) {
|
if (r_ble_controller_enable(mode) != 0) {
|
||||||
ret = ESP_FAIL;
|
ret = ESP_FAIL;
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -1,8 +1,21 @@
|
|||||||
|
[sections:bt_iram_text]
|
||||||
|
entries:
|
||||||
|
.iram1+
|
||||||
|
|
||||||
|
[sections:high_perf_iram_text]
|
||||||
|
entries:
|
||||||
|
.high_perf_code_iram1+
|
||||||
|
|
||||||
[scheme:bt_default]
|
[scheme:bt_default]
|
||||||
entries:
|
entries:
|
||||||
bt_bss -> dram0_bss
|
bt_bss -> dram0_bss
|
||||||
bt_common -> dram0_bss
|
bt_common -> dram0_bss
|
||||||
data -> dram0_data
|
data -> dram0_data
|
||||||
|
high_perf_iram_text -> iram0_text
|
||||||
|
if BT_CTRL_RUN_IN_FLASH_ONLY = y:
|
||||||
|
bt_iram_text -> flash_text
|
||||||
|
else:
|
||||||
|
bt_iram_text -> iram0_text
|
||||||
|
|
||||||
# For the following fragments, order matters for
|
# For the following fragments, order matters for
|
||||||
# 'ALIGN(4) ALIGN(4, post) SURROUND(sym)', which generates:
|
# 'ALIGN(4) ALIGN(4, post) SURROUND(sym)', which generates:
|
||||||
@ -27,7 +40,6 @@ entries:
|
|||||||
bt_common -> dram0_bss ALIGN(4) ALIGN(4, post) SURROUND(bt_common),
|
bt_common -> dram0_bss ALIGN(4) ALIGN(4, post) SURROUND(bt_common),
|
||||||
data -> dram0_data ALIGN(4) ALIGN(4, post) SURROUND(bt_data)
|
data -> dram0_data ALIGN(4) ALIGN(4, post) SURROUND(bt_data)
|
||||||
|
|
||||||
|
|
||||||
[mapping:ble_app]
|
[mapping:ble_app]
|
||||||
archive: libble_app.a
|
archive: libble_app.a
|
||||||
entries:
|
entries:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user