關(guān)鍵詞:藍(lán)牙核心技術(shù)協(xié)議 HCI L2CAP SDP RFCOMM
作者:xubin341719(歡迎轉(zhuǎn)載,請(qǐng)注明作者,請(qǐng)尊重版權(quán),謝謝!)歡迎指正錯(cuò)誤,共同學(xué)習(xí)、共同進(jìn)步!!下載鏈接:Bluetooth PROFILE SPECIFICATIONS (基本涵蓋所有藍(lán)牙協(xié)議)、buletooth core 2.1-4.0 SPECIFICATION(三藍(lán)牙版本的核心協(xié)議v2.1/v3.0/v4.0)、藍(lán)牙核心技術(shù)與應(yīng)用 馬建倉 版(藍(lán)牙協(xié)議相關(guān)初學(xué)者必讀,開發(fā)者參考)
藍(lán)牙核心技術(shù)概述(一):藍(lán)牙概述藍(lán)牙核心技術(shù)概述(二):藍(lán)牙使用場景藍(lán)牙核心技術(shù)概述(三): 藍(lán)牙協(xié)議規(guī)范(射頻、基帶鏈路控制、鏈路管理)藍(lán)牙核心技術(shù)概述(四):藍(lán)牙協(xié)議規(guī)范(HCI、L2CAP、SDP、RFOCMM)藍(lán)牙核心技術(shù)概述(五):藍(lán)牙協(xié)議規(guī)范(irOBEX、BNEP、AVDTP、AVCTP)
一、主機(jī)控制接口協(xié)議 HCI藍(lán)牙主機(jī)-主機(jī)控模型
藍(lán)牙軟件協(xié)議棧堆的數(shù)據(jù)傳輸過程:
1、藍(lán)牙控制器接口數(shù)據(jù)分組:指令分組、事件分組、數(shù)據(jù)分組(1)、指令分組

如:Accpet Connection RequestOpcode為:0x0409參數(shù)長度為: 07 參數(shù)中藍(lán)牙地址為:00:0d:fd:5f:16:9f角色為:從設(shè)備 0x01大端數(shù)據(jù)模式指令為:09 04 07 9f 16 5f fd 0d 00 01(2)、事件分組

如上圖:Opcode :0x0409狀態(tài): 0x00總長度: 4字節(jié)命令狀態(tài):0x0f(3)、數(shù)據(jù)分組ACL 數(shù)據(jù)分組
連接句柄(12bit) | PB(2bit) | BC(2bit) | 數(shù)據(jù)長度(16bit) |
數(shù)據(jù)………… | |||
注:PB Packet_Boundary BC Broadcast FlagSCO 數(shù)據(jù)分組
連接句柄(12bit) | 保留(4bit) | 數(shù)據(jù)長度(16bit) |
數(shù)據(jù)………… | ||
(4)、RS232分組指示器:
HCI 分組類型 | RS232分組指示器 |
HCI指令分組 | 0x01 |
HCI ACL數(shù)據(jù)分組 | 0x02 |
HCI SCO數(shù)據(jù)分組 | 0x03 |
HCI事件分組 | 0x04 |
HCI錯(cuò)誤消息分組 | 0x05 |
HCI協(xié)商分組 | 0x06 |
2、HCI控制命令
(1)、鏈路控制指令
命令 | OCF | 概述 |
Inquiry | 0x0001 | 藍(lán)牙設(shè)備進(jìn)入查詢模式,搜索臨近設(shè)備 |
Inquiry Cancel | 0x0002 | 退出查詢模式 |
Periodic Inquiry Mode | 0x0003 | 藍(lán)牙設(shè)備在指定周期內(nèi)自動(dòng)查詢 |
Exit Periodic Inquiry Mode | 0x0004 | 退出自動(dòng)查詢模式 |
Create Connection | 0x0005 | 按指定藍(lán)牙設(shè)備的BD_ADDR創(chuàng)建ACL鏈路 |
Disconnect | 0x0006 | 終止現(xiàn)有連接 |
Add SCO Connection | 0x0007 | 利用連接句柄參數(shù)指定的ACL連接創(chuàng)建SCO |
Cancel Create Connection | 0x0008 |
|
Accept Connection Request | 0x0009 | 接收新的呼入連接請(qǐng)求 |
Reject Connection Request | 0x000A | 拒絕新的呼入連接請(qǐng)求 |
Link Key Request Reply | 0x000B | 應(yīng)答從主機(jī)控制器發(fā)出的鏈路密鑰請(qǐng)求事件,并指定存儲(chǔ)在主機(jī)上的鏈路密鑰做為與BD_ADDR指定的藍(lán)牙設(shè)備進(jìn)行連接使用的鏈路密鑰請(qǐng)求事件 |
Link Key Request Negative Reply | 0x000C | 如果主機(jī)上沒有存儲(chǔ)鏈路密鑰,作為與BD_ADDR指定的藍(lán)牙設(shè)備進(jìn)行連接使用的鏈路密鑰,就應(yīng)答從主機(jī)控制器發(fā)出的鏈路密鑰請(qǐng)求事件 |
PIN Code Request Reply | 0x000D | 應(yīng)答從主機(jī)控制器發(fā)出的PIN請(qǐng)求事件,并指定用于連接的PIN |
PIN Code Request Negative Reply | 0x000E | 當(dāng)主機(jī)不能指定連接的PIN時(shí),應(yīng)回答從機(jī)控制器發(fā)出的PIN請(qǐng)求事件 |
Change Connection Packet Type | 0x000F | 改變正在建立連接的分組類型 |
Authentication Request | 0x0011 | 指定連接句柄關(guān)聯(lián)的兩個(gè)藍(lán)牙設(shè)備之間建立身份鑒權(quán) |
Set Connection Encryption | 0x0013 | 建立取消連接加密 |
Change Connection Link Key | 0x0015 | 強(qiáng)制關(guān)聯(lián)了連接句柄的兩個(gè)設(shè)備建立連接,并生成一個(gè)新的鏈路密鑰 |
Master Link Key | 0x0017 | 強(qiáng)制關(guān)聯(lián)了連接句柄的兩個(gè)設(shè)備利用主設(shè)備時(shí)鏈路密鑰或常規(guī)密鑰 |
Remote Name Request | 0x0019 | 獲取遠(yuǎn)端設(shè)備的名稱 |
Cancel Remote Name Request |
|
|
Read Remote Supported Features | 0x001B | 請(qǐng)求遠(yuǎn)端設(shè)備所支持的特性列表 |
Read Remote Extended Features |
|
|
Read Remote Version Information | 0x001D | 從遠(yuǎn)端設(shè)備讀取版本信息 |
Read Clock Offset | 0x001F | 讀取遠(yuǎn)端的時(shí)鐘信息 |
(2)、鏈路策略指令
命令 | OCF | 簡介 |
Hold Mode | 0x0001 | 改變LM狀態(tài)和本地及遠(yuǎn)程設(shè)備為主模式的LM位置 |
Sniff Mode | 0x0003 | 改變LM狀態(tài)和本地及遠(yuǎn)程設(shè)備為呼吸模式的LM位置 |
Exit Sniff Mode | 0x0004 | 結(jié)束連接句柄在當(dāng)前呼吸模式里的呼吸模式 |
Park State | 0x0005 | 改變LM狀態(tài)和本地及遠(yuǎn)程設(shè)備為休眠模式的LM位置 |
Exit Park State | 0x0006 | 切換從休眠模式返回到激活模式的藍(lán)牙設(shè)備 |
QoS Setup | 0x0007 | 指出連接句柄的服務(wù)質(zhì)量參數(shù) |
Role Discovery | 0x0009 | 藍(lán)牙設(shè)備連接后確定自己的主從角色 |
Switch Role | 0x000B | 角色互換 |
Read Link Policy Settings | 0x000C | 為指定連接句柄讀鏈路策略設(shè)置。鏈路策略設(shè)置允許主機(jī)控制器指定用于連接句柄的LM連接模式 |
Write Link Policy Settings | 0x000D | 為指定連接句柄寫鏈路策略設(shè)置。鏈路策略設(shè)置允許主機(jī)控制器指定用于連接句柄的LM連接模式 |
Read Default Link Policy Settings | 0x000E |
|
Write Default Link Policy Settings | 0x000F |
|
Flow Specification | 0X0010 |
|
(3)、主機(jī)控制器與基帶指令
Set Event Mark | 0x0001 | 使能主機(jī)過濾HCI產(chǎn)生的事件 |
Reset | 0x0003 | 復(fù)位藍(lán)牙控制器、鏈路管理器、基帶鏈路管理器 |
Set Event Filter | 0x0005 | 使能主機(jī)指定不同事件過濾 |
Flush | 0x0008 | 針對(duì)指定的藍(lán)牙句柄,放棄所有作為當(dāng)前待傳輸數(shù)據(jù),甚至當(dāng)前是屬于多個(gè)在主機(jī)控制器里的L2CAP指令的數(shù)據(jù)塊 |
Read PIN Type | 0x0009 | 主機(jī)讀取指定主機(jī)的PIN類型是可變的還是固定的 |
Write PIN Type | 0x000A | 主機(jī)寫入指定主機(jī)的PIN類型是可變的還是固定的 |
Create New Unit Key | 0x000B | 創(chuàng)建新的單一密鑰 |
Read Stored Link Key | 0x000D | 讀取存放在藍(lán)牙控制器中的單個(gè)或者多個(gè)密鑰 |
Write Stored Link Key | 0x0011 | 寫入存放在藍(lán)牙控制器中的單個(gè)或者多個(gè)密鑰 |
Delete Stored Link Key | 0x0012 | 刪除存放在藍(lán)牙控制器中的單個(gè)或者多個(gè)密鑰 |
Write Local Name | 0x0013 | 修改藍(lán)牙設(shè)備名稱 |
Read Local Name | 0x0014 | 讀取藍(lán)牙設(shè)備名稱 |
Read Connection Accept Timeout | 0x0015 | 讀連接識(shí)別超時(shí)參數(shù)值,定時(shí)器終止后藍(lán)牙硬件自動(dòng)拒絕連接 |
Write Connection Accept Timeout | 0x0016 | 寫連接識(shí)別超時(shí)參數(shù)值,定時(shí)器終止后藍(lán)牙硬件自動(dòng)拒絕連接 |
Read Page Timeout | 0x0017 | 讀尋呼超時(shí)參數(shù)值,本地設(shè)備返回連接失敗前,該值是允許藍(lán)牙硬件定義等待遠(yuǎn)程設(shè)備連接申請(qǐng)時(shí)間 |
Write Page Timeout | 0x0018 | 寫尋呼超時(shí)參數(shù)值,本地設(shè)備返回連接失敗前,該值是允許藍(lán)牙硬件定義等待遠(yuǎn)程設(shè)備連接申請(qǐng)時(shí)間 |
Read Scan Enable | 0x0019 | 寫出掃描允許參數(shù)值---用來控制藍(lán)牙設(shè)備周期性查詢 |
Write Scan Enable | 0x001A | 讀出掃描允許參數(shù)值---用來控制藍(lán)牙設(shè)備周期性查詢 |
Read Page Scan Activity | 0x001B | 讀尋呼掃描間隔、尋呼掃描區(qū)間參數(shù) |
Write Page Scan Activity | 0x001C | 寫尋呼掃描間隔、尋呼掃描區(qū)間參數(shù) |
Read Inquiry Scan Activity | 0x001D | 讀查詢掃描間隔、查詢掃描區(qū)間參數(shù) |
Write Inquiry Scan Activity | 0x001E | 寫查詢掃描間隔、查詢掃描區(qū)間參數(shù) |
Read Authentication Enable | 0x001F | 讀取鑒權(quán)允許參數(shù)---控制藍(lán)牙設(shè)備是否對(duì)每個(gè)連接進(jìn)行鑒權(quán) |
Write Authentication Enable | 0x0020 | 寫取鑒權(quán)允許參數(shù)---控制藍(lán)牙設(shè)備是否對(duì)每個(gè)連接進(jìn)行鑒權(quán) |
Read Encryption Mode | 0x0021 | 讀加密模式數(shù)值---控制藍(lán)牙設(shè)備是否對(duì)每個(gè)連接進(jìn)行加密 |
Write Encryption Mode | 0x0022 | 寫加密模式數(shù)值---控制藍(lán)牙設(shè)備是否對(duì)每個(gè)連接進(jìn)行加密 |
Read Class Of Device | 0x0023 | 讀取設(shè)備類型參數(shù)值,用于區(qū)別設(shè)備能力 |
Write Class Of Device | 0x0024 | 寫設(shè)備類型參數(shù)值,用于區(qū)別設(shè)備能力 |
Read Voice Setting | 0x0025 | 讀取語音設(shè)置參數(shù)值,控制語音連接的各種設(shè)置 |
Write Voice Setting | 0x0026 | 寫語音設(shè)置參數(shù)值,控制語音連接的各種設(shè)置 |
Read Automatic Flush Timeout | 0x0027 | 對(duì)指定句柄,讀取刷新超時(shí)值 |
Write Automatic Flush Timeout | 0x0028 | 對(duì)指定句柄,寫入刷新超時(shí)值 |
Read Num Broadcast Retransmissions | 0x0029 | 讀取設(shè)備的廣播重復(fù)發(fā)送次數(shù),重復(fù)發(fā)送提高廣播消息的可靠性 |
Write Num Broadcast Retransmissions | 0x002A | 寫入設(shè)備的廣播重復(fù)發(fā)送次數(shù),重復(fù)發(fā)送提高廣播消息的可靠性 |
Read Hold Mode Activity | 0x002B | 讀取Hold Mode Activity的參數(shù)值,用來確定Hold掛起的時(shí)間 |
Write Hold Mode Activity | 0x002C | 寫入Hold Mode Activity的參數(shù)值,用來確定Hold掛起的時(shí)間 |
Read Transmit Power Level | 0x002D | 對(duì)指定句柄,讀取傳輸功率的參數(shù)值 |
Read Synchronous Flow Control Enable | 0x002E | 讀取SCO流量控制設(shè)置。通過使用該設(shè)置,主機(jī)控制器決定是否主機(jī)控制器發(fā)送與SCO連接句柄相關(guān)的完成分組事件的數(shù)量 |
Write Synchronous Flow Control Enable | 0x002F | 讀寫入SCO流量控制設(shè)置。通過使用該設(shè)置,主機(jī)控制器決定是否主機(jī)控制器發(fā)送與SCO連接句柄相關(guān)的完成分組事件的數(shù)量 |
Set Host Controller To Host Flow Control | 0x0031 | 主機(jī)控制器的打開、關(guān)閉,主機(jī)控制器到主機(jī)的流量控制 |
Host Buffer Size | 0x0033 | 主機(jī)通知主機(jī)控制器自己的ACL、SCO數(shù)據(jù)緩沖區(qū)大小。主機(jī)控制器分段傳輸數(shù)據(jù),而數(shù)據(jù)不會(huì)超出這個(gè)范圍 |
Host Number Of Completed Packets | 0x0035 | 當(dāng)主機(jī)對(duì)于任何連接的句柄準(zhǔn)備接受較多的HCI指令時(shí),該指令用于通過主機(jī)指出主機(jī)控制器 |
Read Link Supervision Timeout | 0x0036 | 讀取連接管理超時(shí)參數(shù)。主從藍(lán)牙設(shè)備用該參數(shù)監(jiān)視鏈路丟失情況 |
Write Link Supervision Timeout | 0x0037 | 寫入連接管理超時(shí)參數(shù)。主從藍(lán)牙設(shè)備用該參數(shù)監(jiān)視鏈路丟失情況 |
Read Number of Supported IAC | 0x0038 | 讀取查詢掃描期間本地藍(lán)牙掃描的查詢識(shí)別碼(ICA)的數(shù)值 |
Read Current IAC LAP | 0x0039 | 讀取創(chuàng)建在查詢掃描期間本地藍(lán)牙設(shè)備正同時(shí)掃描的藍(lán)牙識(shí)別碼的LAP |
Write Current IAC LAP | 0x003A | 寫入創(chuàng)建在查詢掃描期間本地藍(lán)牙設(shè)備正同時(shí)掃描的藍(lán)牙識(shí)別碼的LAP |
Read Page Scan Period Mode | 0x003B | 讀取本地藍(lán)牙設(shè)備的強(qiáng)制尋呼掃描區(qū)間模式 |
Write Page Scan Period Mode | 0x003C | 寫入本地藍(lán)牙設(shè)備的強(qiáng)制尋呼掃描區(qū)間模式 |
Read Page Scan Mode | 0x003D | 讀取本地藍(lán)牙設(shè)備的默認(rèn)尋呼掃描區(qū)間模式 |
Write Page Scan Mode | 0x003E | 寫入本地藍(lán)牙設(shè)備的默認(rèn)尋呼掃描區(qū)間模式 |
(4)、信息指令參數(shù)
Read Local Version Information | 0x0001 | 讀取本地藍(lán)牙版本信息 |
Read Local Supported Features | 0x0003 | 讀取本地藍(lán)牙設(shè)備特征表 |
Read Local Extended Features | 0x0004 |
|
Read Buffer Size | 0x0005 | 返回HCI緩沖容量。緩沖容量用于傳輸緩沖數(shù)據(jù) |
Read Country Code [Deprecated] | 0x0007 | 讀取國家代碼狀態(tài)參數(shù)值 |
Read BD ADDR | 0x0009 | 讀取BD_ADDR的參數(shù)值 |
(5)、狀態(tài)指令參數(shù)
Read Failed Contact Count | 0x0001 | 讀取對(duì)于其他設(shè)備特殊連接的Failed Contact Count參數(shù)值。Failed Contact Count記錄在刷新時(shí)終止及當(dāng)前正在傳輸?shù)腖2CAP數(shù)據(jù)指令被自動(dòng)刷新后,主單元或從單元不能連續(xù)響應(yīng)事件次數(shù) |
Reset Failed Contact Count | 0x0002 | 復(fù)位時(shí)對(duì)于其他設(shè)備的連接的Failed Contact Count的參數(shù)值。Failed Contact Count記錄在刷新時(shí)終止及當(dāng)前正在傳輸?shù)腖2CAP數(shù)據(jù)指令被自動(dòng)刷新后,主單元或從單元不能連續(xù)響應(yīng)事件次數(shù) |
Get Link Quality | 0x0003 | 讀取指定連接句柄的Link Quality的值 |
Read rssI | 0x0005 | 讀取對(duì)于其他藍(lán)牙設(shè)備連接句柄的接收信號(hào)強(qiáng)度指示 |
Read AFH Channel Map | 0x0007 |
|
Read BD Clock | 0x0009 |
|
(6)、測試指令
Read Loopback Mode | 0x0001 | 讀取主機(jī)端控制器會(huì)送模式的設(shè)置值。回送模式設(shè)置可以確定信息發(fā)送路徑 |
Write Loopback Mode | 0x0002 | 寫入主機(jī)控制器會(huì)送模式的設(shè)置值。回送模式設(shè)置可以確定信息發(fā)送路徑 |
Enable Device Under Test Mode | 0x0003 | 允許本地藍(lán)牙設(shè)備模塊通過LMP測試指令接入測試模式。當(dāng)主機(jī)要求本地設(shè)備作為待測試設(shè)備,實(shí)現(xiàn)藍(lán)牙測試模式文件中規(guī)定測試場景,則發(fā)送該指令 |
(7)、錯(cuò)誤代碼
錯(cuò)誤代碼 | 錯(cuò)誤含義 | 錯(cuò)誤代碼 | 錯(cuò)誤含義 |
0x01 | 位置HCI指令 | 0x14 | 由于另一端引起連接中斷:資源限制 |
0x02 | 不能連接 | 0x15 | 由于另一端引起連接中斷:關(guān)機(jī) |
0x03 | 硬件故障 | 0x16 | 本機(jī)中斷連接 |
0x04 | 尋呼超時(shí) | 0x17 | 重復(fù)嘗試 |
0x05 | 身份驗(yàn)證失敗 | 0x18 | 不允許匹配 |
0x06 | 鍵丟失 | 0x19 | 未知LMP PDU |
0x07 | 存儲(chǔ)器已滿 | 0x1A | 不支持遠(yuǎn)端特性 |
0x08 | 連接超時(shí) | 0x1B | 拒絕SCO補(bǔ)償 |
0x09 | 最大連接數(shù) | 0x1C | 拒絕SCO間歇模式 |
0x0A | 連接到設(shè)備A的最大SCO連接數(shù) | 0x1D | 拒絕SCO無線模式 |
0x0B | ACL連接已存在 | 0x1E | 非法鏈路管理參數(shù) |
0x0C | 指令非法 | 0x1F | 未特別指明錯(cuò)誤 |
0x0D | 由于資源有限,主機(jī)被拒絕 | 0x20 | 不支持鏈路管理器協(xié)議參數(shù) |
0x0E | 由于安全原因,主機(jī)被拒絕 | 0x21 | 不允許角色改變 |
0x0F | 由于遠(yuǎn)端設(shè)備單連接設(shè)備,主機(jī)拒絕 | 0x22 | 鏈路管理響應(yīng)超時(shí) |
0x10 | 主機(jī)超時(shí) | 0x23 | 鏈路管理錯(cuò)誤處理事務(wù)沖突 |
0x11 | 不支持特性或參數(shù)值 | 0x24 | 不允許LMP PDU |
0x12 | 非法主機(jī)控制接口指令 | 0x25~0xFF | 保留 |
0x13 | 由于另一端引起連接中斷:用戶中斷連接 |
|
|
二、邏輯鏈路控制與適配協(xié)議 L2CAPL2CAP位于基帶之上,將基帶的數(shù)據(jù)分組轉(zhuǎn)換為便于高層應(yīng)用的數(shù)據(jù)分組格式,并提供協(xié)議復(fù)用和服務(wù)質(zhì)量交換等功能。L2CAP只支持ACL數(shù)據(jù)傳輸,不支持SCO數(shù)據(jù)。L2CAP本身不提供加強(qiáng)信道可靠性和保證數(shù)據(jù)完整性的機(jī)制,其信道的可靠性依靠基帶提供。
1、協(xié)議復(fù)用:底層傳輸協(xié)議沒有提供對(duì)高層協(xié)議的復(fù)用機(jī)制,因而L2CAP支持高層協(xié)議復(fù)用,L2CAP層可以區(qū)分其上的SDP、RFCOMM、TCS等。
2、分段重組:L2CAP層幫助實(shí)現(xiàn)基帶的短PDU和高層的長PDU相互傳輸,L2CAP本身不完成任何PDU的分段重組,具體的分段重組有低層和高層來完成。
3、服務(wù)質(zhì)量 Qualityof Serivce 信息的交換:藍(lán)牙建立連接的過程中,L2CAP允許交互藍(lán)牙所期望的服務(wù)質(zhì)量,建立完成后,通過監(jiān)視資源的使用情況,來保證服務(wù)質(zhì)量。
4、組抽象:L2CAP忽略地址組概念,他只關(guān)心數(shù)據(jù)。
L2CAP信道有三種類型:
A、面向連接信道:Connection-OrientedCO,用于兩個(gè)設(shè)備之間的數(shù)據(jù)通信。
B、無連接信道:Connection-LessCL,用來向一組設(shè)備廣播方式傳輸數(shù)據(jù)。CID為固定值:0x0002。
C、信令信道:Signaling,用于創(chuàng)建CO通道,可以通過協(xié)商改變CO信道的特性。
CL信道的L2CAP_PDU
長度(2bytes) | 信道ID(0x0002) | PSM(最小為2bytes) | 有效載荷 |
PSM為 協(xié)議/服務(wù)復(fù)用器Protocol/Service Multiplexer,一般為SDP、RFCOMM、TCS等中介協(xié)議復(fù)用。小于0x1000的值,0x0001對(duì)應(yīng)SDP,0x0003對(duì)應(yīng)RFCOMM、0x0005對(duì)應(yīng)TCS。(1)、藍(lán)牙邏輯鏈路控制與適配協(xié)議信令:L2CAP的信令通道的CID為0x0001
信令指令分組:
長度(2byte) | CID(0x0001) | 指令1 | 指令2 | …………… | 指令n |
L2CAP 分組頭部分 |
| ||||
信令指令格式:
代碼(1byte) | 標(biāo)識(shí)符(1byte) | 長度(2byte) | 數(shù)據(jù) |
信令指令頭 | |||

如上圖所示,一條L2CAP信令,1為L2CAP分組頭,2為信令指令頭,3為數(shù)據(jù)部分。
L2CAP:
Role:Master
Address:11
PDULength: 6 //指令的長度,值為06 00
ChannelID: 0x0001 (Signaling)//L2CAP的信令通道,值為01 00
Code:Information request//信息請(qǐng)求,值為0a
Identifier:1//標(biāo)識(shí)符,值為01
CommandLength: 2//命令長度,值為02 00
InfoType:Extended features supported//02 00
所以這條指令完整的為:
06 00 01 00 0a 01 02 00 02 00
信令的其他操作如下:

L2CAP信令指令碼:
Code | Description |
|
0x00 | RESERVED | 保留 |
0x01 | Command reject | 拒絕命令 |
0x02 | Connection request | 連接請(qǐng)求 |
0x03 | Connection response | 連接響應(yīng) |
0x04 | Configure request | 配置請(qǐng)求 |
0x05 | Configure response | 配置響應(yīng) |
0x06 | Disconnection request | 斷開請(qǐng)求 |
0x07 | Disconnection response | 斷開響應(yīng) |
0x08 | Echo request |
|
0x09 | Echo response |
|
0x0A | Information request | 信息請(qǐng)求 |
0x0B | Information response | 信息響應(yīng) |
1)、連接請(qǐng)求Connection_Request Code=0x02
代碼(0x02) | 標(biāo)識(shí)符(1字節(jié)) | 長度(2字節(jié)) | PSM(2字節(jié)) | 源CID(2字節(jié)) |
例如:SDP 連接請(qǐng)求
如上紅框所示:
代碼(0x02) | 標(biāo)識(shí)符(1字節(jié)) | 長度(2字節(jié)) | PSM(2字節(jié)) | 源CID(2字節(jié)) |
0x02 | 3 | 4 | SDP | 0x0040 |
2)、連接相應(yīng)Connection_Response Code=0x03
代碼(0x03) | 標(biāo)識(shí)符 | 長度 | 目標(biāo)CID | 源CID | 結(jié)果 | 狀態(tài) |
例如:SDP請(qǐng)求響應(yīng)
如上面紅框所示:
代碼(0x03) | 標(biāo)識(shí)符 | 長度 | 目標(biāo)CID | 源CID | 結(jié)果 | 狀態(tài) |
0x03 | 3 | 8 | 0x0040 | 0x0040 | 0x0000 |
|
(2)、MTU MAXIMUMTRANSMISSION UNIT最大傳輸單元
MTU最大傳輸單元,L2CAP應(yīng)用必須支持最小為48字節(jié)的MTU,默認(rèn)值為672
(3)、QoS 服務(wù)質(zhì)量
三、服務(wù)發(fā)現(xiàn)協(xié)議 SDP
SDP兩種服務(wù)發(fā)現(xiàn)模式:1)、服務(wù)搜索:查詢具有特定服務(wù)屬性的服務(wù);2)、服務(wù)瀏覽:簡單的瀏覽全部可用服務(wù)。(1)、PDU 格式:(協(xié)議數(shù)據(jù)單元)
PDU ID(1byte) | Transaction ID(2byte) | 參數(shù)長度(2byte) | 參數(shù)1 | …… | 參數(shù)N |
Header |
| ||||
不同PDU ID實(shí)現(xiàn)SDP的不同功能,概述如下表格:
Value | Parameter Descirption |
|
0x00 | Reserved | 保留 |
0x01 | SDP_ErrorResponse | 錯(cuò)誤響應(yīng) |
0x02 | SDP_ServiceSearchRequest | 服務(wù)搜索請(qǐng)求 |
0x03 | SDP_ServiceSearchResponse | 服務(wù)搜索響應(yīng) |
0x04 | SDP_ServiceAttributeRequest | 服務(wù)屬性請(qǐng)求 |
0x05 | SDP_ServiceAttributeResponse | 服務(wù)屬性響應(yīng) |
0x06 | SDP_ServiceSearchAttributeRequest | 服務(wù)搜索屬性請(qǐng)求 |
0x07 | SDP_ServiceSearchAttributeResponse | 服務(wù)搜索屬性響應(yīng) |
0x08-0xff | Reserved | 保留 |
(2)、服務(wù)記錄表SDP的服務(wù)記錄表對(duì)每一個(gè)服務(wù)進(jìn)行描述,每條記錄包含服務(wù)句柄、一組服務(wù)屬性:

Service Record Attributes:服務(wù)記錄;Service Record Handle 服務(wù)句柄;Attribute 服務(wù)屬性;

四、串口仿真協(xié)議 RFCOMM
為建立在串口之上的傳統(tǒng)應(yīng)用提供環(huán)境接口,使他們可以做比較少協(xié)議改動(dòng)就可以在藍(lán)牙無線通信無線鏈路上工作。多路串口仿真是RFCOMM的重要功能,通過多路復(fù)用器(multiplexer),一條L2CAP鏈路可以同時(shí) 多個(gè)串行應(yīng)用。兩臺(tái)設(shè)備間的串口仿真:
RFCOMM 兩個(gè)藍(lán)牙設(shè)備之間可以支持多達(dá)60多路仿真串口。
RFCOMM幀類型如下:
SABM | 異步平衡模式設(shè)置指令 |
UA | 未加編號(hào)的確認(rèn)響應(yīng) |
DM | 斷開連接模式響應(yīng) |
DISC | 斷開連接指令 |
UIH | 帶頭校驗(yàn)的未編號(hào)信息命令和響應(yīng) |

新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注