这个HCIUART传输层的目标是使在同一PCB上的两个UART之间的串行接口上使用蓝牙HCI成为可能。HCIUART传输层假定UART通信没有线路错误。
协议
传输层可通过UART发送五种HCI包,即HCI命令包、HCI事件包、HCIACL数据包、HCI同步数据包和HCIISO数据包。HCI命令数据包只能发送到蓝牙控制器,HCI事件数据包只能从蓝牙控制器发送,HCIACL/同步/ISO数据包可以从蓝牙控制器发送到蓝牙控制器发送。
HCI不提供区分这四种HCI数据包类型的能力。因此,如果HCI包通过公共物理接口发送,则必须根据下表2.1添加HCI包指示器。
HCI包指示器应在HCI包之前立即发送。所有四种HCI数据包都有一个长度字段,用于确定HCI数据包需要多少个字节。当接收到整个HCI包时,下一个HCI包需要下一个HCI包指示器。在UART传输层上,只允许HCI包指示器,后面跟着HCI包。
RS232设置
使用RTS/CTS的流量控制用于防止临时UART缓冲区溢出。它不应该用于HCI的流控制,因为HCI有自己的针对HCI命令、HCI事件和HCI数据的流控制机制。
如果CTS为1,则允许主机/控制器发送。
如果CTS为0,则不允许主机/控制器发送。
流量关闭响应时间定义了从将RTS设置为0到字节流实际停止的最大时间。
RS232信号应以零调制解调器的方式连接,即本地TXD应连接到远程RXD,而本地RTS应连接到远程CTS,反之亦然。
错误恢复
如果主机或控制器在通过RS232的通信中失去同步,则需要重置。同步丢失意味着检测到不正确的HCI包指示器,或者HCI包中的长度字段超出了范围。
如果UART同步在主机与控制器之间的通信中丢失,则控制器应发送一个HCI_Hardware_Error事件,告诉主机有关同步错误。然后,控制器将期望接收到来自主机的HCI_Reset命令,以执行重置。控制器还将使用从主机到控制器的字节流中的HCI_Reset命令来重新同步。
如果在控制器与主机之间的通信中UART同步丢失,则主机应发送HCI_Reset命令以重置控制器。然后,主机应该通过在从控制器到主机的字节流中寻找HCI_Reset命令的HCI_Command_Complete事件来重新同步。