本系列的幾篇文章主要講述"Bluetooth LE Multiple Connection"。此SDK是Telink BLE多連接應用的SDK,Telink多連接SDK還提供標準的 BLE Controller,通過標準HCI與其他BLE Host配合。接下來,小編將帶您詳細了解BLE Controller相關介紹并答疑。
1Telink BLE 多連接 HCI
BLE Stack由Controller和Host兩部分組成。BLE Stack的實現方式有兩種,一種是Host和Controller實現在一個SOC上的單芯片方案,一種是Host和Controller實現在兩個芯片上的多芯片方案。通常HCI出現在多芯片實現的BLE Stack中。當然在單芯片BLE Stack方案中也可能有HCI,只是此時的HCI傳輸介質是RAM。
1.1?Host 和 Controller 數據交互
Host可以通過HCI下發HCI CMD和HCI ACL到Controller;Controller可以通過HCI上報HCI Event和HCI ACL。
下面以Host控制Controller發送adv并與Master建立connection的例子講解HCI的使用。
初始時Host發送HCI_LE_Set_Adv_Param_Cmd設置ADV參數,Controller執行完Cmd以后上報HCI_Command_Complete_Event到Host;
Host緊接著發送HCI_LE_Set_Adv_Data_Cmd和HCI_LE_Set_Scan_Rsp_Data來配置ADV數據和Scan Rsp Data;
Host下發HCI_LE_Set_Adv_Enable_Cmd以使能ADV,controller將在37/38/39號通道上發送ADV。此時手機可以收到controller發送的ADV,并可以與之建立connection。
本地設備收到手機的Connection_Req以后,connection創建完成,controller會上報HCI_LE_Connection_Complete_Event到Host,之后可以交互數據。
1.2Telink BLE多連接Controller Block Diagram
下圖是Telink BLE多連接 Controller軟件架構。Telink BLE 多連接Controller是按照標準BLE Spec實現的,HCI是由HCI Transport和HCI Protocol處理兩部分構成。
目前Telink BLE多連接Controller支持BLE 5.0全功能feature,具體細節如下表。
2Telink BLE 多連接 HCI Transport
HCI Transport是Host和Controller之間交換數據的物理接口,這種物理接口可以是UART、USB等。
Telink BLE多連接Controller目前只支持UART接口的HCI Transport,其他接口的HCI Transport后面可以根據需要擴展。
2.1Telink BLE 多連接 HCI Transport 軟件架構
UART接口的HCI Transport有兩種協議(H4和H5 )可以選擇。這兩種協議Telink 多連接BLE Controller都是支持的。
Telink BLE多連接 HCI Transport主要由兩部分組成:HCI Transport Protocol實現層和HCI Transport 控制管理層。目前HCI Transport Protocol實現了兩種協議,H4和H5,可以根據需求添加其他協議的實現。HCI Transport Control實現了對HCI Transport各種協議的管理和控制,同時也負責與HCI對接,它提供用戶使用HCI Transport所需要的一切,因此,使用HCI Transport的用戶只需要關注該層即可。
(1)?H4 Protocol
H4協議PDU由HCI Type Indicator和Payload構成;HCI Type Indicator指明了HCI Packet Type;Payload是與HCI Type Indicator對應的HCI Protocol,如:HCI CMD、HCI ACL、HCI Event等。
H4 PDU將在UART接口上傳輸。
(2)?H5 Protocol
H5又稱3wire UART。H5支持軟件流控和重傳機制。相較H4來說,H5具有更高的可靠性,但是其傳輸效率沒有H4高,且消耗的資源比H4大。
H5 PDU(Protocol Data Unit)在傳輸之前需要被編碼,在解析H5 PDU之前需要解碼,H5 PDU的編解碼由Slip Layer完成。
Telink H5 Protocol軟件架構如下圖。UART用于數據的收發;Slip層實現了H5 PDU的編碼器和解碼器,負責H5 PDU的編碼和解碼;H5 Handler實現了H5 PDU的解析和處理、H5 Link的創建以及流量控制和重傳控制。
3Telink BLE 多連接 Controller 常見問答
1、單連接SDK和多連接SDK是否都支持Controller工程?
單連接Controller工程支持BLE 4.2,并且后面不再升級
多連接Controller工程支持BLE 5.0,后面將不斷升級
2、是否支持BT HCI CMD?
Telink 多連接BLE Controller HCI支持spec規定的LE 相關的HCI CMD,不支持BT相關HCI CMD
如果用戶需要支持BT HCI CMD,我們可以做適配處理
3、BLE Controller是否支持低功耗?
默認不支持低功耗
如果需要支持低功耗需要和Host配合開發;
Host和Controller之間需要有GPIO喚醒源
Host有數據發送時,通過GPIO首先喚醒Controller,然后通過UART發送HCI CMD和HCI ACL
如果Controller有數據需要發送給Host也通過GPIO喚醒源喚醒Host,然后發送數據
需要注意的是:我們芯片的不支持UART喚醒的,所以需要通過GPIO喚醒,并且芯片從sleep起來需要一定恢復時間, 因此Host喚醒Controller以后需要等一會才能發送數據。
4、Controller丟包問題
如遇Host下發的數據包,Controller HCI有丟包現象,大概率是UART丟包了,因為正常情況Host到Controller是有流控的,不會出現丟包現象,除非Host沒有對流控做處理;
如遇Controller接收到了remote數據,但是上報給host時丟包了,這個大概率是HCI Tx FIFO 不夠用或者UART Baudrate太小導致,通常調大UART Baudrate和調大HCI Tx FIFO number即可。建議UART Baudrate至少1M。
5、HCI Vendor OGF
HCI Vendor OGF是HCI特意留給用戶自定義使用的一個Opcode組,stack默認是空,但是可以根據用戶需求添加;比如用戶可能需要添加Set_Tx_Power,Read_Tx_Power,Set_Freq_Offset,Read_Freq_Offset, Set_BD_ADDR等。
這個地方無法做成通用的,因為不同用戶要求的cmd格式可能不一樣。
6、Controller是否支持Device Firmware Update(DFU)?
Controller目前是支持基于UART和HCI協議的DFU功能的,這個DFU功能做過大量測試,功能穩定。
這套DFU在Telink多連接BLE Controller和BT Controller相關項目中都有使用。
審核編輯:湯梓紅
評論
查看更多