藍牙基礎知識進階——物理鏈路和邏輯傳輸

藍牙基礎知識進階——物理鏈路和邏輯傳輸

三、物理鏈路

物理鏈路是用來表示設備之間的物理連接的,它和對應的物理通道是相關聯的。

Q1:物理鏈路是否有檢測通路狀態的機制

這個問題很好,無線傳輸在其便捷性的對面總是存在不可避免的問題。而通路的異常斷開就是我們經常遇到的問題,而且可以說這可能是沒有任何徵兆的斷開。物理鏈路層對這種情況是有處理的方法的,它引入了所謂的supervision timeout機制,在connected的狀態下,若是收到一個有效的包就會重新計時,當這個計時的時間到了,還沒有收到任何的包,我們就認爲鏈路已經斷開了。有一個需要注意的是,在低功耗的模式下,比如sniff mode等,本身他們的包發送和接收的間隔就比較長,我們的supervision timeout一定要大於這個間隔纔是合理,否則就是有問題的。

四、邏輯傳輸

邏輯傳輸是位於物理鏈路之上的一層,同樣的物理鏈路上可以有多條邏輯傳輸通道。

Q1:邏輯傳輸都有哪些類型

目前來看一共有5種類型的邏輯傳輸層位於物理鏈路上。他們分別是:

1SCO: Synchronous Connection-Oriented 即面向連接的同步邏輯傳輸。

2eSCO: Extended Synchronous Connection-Oriented擴展的面向連接的同步邏輯傳輸。

3ACL: Asynchronous Connection-Oriented 面向連接的異步邏輯傳輸

4ASB: Active Slave Broadcast活躍的slave 廣播邏輯傳輸

5PSB: ParkedSlave Broadcast休眠的slave關閉邏輯傳輸

總得來說,同步的邏輯傳輸是用來傳輸語音等對時間比較敏感的數據信息的,他有一些reservedslot用來進行同步,在eSCO中,就是通過這些reservedslot進行重傳的。而異步傳輸中每個slot都是對應,沒有reservedslot

Q2:同樣的物理通道是如何在邏輯層區分不同的slave

由於藍牙網絡結構的限制,一個master在同一個物理通道上是可以對應多個slave的。在邏輯層,是通過一個稱之爲“邏輯傳輸地址”(LT_ADDR)來進行區分各個slave的。它的長度是3bit,全0是用來廣播的。因爲是用來區分slave的,所以只有slave纔有這個地址,master是沒有的。需要注意的是這個地址只有在slave活躍的時候纔有效,當他斷開或者parked的時候,這個地址就立即沒有了哦。他產生於連接的建立或者role switch的過程中,因爲unpark並不會重新建立連接,所以它還必須在unpark的包中包含。

Q3:同步傳輸是否會重傳啊?同時存在的鏈路數目是否有限制?異步傳輸呢

對於SCO而言,是不會進行重傳的。所以對於只支持sco的耳機來說,我們可能會發現在較遠距離的通話過程中就會產生雜音,這是無法避免的,這也是esco存在的原因所在,esco是支持重傳的。

SCO中對master而言,同時存在的鏈路最大數目爲3條。而對slave而言,對同樣的master可以有最多3條鏈路存在,對不同的master則最多隻有2條鏈路存在。

對異步的ACL而言,重傳一般是在packet層次。masterslave之間只能有一條鏈路存在。

Q4:能否簡單介紹一下邏輯通路內部的傳輸機理


我們從TX(發送)和RX(接收)兩個方面來分析這個問題。對於TX而言,master端若是異步,則對每一個slave都有一個tx buffer。若是同步,則可能會有一個或多個buffer,這取決於SCOeSCO是否使用同樣的buffer。每個buffer都有兩個FIFO,一個是current一個是next,兩者並不是絕對的,而是交替變換的,如下圖4-1

所示。

4-1 TXbuffer的功能編程


對於異步傳輸而言,tx會把數據準備到nextdata FIFO。而packet composer總是從current data FIFO中去取packet,他們是不能同時在指向同一個FIFO的。在發送完了packet之後,收到了對方的ACK,就會進行S1的切換,也就是說S1a指向current data FIFO,而S2a則同時指向next data FIFO,進而完成數據的傳輸,若是沒有收到pacekt ACK,則S1的切換不會進行,他們繼續指向之前的FIFO,也就有了數據的重傳。對於重傳的packet就是有時效性的,若是一段時間還是沒有重傳出去,則會被flush命令刷掉。這裏強調一下,異步傳輸是packet爲指向進行切換的。


對於SCO/eSCO而言,數據的準備和傳輸和異步是類似的,不同之處在於S2的切換不是packet爲指向的,而是一段時間的interval爲指向進行的,他有一個T值,這個T值是兩邊協商出來的,沒隔這個T值就進行S2的切換。


對於datavoice混合的packet,因爲切換機制的不同,則有可能會出現voice已經更新了,而data還在重傳的現象。這一點要注意。


對於RX而言,機制是比較類似的。他的切換示意圖見圖4-2


4-2 RXbuffer的功能編程


TX一個不同點在於,在異步傳輸中,對所有的slave而言,master這端可能只有一個共同的rx buffer。而同步傳輸,不同的邏輯鏈路就是通過不同的buffer來進行區分的。從圖中可以明顯地看出RX bufferTX buffer是類似的,就不多做解釋。在異步傳輸中,若是RX buffer還沒有讀空就有新的packet來了,則會產生一個stop到下一個tx packet的頭中,這樣對端就會暫停發送,當rx buffer空了之後,這個stop就會在tx packet的頭中移除掉,從而可以繼續。


Q5:邏輯傳輸的過程中是否有流控


其實在上面解釋RX的機制的時候,我們就發現了流控的影子,是的,流控是存在的。流控的實現就是通過packet頭的FLOW域來實現的。需要注意的是,master和一個slave之間的流控並不會影響它和另外的slave之間數據的交互,同樣流控也是雙向獨立的。

文章來源:https://blog.csdn.net/u011960402/article/details/18254003

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章