本系列的几篇文章主要讲述"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相关项目中都有使用。
审核编辑:汤梓红
评论
查看更多