feat(config): 添加 hci_ipc 网络核配置,优化 DLE 和 ACL 缓冲区设置

This commit is contained in:
2026-05-15 21:34:50 +08:00
parent 0979866a7c
commit 06b1f64213
5 changed files with 47 additions and 12 deletions
+19 -11
View File
@@ -5,23 +5,28 @@ CONFIG_BT_DEVICE_NAME="GML670_System"
CONFIG_BT_MAX_CONN=1 CONFIG_BT_MAX_CONN=1
CONFIG_BT_NUS=y CONFIG_BT_NUS=y
# 借鉴 Kiwii: 禁用 NUS 安全限制,提高连接成功率 # DLE + PHY
CONFIG_BT_NUS_SECURITY_ENABLED=n CONFIG_BT_BUF_ACL_RX_SIZE=251
CONFIG_BT_BUF_ACL_TX_SIZE=251
CONFIG_BT_DATA_LEN_UPDATE=y
CONFIG_BT_USER_DATA_LEN_UPDATE=y
CONFIG_BT_AUTO_DATA_LEN_UPDATE=y
CONFIG_BT_L2CAP_TX_MTU=247
CONFIG_BT_PHY_UPDATE=y
CONFIG_BT_USER_PHY_UPDATE=y
CONFIG_BT_AUTO_PHY_UPDATE=y
# SMP 配对与绑定 # 缓冲区
CONFIG_BT_SMP=y CONFIG_BT_BUF_ACL_TX_COUNT=3
CONFIG_BT_SETTINGS=y CONFIG_BT_L2CAP_TX_BUF_COUNT=6
CONFIG_BT_KEYS_OVERWRITE_OLDEST=y
# 存储
CONFIG_FLASH=y CONFIG_FLASH=y
CONFIG_FLASH_MAP=y CONFIG_FLASH_MAP=y
CONFIG_NVS=y CONFIG_NVS=y
CONFIG_SETTINGS=y CONFIG_SETTINGS=y
CONFIG_SETTINGS_NVS=y CONFIG_SETTINGS_NVS=y
# 借鉴 Kiwii: 优化缓冲区 (匹配硬件)
CONFIG_BT_BUF_ACL_TX_COUNT=3
CONFIG_BT_L2CAP_TX_BUF_COUNT=3
# 硬件驱动 # 硬件驱动
CONFIG_SPI=y CONFIG_SPI=y
CONFIG_GPIO=y CONFIG_GPIO=y
@@ -34,8 +39,11 @@ CONFIG_SERIAL=n
CONFIG_LOG=y CONFIG_LOG=y
CONFIG_USE_SEGGER_RTT=y CONFIG_USE_SEGGER_RTT=y
CONFIG_LOG_BACKEND_RTT=y CONFIG_LOG_BACKEND_RTT=y
CONFIG_LOG_BACKEND_RTT_MODE_DROP=y
CONFIG_LOG_BACKEND_UART=n CONFIG_LOG_BACKEND_UART=n
CONFIG_LOG_MODE_IMMEDIATE=y CONFIG_LOG_MODE_DEFERRED=y
CONFIG_LOG_BUFFER_SIZE=4096
CONFIG_SEGGER_RTT_BUFFER_SIZE_UP=4096
CONFIG_MAIN_STACK_SIZE=4096 CONFIG_MAIN_STACK_SIZE=4096
CONFIG_CRC=y CONFIG_CRC=y
+11 -1
View File
@@ -62,6 +62,7 @@ static void disconnected(struct bt_conn *conn, uint8_t reason) {
/** @brief NUS 通知使能状态回调。 */ /** @brief NUS 通知使能状态回调。 */
static void nus_send_enabled(enum bt_nus_send_status status) { static void nus_send_enabled(enum bt_nus_send_status status) {
nus_notification_enabled = (status == BT_NUS_SEND_STATUS_ENABLED); nus_notification_enabled = (status == BT_NUS_SEND_STATUS_ENABLED);
LOG_INF("NUS send_enabled: status=%d, enabled=%d", status, nus_notification_enabled);
} }
/** /**
@@ -106,10 +107,19 @@ void ble_transport_adv_start(void) {
} }
void ble_transport_send(const uint8_t *data, uint16_t len) { void ble_transport_send(const uint8_t *data, uint16_t len) {
static bool first_send_logged = false;
if (!nus_notification_enabled || !current_conn) return; if (!nus_notification_enabled || !current_conn) return;
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
if (bt_nus_send(current_conn, data, len) == 0) return; int err = bt_nus_send(current_conn, data, len);
if (err == 0) {
if (!first_send_logged) {
LOG_INF("First NUS send OK (len=%u)", len);
first_send_logged = true;
}
return;
}
k_usleep(500); k_usleep(500);
} }
LOG_WRN("NUS send failed after retries (len=%u)", len); LOG_WRN("NUS send failed after retries (len=%u)", len);
+6
View File
@@ -0,0 +1,6 @@
# 用绝对路径将 hci_ipc overlay 传给网络核,
# 避免 sysbuild 在 SDK 源码目录下解析相对路径而找不到文件。
set(hci_ipc_EXTRA_CONF_FILE
${CMAKE_CURRENT_LIST_DIR}/sysbuild/hci_ipc.conf
CACHE INTERNAL "" FORCE
)
+2
View File
@@ -0,0 +1,2 @@
# 让 sysbuild 自动构建 hci_ipc 网络核固件,west flash 一次刷两个核
SB_CONFIG_NETCORE_HCI_IPC=y
+9
View File
@@ -0,0 +1,9 @@
# 网络核 hci_ipc overlay: 开启 DLE 251B,解除链路层分片瓶颈
# DLE 依赖链: DATA_LEN_UPDATE -> BT_CTLR_DATA_LENGTH -> DATA_LENGTH_MAX
CONFIG_BT_DATA_LEN_UPDATE=y
CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
# 控制器 ACL 缓冲区必须能容纳 251B 的 LL PDU
CONFIG_BT_BUF_ACL_RX_SIZE=251
CONFIG_BT_BUF_ACL_TX_SIZE=251