本系列的幾篇文章主要講述"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的實現(xiàn)方式有兩種,一種是Host和Controller實現(xiàn)在一個SOC上的單芯片方案,一種是Host和Controller實現(xiàn)在兩個芯片上的多芯片方案。通常HCI出現(xiàn)在多芯片實現(xiàn)的BLE Stack中。當然在單芯片BLE Stack方案中也可能有HCI,只是此時的HCI傳輸介質是RAM。
1.1?Host 和 Controller 數(shù)據(jù)交互
Host可以通過HCI下發(fā)HCI CMD和HCI ACL到Controller;Controller可以通過HCI上報HCI Event和HCI ACL。
下面以Host控制Controller發(fā)送adv并與Master建立connection的例子講解HCI的使用。
初始時Host發(fā)送HCI_LE_Set_Adv_Param_Cmd設置ADV參數(shù),Controller執(zhí)行完Cmd以后上報HCI_Command_Complete_Event到Host;
Host緊接著發(fā)送HCI_LE_Set_Adv_Data_Cmd和HCI_LE_Set_Scan_Rsp_Data來配置ADV數(shù)據(jù)和Scan Rsp Data;
Host下發(fā)HCI_LE_Set_Adv_Enable_Cmd以使能ADV,controller將在37/38/39號通道上發(fā)送ADV。此時手機可以收到controller發(fā)送的ADV,并可以與之建立connection。
本地設備收到手機的Connection_Req以后,connection創(chuàng)建完成,controller會上報HCI_LE_Connection_Complete_Event到Host,之后可以交互數(shù)據(jù)。
1.2Telink BLE多連接Controller Block Diagram
下圖是Telink BLE多連接 Controller軟件架構。Telink BLE 多連接Controller是按照標準BLE Spec實現(xiàn)的,HCI是由HCI Transport和HCI Protocol處理兩部分構成。
目前Telink BLE多連接Controller支持BLE 5.0全功能feature,具體細節(jié)如下表。
2Telink BLE 多連接 HCI Transport
HCI Transport是Host和Controller之間交換數(shù)據(jù)的物理接口,這種物理接口可以是UART、USB等。
Telink BLE多連接Controller目前只支持UART接口的HCI Transport,其他接口的HCI Transport后面可以根據(jù)需要擴展。
2.1Telink BLE 多連接 HCI Transport 軟件架構
UART接口的HCI Transport有兩種協(xié)議(H4和H5 )可以選擇。這兩種協(xié)議Telink 多連接BLE Controller都是支持的。
Telink BLE多連接 HCI Transport主要由兩部分組成:HCI Transport Protocol實現(xiàn)層和HCI Transport 控制管理層。目前HCI Transport Protocol實現(xiàn)了兩種協(xié)議,H4和H5,可以根據(jù)需求添加其他協(xié)議的實現(xiàn)。HCI Transport Control實現(xiàn)了對HCI Transport各種協(xié)議的管理和控制,同時也負責與HCI對接,它提供用戶使用HCI Transport所需要的一切,因此,使用HCI Transport的用戶只需要關注該層即可。
(1)?H4 Protocol
H4協(xié)議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用于數(shù)據(jù)的收發(fā);Slip層實現(xiàn)了H5 PDU的編碼器和解碼器,負責H5 PDU的編碼和解碼;H5 Handler實現(xiàn)了H5 PDU的解析和處理、H5 Link的創(chuàng)建以及流量控制和重傳控制。
3Telink BLE 多連接 Controller 常見問答
1、單連接SDK和多連接SDK是否都支持Controller工程?
單連接Controller工程支持BLE 4.2,并且后面不再升級
多連接Controller工程支持BLE 5.0,后面將不斷升級
2、是否支持BT HCI CMD?
Telink 多連接BLE Controller HCI支持spec規(guī)定的LE 相關的HCI CMD,不支持BT相關HCI CMD
如果用戶需要支持BT HCI CMD,我們可以做適配處理
3、BLE Controller是否支持低功耗?
默認不支持低功耗
如果需要支持低功耗需要和Host配合開發(fā);
Host和Controller之間需要有GPIO喚醒源
Host有數(shù)據(jù)發(fā)送時,通過GPIO首先喚醒Controller,然后通過UART發(fā)送HCI CMD和HCI ACL
如果Controller有數(shù)據(jù)需要發(fā)送給Host也通過GPIO喚醒源喚醒Host,然后發(fā)送數(shù)據(jù)
需要注意的是:我們芯片的不支持UART喚醒的,所以需要通過GPIO喚醒,并且芯片從sleep起來需要一定恢復時間, 因此Host喚醒Controller以后需要等一會才能發(fā)送數(shù)據(jù)。
4、Controller丟包問題
如遇Host下發(fā)的數(shù)據(jù)包,Controller HCI有丟包現(xiàn)象,大概率是UART丟包了,因為正常情況Host到Controller是有流控的,不會出現(xiàn)丟包現(xiàn)象,除非Host沒有對流控做處理;
如遇Controller接收到了remote數(shù)據(jù),但是上報給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默認是空,但是可以根據(jù)用戶需求添加;比如用戶可能需要添加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協(xié)議的DFU功能的,這個DFU功能做過大量測試,功能穩(wěn)定。
這套DFU在Telink多連接BLE Controller和BT Controller相關項目中都有使用。
審核編輯:湯梓紅
評論
查看更多