大家好,我是雜燴君。本次我們來介紹一個開源的雙模藍牙協(xié)議?!猙tstack。
btstack簡介
btstack一個包含傳統(tǒng)藍牙跟低功耗藍牙的協(xié)議棧,屬于超輕量級藍牙協(xié)議棧,用作學習藍牙協(xié)議棧的人使用。
與其他協(xié)議棧的對比
Github鏈接:
https://github.com/sj15712795029/bluetooth_stack
bluetooth_stack專注于嵌入式平臺(如STM32),其代碼結構精簡高效,支持HCI層以上的核心協(xié)議(如L2CAP、ATT、GATT等),而底層依賴芯片自帶協(xié)議棧(如CSR8311)。這種設計既降低了硬件適配成本,又保留了藍牙協(xié)議的核心功能,特別適合資源受限的嵌入式場景。
btstack可以運行在STM32、Linux上。目前支持的平臺:
源碼目錄結構:
目錄文件夾 | 子目錄文件夾 | 說明 |
---|---|---|
board | stm32f10x | STM32F103板載外設驅動 |
stm32f407 | STM32F407板載外設驅動 | |
stm32f412 | STM32F412板載外設驅動 | |
bsp | cortex-m3 | Cortex M3 Driver庫(M3默認用標準庫) |
cortex-m4 | Cortex M4 Driver庫(M3默認用HAL庫) | |
component | bluetooth | 藍牙協(xié)議棧源碼 |
cjson | json源碼(目前用于跟上位機交互) | |
fs | file system文件系統(tǒng),目前用于管理spi flash | |
memory_manager | 內存管理,目前用于管理STM32F407的SRAM | |
ringbuffer | 環(huán)形數(shù)組,用于藍牙接收串口數(shù)據(jù) | |
mcu_bt_tool | PC上位機,用于控制STM32開發(fā)板,以及接受STM32的狀態(tài)回傳 | |
project | stm32f10x_bb_bt | STM32F103裸機(BB:bare board)藍牙工程 |
stm32f407_bb_bt | STM32F407裸機(BB:bare board)藍牙工程 | |
stm32f412_bb_bt | STM32F412裸機(BB:bare board)藍牙工程 | |
stm32h750_bb_bt | STM32H750裸機(BB:bare board)藍牙工程 | |
linux_bt | Linux 藍牙工程 | |
windows_bt | Windows藍牙工程 | |
python_tool | convert_binayr_file_to_array.py | 把二進制文檔轉換為數(shù)據(jù)的python工具 |
corvert_opcode_to_ogf_ocf.py | 把HCI opcode轉換為OGF,OCF |
目前包含HCI、L2CAP、SDP、RFCOMM、HFP、SPP、A2DP、AVRCP、AVDTP、AVCTP、OBEX、PBAP等協(xié)議。
藍牙協(xié)議分層簡介
協(xié)議縮寫 | 全稱 | 作用描述 | 關鍵特性 |
---|---|---|---|
HCI | Host Controller Interface | 主機與藍牙控制器之間的通信橋梁 | 標準化命令接口,硬件無關性 |
L2CAP | Logical Link Control & Adaption | 數(shù)據(jù)包分片/重組、協(xié)議復用 | 支持CID通道標識,提供邏輯鏈路 |
SDP | Service Discovery Protocol | 設備間服務發(fā)現(xiàn)與屬性查詢 | 無連接協(xié)議,基于UUID匹配服務 |
RFCOMM | Radio Frequency Communication | 模擬串口通信(基于L2CAP) | 支持多路復用,兼容傳統(tǒng)串口設備 |
HFP | Hands-Free Profile | 車載/耳機免提通話控制(依賴RFCOMM) | 支持音頻傳輸與電話控制指令 |
SPP | Serial Port Profile | 基于RFCOMM的串口數(shù)據(jù)透傳 | 替代傳統(tǒng)有線串口 |
A2DP | Advanced Audio Distribution | 高質量音頻流傳輸(如立體聲音樂) | 使用AVDTP協(xié)議傳輸編碼音頻 |
AVRCP | Audio/Video Remote Control | 媒體播放控制(播放/暫停/音量) | 與A2DP配合使用,支持元數(shù)據(jù)傳輸 |
AVDTP | Audio/Video Distribution Transport | 定義音頻流傳輸?shù)慕ⅰ⑴渲煤凸芾?/td> | 支持同步信道(SCO/eSCO) |
AVCTP | Audio/Video Control Transport | 傳輸AVRCP控制指令(基于L2CAP) | 提供可靠指令傳輸通道 |
OBEX | Object Exchange | 文件/對象傳輸(如vCard、圖片) | 獨立于傳輸層(支持RFCOMM/USB等) |
PBAP | Phone Book Access Profile | 同步手機通訊錄(基于OBEX) | 支持vCard格式數(shù)據(jù)交換 |
分層結構
-
- :協(xié)議棧按功能劃分為主機控制層、邏輯鏈路層、服務發(fā)現(xiàn)層、傳輸協(xié)議層和應用協(xié)議層。
依賴關系
-
- :
-
- RFCOMM/A2DP/AVRCP 依賴 L2CAP 提供的基礎傳輸能力AVDTP/AVCTP 是音視頻專用的傳輸協(xié)議OBEX/PBAP 可實現(xiàn)跨傳輸層的對象交換
-
應用場景:
-
- 音頻場景:A2DP + AVRCP + AVDTP數(shù)據(jù)傳輸:SPP + RFCOMM設備控制:HFP + PBAP
btstack資料
btstack作者的csdn博客上也有很多藍牙相關的文章:
https://blog.csdn.net/xiaoxiaopengbo/category_10215137.html
除此之外,還有配套硬件、上位機與配套視頻: