NCS如何修改連接間隔
一、連接間隔
連接間隔(Connection Interval)是在 兩個已建立連接的 Bluetooth LE 設備之間,連續(xù)兩次“連接事件”開始之間的時間間隔
在一個連接中,雙方大部分時間都在休眠,只在每個連接間隔到期時同時喚醒,進行一次“連接事件”(交換數(shù)據(jù)或空包,用來保持同步)
連接間隔越短:設備更頻繁地喚醒通信,延遲更低、可用吞吐量更高,但功耗更高
連接間隔越長:喚醒次數(shù)減少,功耗更低,但數(shù)據(jù)延遲更大,丟包重傳時等待時間也更長
在協(xié)議里,連接間隔以 1.25 ms 為單位 表示,例如 Interval = 24 就對應 24 × 1.25 ms = 30 ms
區(qū)間:定義連接的區(qū)間。主機節(jié)點多久會發(fā)送一次連接事件包到從機。連接間隔的單位為1.25毫秒。
延遲:從屬延遲。從設備/外設可以跳過喚醒,直接響應主從連接事件。延遲是從機可以跳過的連接事件數(shù)量。這是為了節(jié)省從屬端的電力。當沒有數(shù)據(jù)時,它可以跳過一些連接事件。但睡眠時間不應過長,以免連接超時。
超時:主控在沒有從機響應的情況下持續(xù)發(fā)送連接事件多久,連接才會終止
[圖片上傳中...(image-0uB1Wx2uQ2YOjOvP)]
二、NCS怎么修改連接間隔
2.1 通過宏配置靜態(tài)修改
在prj.conf里面添加如下配置
以下配置將首選連接間隔設置為 800 * 1.25 ms ≈ 1000 ms,監(jiān)督超時 4 s。
請求不會在你的請求后立即發(fā)送,有一個預設的延遲,不設置的話默認是5S,如果需要縮短或者延長時間你需要設置:CONFIG_BT_CONN_PARAM_UPDATE_TIMEOUT
CONFIG_BT_PERIPHERAL_PREF_MIN_INT=800
CONFIG_BT_PERIPHERAL_PREF_MAX_INT=800
CONFIG_BT_PERIPHERAL_PREF_LATENCY=0
CONFIG_BT_PERIPHERAL_PREF_TIMEOUT=400
CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS=y
2.2 通過API動態(tài)修改
獲取連接間隔并且打印出來
struct bt_conn_info info;
err = bt_conn_get_info(conn, &info);
if (err) {
LOG_ERR("bt_conn_get_info() returned %d", err);
return;
}
double connection_interval = info.le.interval*1.25; // in ms
uint16_t supervision_timeout = info.le.timeout*10; // in ms
LOG_INF("Connection parameters: interval %.2f ms, latency %d intervals, timeout %d ms", connection_interval, info.le.latency, supervision_timeout);
設置連接,并且通過連接回調打印
主要需要添加CONFIG_FPU=y這個宏,才能打印浮點數(shù)
//設置更新參數(shù)回調
void on_le_param_updated(struct bt_conn *conn, uint16_t interval, uint16_t latency, uint16_t timeout)
{
double connection_interval = interval*1.25; // in ms
uint16_t supervision_timeout = timeout*10; // in ms
LOG_INF("Connection parameters updated: interval %.2f ms, latency %d intervals, timeout %d ms", connection_interval, latency, supervision_timeout);
}
//更新連接參數(shù)
static struct bt_conn *current_conn;
#define INTERVAL_MIN 800
#define INTERVAL_MAX 800
static struct bt_le_conn_param *conn_param = BT_LE_CONN_PARAM(INTERVAL_MIN, INTERVAL_MAX, 0, 400);
static int update_connection_parameters(void)
{
int err = bt_conn_le_param_update(current_conn, conn_param);
if (err)
{
LOG_ERR("Cannot update connection parameter (err: %d)", err);
return err;
}
LOG_INF("Connection parameters update requested"); return 0; }
//將回調添加到藍牙事件里面
BT_CONN_CB_DEFINE(conn_callbacks) = {
.connected = connected,
.disconnected = disconnected,
.recycled = recycled_cb,
.le_param_updated = on_le_param_updated,
#ifdef CONFIG_BT_NUS_SECURITY_ENABLED
.security_changed = security_changed,
#endif
};
打印的LOG

你的點贊、收藏和評論是對我最大的支持,有問題多多指教,如果有需要Nordic開發(fā)板、Nordic的芯片以及Nordic技術支持的可以在個人資料獲取我的聯(lián)系方式,感謝讀者支持!
-
BlueTooth
+關注
關注
3文章
232瀏覽量
63612 -
API
+關注
關注
2文章
2286瀏覽量
66539 -
NCS
+關注
關注
1文章
22瀏覽量
9372
發(fā)布評論請先 登錄
NCS是否與Intel Aero Drone兼容?
在STM32MP1上BK1_NCS應如何連接到板載BK2_NCS上呢
NCS29001 LED驅動器 單通道
NCS3402 比較器 雙通道 低功耗
NCS2302 帶發(fā)送/結束檢測的耳機檢測接口
NCS2300 耳機檢測接口
NCS2220 比較器 雙通道 低電壓
NCS2202A 比較器,低壓,漏極開路
NCS2202 比較器 低壓 漏極開路
NCS怎么添加.c.h文件到工程
【NCS隨筆】如何進入system_off深度睡眠模式以及配置GPIO中斷喚醒
【NCS隨筆】NCS如何修改連接間隔
評論