資源描述:
《低功耗藍牙(ble)學習記錄》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、RW_BLE_CORE記錄傳輸信道BLE的傳輸信道在2.4G頻段有40個channel。包括2種物理信道:廣播信道和數據信道。數據幀中設置AccessAddress用于標識該信道,防止信道碰撞。ChannelMAP如下:數據幀通信藍牙幀結構如下:Preamble:根據AccessAddress而定,假如AA的LSB(最右bit)bit為1,則前導便是10101010b,反之則為01010101b。AccessAddress:廣播幀的AA為:0x8E89BED6。其他情況可以是一個32bit的隨機數。AA需滿足以下條
2、件·不超過連續(xù)6個1或者0?!づc廣播幀的AA不同bit超過1個?!げ荒?byte相同?!?1跳變不能超過24次·MSB6bit01跳變超過2次。以下逐個介紹PDU。一、AdvertisingChannelPDU藍牙廣播幀幀結構其中Header的幀格式如下:其中,a、廣播幀類型(PDUType)分為以下幾類:?ADV_IND:connectableundirectedadvertisingevent?ADV_DIRECT_IND:connectabledirectedadvertisingevent?ADV_NONC
3、ONN_IND:non-connectableundirectedadvertisingevent?ADV_SCAN_IND:scannableundirectedadvertisingeventb、Length:3~37bytes廣播幀分為很多種,其區(qū)別就是payload所代表的意義不同,以下分別對幾種廣播幀作分別闡釋:1、ADV_INDADV_IND的payload格式如下:在廣播幀幀頭中的TxAdd位是廣播地址的標示位:TxAdd==0:AdvA地址為公用地址;TxAdd==1:AdvA地址為隨機地址。Adv
4、Data則是廣播HOST的廣播數據。2、ADV_DIRECT_IND這種幀用于直接接入的廣播事件。ADV_DIRECT_IND的payload幀格式如下:其中AdvA的意義與ADV_IND相同。InitA為廣播發(fā)起者地址:RxAdd==0:發(fā)起者地址是公用地址;RxAdd==1:發(fā)起者地址是隨機地址。注意:該幀不包含任何HOST數據。3、ADV_NONCONN_IND用于不可接入不直達(non-connectableundirected)的網絡。其payload意義與ADV_IND類似。4、ADV_SCAN_IND
5、用于可掃描不直達網絡。Payload意義與ADV_IND類似。二、ScaningPDUs1)SCAN_REQ:這是掃描請求幀,處于廣播狀態(tài)的接收設備接收這種幀。此處,ScanA為掃描者的地址,其地址由TxAdd控制是公共地址還是隨機地址。AdvA為該掃描幀的目的地址。由RxAdd控制意義。2)SCAN_RSP掃描確認。處于廣播狀態(tài)的設備在收到掃描請求后,需要回復掃描確認幀。AdvA地址意義由TxAdd確定。ScanRspData為廣播端的附帶數據。三、InitiatingPDU該部分為連接發(fā)起協議。發(fā)起的幀格式僅一
6、種:CONNECT_REQ。由發(fā)起方發(fā)送該幀,廣播方接收該幀。1)CONNECT_REQCONNECT_REQ幀格式如下:TxAdd確認InitA地址為公共地址還是隨機地址;RxAdd確認AdvA地址為公共地址還是隨機地址。LLData的數據格式如下:AA:AccessAddressCRCInit:CRC校驗的初始值,它應該是LinkLayer產生的一個隨機值。WinSize:發(fā)送窗長度參數。transmitWindowSize=WinSize*1.25ms。WinOffset:發(fā)送窗起始偏移量。TransmitW
7、indowOffset=WinOffset*1.25ms。上述兩個window意義如下:Interval:確定connectinterval的時間長度。connInterval=Interval*1.25ms。Latency:connSlaveLatency=Latency。TimeOut:connSupervisionTimeout=Timeout*10ms(100ms~32s之間),當兩幀數據之間的時間間隔超過6*connInterval或者connSupervisionTimeout時,則認為連接丟失。ChM
8、:即ChannelMAP,一共0~36個信道。LSB代表channel0,哪一個是1,則哪一個信道有效。Channel37~39保留。Hop:5~16之間的隨機值,用于設置HopIncrement。用于計算不使用的信道編號。unmappedChannel=(lastUnmappedChannel+hopIncrement)mod37如果計算結果是屬于保留信道