藍牙協議架構與調試工具詳解(含 BLE、HCI 命令、調試命令)


本文介紹藍牙協議從物理層到應用層的完整通信流程,并詳解了 Linux 下主流藍牙調試工具的使用方法,適用于嵌入式藍牙驅動開發、BLE調試、通信協議分析等場景。


🔧 1. 藍牙架構概覽

? 芯片架構

  • 單模芯片:僅支持 BLE 或 Classic 藍牙中的一種。
  • 雙模芯片:同時支持 BLE 和 Classic 藍牙協議棧。

? 協議架構(三級分層)

Host層        ←→ 高層協議棧(L2CAP、ATT/GATT、SM)
Transport層   ←→ 傳輸協議(HCI over UART/USB/SDIO)
Controller層  ←→ 硬件控制器(Link Layer、PHY)

📶 2. 藍牙物理層(PHY)

  • BLE 總共有 40 個頻道

    • 3 個廣播通道(37、38、39)
    • 37 個數據通道(0~36)

🔗 3. 鏈路層(Link Layer)

📌 狀態機定義

狀態描述
Standby待機狀態,不發不收
Advertising廣播狀態,監聽/發送廣播包
Scanning掃描廣播包
Initiating發起連接請求
Connection建立連接后的通信狀態

📌 角色定義

  • Master:由 Initiating State 進入連接狀態的設備
  • Slave:由 Advertising State 進入連接狀態的設備

📦 空中數據包結構(Air Packet)

Preamble + Access Address + PDU + CRC

🧩 4. HCI 傳輸層

? HCI 接口介紹

  • Host 與 Controller 間的通信通過 HCI(Host Controller Interface)
  • 可運行于 UART、USB、SDIO 等物理通道

📦 HCI 包類型

包類型描述
HCI Command PacketHost → Controller,發送命令
HCI Event PacketController → Host,事件響應
HCI ACL Data Packet雙向數據包(異步)
HCI Sync Data Packet雙向數據包(同步)

🛠? HCI Command Packet 結構

OpCode = OGF(6bit) + OCF(10bit)
Parameter Total Length
Parameters(每個命令不同)

📨 5. L2CAP 層

  • 復用機制:支持多個高層協議區分傳輸
  • 分段重組:控制 PDU 長度,利于數據管理
  • 流控與差錯控制:對每個邏輯信道流量進行控制,并具備差錯處理機制

一條 ACL 鏈路上可以存在多個 L2CAP 信道,便于多協議并存。


🔁 6. 藍牙通信流程(BLE)

🌟 初始化控制器

  • HCI_Reset
  • HCI_Read_Local_Supported_Features
  • HCI_Set_Event_Mask
  • HCI_Read_Buffer_Size
  • HCI_Read_BDADDR

📣 廣播狀態設置

  • LE_Set_Advertising_Parameters
  • LE_Set_Advertising_Data
  • LE_Set_Scan_Response_Data
  • LE_Set_Advertising_Enable

🔍 掃描狀態設置

  • LE_Set_Scan_Parameters
  • LE_Set_Scan_Enable
  • LE Advertising Report(掃描結果)

🔗 發起連接

  • LE_Create_Connection
  • LE_Connection_Complete

📤 數據交互

  • 建立連接后即可通過 L2CAP 層傳輸數據

? 斷開連接

  • HCI_Disconnect
  • Disconnection Complete

🛠? 7. 藍牙調試工具

🔧 hciconfig - HCI設備配置工具

hciconfig hci0 up         # 啟動設備
hciconfig hci0 down       # 關閉設備
hciconfig hci0 reset      # 重置藍牙設備
hciconfig hci0 name NAME  # 設置藍牙名稱
hciconfig hci0 leadv      # 開啟廣播

🔧 hcitool - HCI命令工具

hcitool dev               # 查看HCI設備
hcitool inq               # 發現設備
hcitool name <MAC>        # 獲取設備名稱
hcitool lescan            # BLE掃描
hcitool lecc <MAC>        # 連接BLE設備
hcitool ledc <MAC>        # 斷開BLE設備

🔍 hcidump - 藍牙包嗅探工具

hcidump -i hci0 -Xt -w bt_debug.cfa &
  • -X: ASCII + 十六進制
  • -t: 顯示時間戳
  • -w: 輸出到文件

?? hciattach - 綁定串口藍牙模塊到 HCI

hciattach -n -s 115200 ttyS0 rtk_h5 &
  • -s: 波特率
  • -n: 不脫離控制臺
  • ttyS0: 串口名稱

📡 btmon - 藍牙日志抓取工具

btmon -i hci0 -w btmon_debug.log &
btmon -r btmon_debug.log        # 回放日志
  • -i: 指定 HCI 設備
  • -w: 寫入文件
  • -r: 讀取文件回放

🔌 bluetoothd - BlueZ 后臺服務

bluetoothd -C -d -n &
  • -d: DEBUG 模式
  • -C: 支持 legacy 命令
  • -n: 前臺運行,方便調試日志查看

🧭 bluetoothctl - 藍牙交互工具

bluetoothctl
> list                  # 查看控制器
> show                  # 詳細信息
> power on              # 打開設備
> scan on               # 開始掃描
> pairable on           # 設置可配對
> discoverable on       # 可發現
> pair <MAC>            # 配對設備
> connect <MAC>         # 連接設備
> exit                  # 退出

? 結語

本文系統地梳理了藍牙 BLE 協議從底層到上層的通信機制,涵蓋 HCI 結構、通信流程,并結合 Linux 下 BlueZ 提供的調試工具,提供了命令級的使用方式。

如果你覺得有幫助,歡迎點贊、收藏、轉發!🚀


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80199.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80199.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80199.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

激光雷達定位算法在FPGA中的實現——section3 Matlab實現和校驗

1、校驗section2的計算方法是否正確 以section1里面的圖示 舉個例子: 1.1 手動計算 可以計算出4*4方陣C相關參數: 可以計算出余子式矩陣C_1相關參數:

數據結構(2)線性表-順序表

知道一個算法的好壞怎么去判斷以后&#xff0c;就該正式的去學習一些常見的數據結構&#xff0c;當然&#xff0c;這里的數據結構僅僅是初階&#xff0c;不會挨個一個一個學完&#xff0c;后期慢慢來。 一、數據結構總論 一般按照邏輯結構和存儲結構來分類&#xff0c;在初階…

性能測試詳解

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 一、什么是性能測試 先看下百度百科對它的定義 性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試 我們可以認為…

每日Prompt:三只動物與地標自拍磨砂玻璃后的虛實對比剪影

提示詞 一張黑白照片&#xff0c;展示了一個[主體]在磨砂或半透明表面后的模糊剪影。其[部分]輪廓清晰&#xff0c;緊貼表面&#xff0c;與其余朦朧、模糊的身影形成鮮明對比。背景是柔和的灰色漸變色調&#xff0c;增強了神秘和藝術的氛圍。

Android多媒體——媒體解碼器初始化(十五)

通過上一篇文章我們了解了媒體解碼器的創建過程,并且可以看到,在媒體解碼器創建成功后,分別調用了 configure()、setCallback() 和 start() 函數來對解碼器進行配置、回調和啟動。這里我們就來詳細看一下這幾個過程。 一、配置解碼器 首先看一下解碼器的配置,在 NuPlayerD…

每周資訊 | 騰訊Q1財報:國內游戲業務收入同比增長24%;Tripledot 8億美元收購AppLovin游戲業務

內容速覽&#xff1a; 廣州“服務貿易和數字貿易22條”助推游戲產業發展Tripledot Studios 8億美元收購AppLovin游戲業務蘋果緊急申請暫停執行AppStore新規4月中國手游出海收入下載榜&#xff0c;點點互動《Kingshot》收入激增 騰訊Q1財報&#xff1a;國內游戲業務收入同比增長…

本地跑通vue-element-admin項目

GitHub - PanJiaChen/vue-element-admin: :tada: A magical vue admin https://panjiachen.github.io/vue-element-admin 通過加速clone到本地 git clone https://gitclone.com/github.com/PanJiaChen/vue-element-admin.git # 進入項目目錄 cd vue-element-admin # 安裝依賴…

Go語言交替打印問題及多種實現方法

Go語言交替打印問題及多種實現方法 在并發編程中&#xff0c;多個線程&#xff08;或 goroutine&#xff09;交替執行任務是一個經典問題。本文將以 Go 語言為例&#xff0c;介紹如何實現多個 goroutine 交替打印數字的功能&#xff0c;并展示幾種不同的實現方法。 Go 語言相關…

支持藍牙5.0和2.4G私有協議芯片-PHY6222

PHY6222QC-W04C 是一款適用于藍牙低功耗&#xff08;BLE&#xff09;5.2 應用的片上系統&#xff08;SoC&#xff09;。它搭載 ARM Cortex?-M0 32 位處理器&#xff0c;配備 64KB SRAM、512K Flash、96KB ROM、256 bit efuse &#xff0c;以及超低功耗、高性能的多模式射頻模塊…

git相關配置

git相關配置 歡迎使用Markdown編輯器修改Git默認編輯器為vimgit配置默認用戶名和密碼&#xff1a; 歡迎使用Markdown編輯器 修改Git默認編輯器為vim #方法1&#xff1a;直接執行 git config --global core.editor vim#方法2&#xff1a;修改git的配置文件.git/config文件&am…

C語言實現INI配置文件讀取和寫入

一.INI文件介紹 INI配置文件是一種簡單的文本文件&#xff0c;用于存儲配置信息&#xff0c;通常由一個或多個節&#xff08;section&#xff09;組成&#xff0c;每個節包含多個鍵值對&#xff08;Key-Value&#xff09;格式。INI文件易于閱讀和編輯&#xff0c;廣泛應用于多…

Vue 3 打開 el-dialog 時使 el-input 獲取焦點

運行代碼&#xff1a;https://andi.cn/page/622178.html 效果&#xff1a;

【程序員AI入門:模型】19.開源模型工程化全攻略:從選型部署到高效集成,LangChain與One-API雙劍合璧

一、模型選型與驗證&#xff1a;精準匹配業務需求 &#xff08;一&#xff09;多維度評估體系 通過量化指標權重實現科學選型&#xff0c;示例代碼計算模型綜合得分&#xff1a; # 評估指標權重與模型得分 requirements {"accuracy": 0.4, "latency": …

卡頓檢測與 Choreographer 原理

一、卡頓檢測的原理 卡頓的本質是主線程&#xff08;UI 線程&#xff09;未能及時完成某幀的渲染任務&#xff08;超過 16.6ms&#xff0c;以 60Hz 屏幕為例&#xff09;&#xff0c;導致丟幀&#xff08;Frame Drop&#xff09;。檢測卡頓的核心思路是監控主線程任務的執行時…

物聯網僵尸網絡防御:從設備認證到流量染色

一、IoT設備的安全困境 典型物聯網設備存在硬編碼密鑰問題&#xff1a; // 固件中的危險代碼示例 const char* DEFAULT_KEY "A1B2-C3D4-E5F6"; // 廠商預設密鑰 void connect_server() {authenticate(DEFAULT_KEY); // 密鑰從未更新 }此類漏洞導致某智能家居平臺…

二叉樹子樹判斷:從遞歸到迭代的全方位解析

一、題目解析 題目描述 給定兩棵二叉樹root和subRoot&#xff0c;判斷root中是否存在一棵子樹&#xff0c;其結構和節點值與subRoot完全相同。 示例說明 示例1&#xff1a; root [3,4,5,1,2]&#xff0c;subRoot [4,1,2] 返回true&#xff0c;因為root的左子樹與subRoot完…

Springboot 異步場景 使用注解 @Async 及 自定義線程池分模塊使用

目錄 前言一、Springboot項目如何開啟異步&#xff1f;二、存在的問題三、自定義線程池四、自定義線程池使用五、阻塞隊列和拒絕策略 前言 當開發中遇到不影響主流程任務時&#xff0c;使用異步去處理。 如有以下場景&#xff1a; 1、業務需要生成一個季度的數據進行員工排名&…

【GNN筆記】Signed Graph Convolutional Network(12)【未完】

視頻鏈接&#xff1a;《圖神經網絡》 Signed Graph Convolutional Network 之前介紹的GNN模型主要集中在無符號的網絡&#xff08;或僅由正鏈接組成的圖&#xff09;上&#xff0c;符號 圖帶來的挑戰&#xff0c;主要集中在于 否定鏈接&#xff0c;與正鏈接相比&#xff0c;它不…

米勒電容補償的理解

米勒電容補償是使運放放大器穩定的重要手法&#xff0c;可以使兩級運放的兩個極點分離&#xff0c;從而可以得到更好的相位裕度。 Miller 電容補償的本質是增加一條通路流電流&#xff0c;流電流才是miller效應的本質。給定一個相同的輸入&#xff0c;Miller 電容吃掉的電流比…

CVE-2017-8046 漏洞深度分析

漏洞概述 CVE-2017-8046 是 Spring Data REST 框架中的一個高危遠程代碼執行漏洞&#xff0c;影響版本包括 Spring Data REST < 2.5.12、2.6.7、3.0 RC3 及關聯的 Spring Boot 和 Spring Data 舊版本。攻擊者通過構造包含惡意 SpEL&#xff08;Spring Expression Language&…