在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

NCS更改MTU大小

TedLee ? 來源:jf_29076475 ? 作者:jf_29076475 ? 2025-06-27 17:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

NCS更改MTU大小

一、 什么是MTU

MTU(Maximum Transmission Unit)即最大傳輸單元,它定義了藍牙網絡層協議一次能傳輸的最大數據量。在藍牙低功耗(BLE)通信中,MTU的大小直接影響到數據傳輸的效率和性能

MTU過小的影響

當MTU設置過小時,會導致以下問題:

  • 數據分片增加 :數據需要被分成更小的片段進行傳輸,增加了傳輸的次數和復雜性。
  • 傳輸效率降低 :頻繁的數據分片和重組會消耗更多的帶寬和時間。
  • 連接穩定性下降 :過小的MTU可能導致數據包丟失或傳輸錯誤,影響連接的穩定性

所以為了能夠單包發送更大的數據,服務器和客戶端都需要更新它們的MTU。MTU需要滿足主機和從機之間允許的最小值,必須支持更大的MTU的遷就支持更小的

MTU

在Zephyr里面CONFIG_BT_BUF_ACL_RX_SIZE CONFIG_BT_L2CAP_TX_MTU這兩個宏決定了ZephyrMTU的大小,下圖是MTU的關系已經Kconfig對應表
在這里插入圖片描述

調用這個發送函數會報-128錯誤在這里插入圖片描述

二、如何修改MTU大小

1、增加主機向從機配置的MTU大小

在prj.conf添加如下幾個宏:

CONFIG_BT_L2CAP_TX_MTU=247
CONFIG_BT_BUF_ACL_RX_SIZE=251
CONFIG_BT_BUF_ACL_TX_SIZE=251

添加如上幾個宏,從機就支持支持最大的247的MTU了,但是這個是初始化協議棧的時候設置的,而MTU交換是主機和從機建立連接之后進行協商,所以主機可以在連接之后,主動設置從機的MTU大小了,那么怎么設置從機主動發起MTU請求和請求的大小呢:

有兩個辦法

1.1 第一個辦法:固定MTU大小

再上面的宏里面,再添加一個宏就可以實現連接后自動更新NTU大小了

CONFIG_BT_GATT_AUTO_UPDATE_MTU=y

在這里插入圖片描述

使用Kconfig search 查詢MTU,可以看到下面的描述連接后自動申請MTU大小,為什么我要多此一舉呢,因為有些客戶不需要申請這么大的MTU,需要動態去修改MTU大小或者自己隨著在某個操作里面修改MTU大小,

2、第二個辦法:使用函數從機主動向主機申請增加MTU大小

2.1 添加宏

CONFIG_BT_GATT_CLIENT

2.2 在函數里面添加如下代碼,然后再connect回調時間里面調用

/*MTU exchange*/
static struct bt_gatt_exchange_params mtu_exchange_params[CONFIG_BT_MAX_CONN];

static void mtu_exchange_cb(struct bt_conn *conn, uint8_t err,
			    struct bt_gatt_exchange_params *params)
{
    LOG_INF("MTU exchange %u %s (%u)", bt_conn_index(conn),
	       err == 0U ? "successful" : "failed", bt_gatt_get_mtu(conn));
}



static int mtu_exchange(struct bt_conn *conn)
{
    uint8_t conn_index;
    int err;

    conn_index = bt_conn_index(conn);

    LOG_INF("MTU (%u): %u", conn_index, bt_gatt_get_mtu(conn));

    mtu_exchange_params[conn_index].func = mtu_exchange_cb;

    err = bt_gatt_exchange_mtu(conn, &mtu_exchange_params[conn_index]);
    if (err) LOG_INF("MTU exchange failed (err %d)", err);
    else LOG_INF("Exchange pending...");

    return err;
}

在connect回調調用:
在這里插入圖片描述

三、測試

我們使用nrf下面的串口服務例程進行測試,具體怎么編譯程序和燒錄可以看我之前寫的博客

3.1 添加LOG

void mtu_updated(struct bt_conn *conn, uint16_t tx, uint16_t rx)
{
	LOG_INF("Updated MTU: TX: %d RX: %d bytesn", tx, rx);
}

static struct bt_gatt_cb gatt_callbacks = {
	.att_mtu_updated = mtu_updated,
};

隨后在main函數注冊回調:

在這里插入圖片描述

3.2 可以看到,默認例程的MTU大小只有23字節大小,每包數據發送超過了這個大小就會報錯,

在這里插入圖片描述

3.3、在手機上面申請

兩個都是一樣的,可以看到,連接之后,通過主機更新或者從機和主機申請交換MTU大小也會改變,

在這里插入圖片描述

3.4 添加自動連接更新MTU的宏&自己在連接添加MTU更換的宏

在這里插入圖片描述

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • NCS
    NCS
    +關注

    關注

    1

    文章

    11

    瀏覽量

    9225
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    NCS怎么添加.c.h文件到工程

    NCS隨筆】 SEGGER添加方式 在介紹NCS工程之前,我們先看看大家熟悉的SEGGER工程(Keil同理): 左邊的項目欄可以看到工程的配置,通過點擊 User Include
    的頭像 發表于 06-27 14:48 ?129次閱讀
    <b class='flag-5'>NCS</b>怎么添加.c.h文件到工程

    PDL電臺設置更改操作流程

    電子發燒友網站提供《PDL電臺設置更改操作流程.pdf》資料免費下載
    發表于 06-04 16:46 ?0次下載

    更改最大數據包大小時無法識別USB設備如何解決?

    將生產者 EP 端點描述符中的最大數據包大小從 1024 字節更改為 512 字節時,無法識別 USB 設備。 請告知如何解決這個問題。
    發表于 05-20 08:13

    nRF Connect SDK(NCS)/Zephyr固件升級詳解 – 重點講述MCUboot和藍牙空中升級

    如何在nRF Connect SDK(NCS)中實現藍牙空中升級?MCUboot和B0兩個Bootloader有什么區別?MCUboot升級使用的image格式是怎么樣的?什么是SMP協議?CBOR
    的頭像 發表于 05-09 14:14 ?1642次閱讀
    nRF Connect SDK(<b class='flag-5'>NCS</b>)/Zephyr固件升級詳解 – 重點講述MCUboot和藍牙空中升級

    media player 調用屏幕大小會隨分辨率大小自動調整無法固定

    在labview中調用media player控件播放視頻,前面板的大小會根據分辨率的大小自動調節調用media player面板的大小,無法固定大小,應該怎么解決,我試著在后面板里
    發表于 03-30 13:41

    怎么更改電腦上的云存儲位置,更改電腦上的云存儲位置教程

    。那要怎么更改電腦上的云存儲位置呢? ? ? 更改電腦上的云存儲位置通常是指將云存儲服務(如OneDrive、GoogleDrive、Dropbox等)同步的文件夾位置從默認位置(通常是系統盤)更改為其他磁盤或文件夾。以下是如何
    的頭像 發表于 01-07 16:43 ?806次閱讀
    怎么<b class='flag-5'>更改</b>電腦上的云存儲位置,<b class='flag-5'>更改</b>電腦上的云存儲位置教程

    mtu大小對云服務的影響

    了數據包的最大尺寸,從而影響數據傳輸的效率。MTU大小取決于網絡層協議和物理介質。例如,以太網的標準MTU大小為1500字節,而MPLS的MTU
    的頭像 發表于 12-16 14:37 ?820次閱讀

    mtu和網絡安全的關系

    1. MTU的定義和作用 MTU是網絡協議棧中的一個重要參數,它定義了網絡層可以處理的最大數據包大小。在以太網中,標準的MTU大小是1500
    的頭像 發表于 12-16 14:35 ?1158次閱讀

    mtu配置步驟詳解 mtu與數據包丟失的關系

    MTU(Maximum Transmission Unit)即最大傳輸單元,是指一種通信協議的某一層上面所能通過的最大數據報大小,單位是字節。MTU配置步驟及其與數據包丟失的關系如下: MTU
    的頭像 發表于 12-16 14:33 ?2496次閱讀

    常見的mtu相關問題及解決方案

    1. MTU不匹配導致的數據包分片 問題描述: 當數據包從一個網絡傳輸到另一個網絡時,如果兩個網絡的MTU值不匹配,較大的數據包可能會被分片,這可能導致性能下降和數據丟失。 解決方案: 自動調整
    的頭像 發表于 12-16 14:25 ?2791次閱讀

    mtu在不同網絡協議中的應用

    包括數據包頭和數據負載。MTU大小決定了網絡中可以傳輸的最大數據量,同時也影響了數據包的分片和重組過程。如果數據包超過MTU,它將被分片成更小的單元進行傳輸,這會增加網絡的復雜性和延遲。 M
    的頭像 發表于 12-16 14:22 ?1279次閱讀

    mtu與網絡性能的關系 mtu調整對網絡的影響

    ,網絡設備能夠發送或接收的最大數據包大小。這個參數對于確保數據包在不同網絡設備間順利傳輸至關重要。如果數據包大小超過了接收設備的MTU,那么數據包就需要被分片,這會增加網絡的復雜性和延遲。 M
    的頭像 發表于 12-16 14:21 ?2964次閱讀

    mtu是什么?解釋和定義

    MTU(Maximum Transmission Unit)是一個網絡術語,指的是在網絡層(如以太網)上可以傳輸的最大數據包大小MTU大小決定了網絡設備在發送數據時能夠處理的最大數
    的頭像 發表于 12-16 14:19 ?4733次閱讀

    新港海岸NCS8803,HDMI to EDP帶Scaler

    NCS8803 是一款低功耗 HDMI 轉 DisplayPort/eDP 轉換器,具有先進的縮放功能,從 2:1 到 1:2 的小數縮放比,專為移動設備(包括平板電腦)設計,筆記本電腦、顯示器等
    的頭像 發表于 10-23 13:54 ?1426次閱讀
    新港海岸<b class='flag-5'>NCS</b>8803,HDMI to EDP帶Scaler

    世界最小的Intel Core Ultra超高效能主板---PICO-MTU4

    作為配備全新IntelCoreUltra的最小主板,PICO-MTU4利用了存算分離架構設計中的混合CPU核心架構和專用AI引擎NPU,從而實現了多線程性能提升高達24%和SoC功耗降低高達50
    的頭像 發表于 09-28 08:01 ?668次閱讀
    世界最小的Intel Core Ultra超高效能主板---PICO-<b class='flag-5'>MTU</b>4
    主站蜘蛛池模板: 四虎在线最新地址4hu | 四虎影酷| 亚洲色图激情 | 亚洲国产片 | 久久久午夜精品理论片 | 加勒比一木道|视频在线看 加勒比在线免费视频 | 亚洲第一色在线 | 国产女人视频 | www.91在线| 性感美女逼 | 天天综合色网 | 天天色天天射天天干 | 4438x成人网全国最大 | 欧美性猛交xxxx免费 | 98pao强力打造高清免费 | 天天舔天天干 | 俺要色| 日本一区二区三区在线观看视频 | 丁香六月色婷婷 | 亚洲一级免费毛片 | 911精品国产91久久久久 | 日本内谢69xxxx免费 | 国语自产免费精品视频一区二区 | 亚洲欧美一区二区三区图片 | 91精品欧美激情在线播放 | 欧美综合色区 | 亚洲大香伊人蕉在人依线 | bt天堂网www连接 | bt天堂在线观看 | 一级黄色毛片播放 | 免费日本视频 | 五月婷婷色综合 | 久久久久国产一级毛片高清板 | 激情综合网五月婷婷 | 啪啪免费看视频 | 国内精品久久影视 | 国产或人精品日本亚洲77美色 | 加勒比一木道|视频在线看 加勒比在线免费视频 | 婷婷色人阁| 97av在线播放 | 无毒不卡在线观看 |