赞
踩
HCI上传输的5种数据:
HCI层和LL层的关系
Host可以向Controller发送一系列的命令来控制Controller工作,比如广播命令,连接命令(Controller收到连接命令之后,LL层会发出一个CONNECT_REQ的广播包)
举例说明,Host向Controller发送扫描的命令。
一旦控制器与其他设备建立了连接,控制器的底层HCI接口就创建了一个HCI信道,我们使用一个连接句柄来标识这个HCI信道。连接句柄即用来标示主机交给控制器并准备发送给对端设备的数据,又用来标示控制器从对端设备收到的准备发送给主机的数据。
详见 蓝牙核心卷5.2, Vol 4 , Part E ,5
命令包的格式如下:
命令包是Host层发送给Controller的。
Controller应能够接受最多 255 字节数据的 HCI 命令包,不包括 HCI 命令包头。 HCI 命令包头是包的前 3 个字节。
每个命令都分配了一个 2 字节的操作码(OpCode),用于唯一标识不同类型的命令。Opcode 参数分为两个字段,分别称为 OpCode Group Field (OGF) 和 OpCode Command Field (OCF)。 OGF 占据了 Opcode 的高 6 bit,而 OCF 占据了剩余的 10 bit。
0x3F 的 OGF 保留用于供应商特定的调试命令。操作码的组织允许在不完全解码整个操作码的情况下推断附加信息。
由全1组成的 OGF 已保留用于供应商特定的调试命令。这些命令是特定于供应商的,并在制造过程中用于更新固件的可能方法和调试。
具体的命令类型参看; 蓝牙核心卷5.2,Vol 4, Part E, 7.8
描述
HCI_LE_Create_Connection 命令用于创建一个 ACL 连接。
参数
LE_Scan_interval
扫描间隔
LE_Scan_Window
LE 扫描持续时间,大于或者等于扫描间隔。如果两者都设置为相同的值,则扫描应连续运行。
比如扫描间隔为100ms,扫描窗口为10ms,那么扫描的占空比为10%。理论上可以捕获到定向广播数据包的最低的占空比为0.4%,即每一秒钟扫描3.75ms。当然我们也可以把扫描间隔和扫描窗口设置成一样,这种情况就是满占空比,一直在扫描。比如扫描间隔和扫描窗口都是10ms,那么控制器将在10ms内一直扫描,并且每10ms切换一次广播通道。
Initiator_Filter_Policy,
决定是否使用白名单。如果不使用白名单,Peer_Address_Type 和 Peer_Address 参数指定要连接的广告设备的地址类型和地址。
Peer_Address_Type
对端设备地址类型
Peer_Address
对端设备地址
Own_Address_Type
自己的地址类型
Connection_Interval_Min
连接最小间隔
Connection_Interval_Max
连接最大间隔
Connection_Latency
可以忽略的连接事件个数
Supervision_Timeout
超时时间
Min_CE_Length
连接事件的最小长度
Max_CE_Length
连接事件的最大长度,Min_CE_Length 和 Max_CE_Length 参数是信息性参数,为控制器提供连接事件的预期最小和最大长度。 Min_CE_Length 参数应小于或等于 Max_CE_Length 参数。
产生事件
当 Controller 收到 HCI_LE_Create_Connection 命令时,Controller 会向 Host 发送 HCI_Command_Status 事件。当创建连接完成或取消连接,应生成 HCI_LE_Connection_Complete 或 HCI_LE_Enhanced_Connection_Complete 事件。如果创建了连接并且控制器支持 LE 通道选择算法#2 功能,则该事件应紧跟在 HCI_LE_Channel_Selection_Algorithm 事件之后。控制器不会发送 HCI_Command_Complete 事件来指示此命令已完成。 相反,HCI_LE_Connection_Complete 或 HCI_LE_Enhanced_Connection_Complete 事件指示此命令已完成。
acl data的数据格式:
数据包是指主机和控制器之间传输的应用数据。控制器接收来自主机的数据包,将其传给对端设备。对端设备收到数据之后,将其从控制器发往主机。
数据包总是以连接句柄作为第一个字段(12位),如果主机没有收到LE Connection Complete事件,则不能发送任何数据给对端设备;只有收到了该事件,主机才可以启动数据发送或者接收对端设备发送过来的数据。
Handle是连接句柄的低12位,PB Flag表示这个包是起始包(00b)还是延续包(01b),BC Flag对于BLE该值永远为0,接下来是数据长度。
连接句柄和PB BC之间的算法con_handle | (packet_boundary << 12) | (0 << 14)
事件的数据格式:
当有事件发送的时候Controller使用HCI Event通知Host。如果Controller发送一个 HCI 事件数据包,其中包含一个Host没有屏蔽并且不支持的事件代码或 LE 子事件代码,Host将忽略该数据包。主机应能够接受最多255字节数据的 HCI 事件数据包,不包括 HCI 事件数据包头。HCI数据包的前两个字节为包头。
具体的BLE事件类型参看; 蓝牙核心卷5.2,Vol 4, Part E, 7.7.65
描述
HCI_LE_Connection_Complete 两端的Controller向各自的Host通知连接成功。在创建连接时,Controller应分配一个 Connection_Handle,并在此事件中传递给主机。如果连接创建失败,则应将此事件提供给发出 HCI_LE_Create_Connection 命令的主机。此事件向发出 HCI_LE_Create_Connection 命令并接收 HCI_Command_Status 事件的主机指示连接创建失败或成功。
参数
Subevent_Code
Status
Connection_Handle
Role
Peer_Address_Type
Peer_Address
Connection_Interval
Connection_Latency
Supervision_Timeout
Master_Clock_Accuracy
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。