用户工具

站点工具


侧边栏

CC2640R2&BLE5.0开发

关于我们

入门开始

视频教程

外设驱动

开发BLE应用

工具集

其他

cc2640r2f:le_2m_phy

介绍

BLE5-Stack 支持以每秒符号速率为 1 兆( Ms/s )。由于一个符号对应于一个数据位,因此与堆栈的高位相关联,比特率为 1Mb/s,这被称为 LE 1M PHY。LE 2M PHY 允许物理层以 2 Ms/s 的速率运行,从而实现比 LE 1M PHY 更高的数据传输速率。除了先前支持的 LE 1M PHY 之外,还将此 LE 2M PHY 功能引入蓝牙核心规范版本 5.0。

默认情况下,BLE5-Stack 的所有项目都支持 LE 2M PHY, 需要在应用程序中调用 API 来使用该功能。

添加了以下 HCI 命令来支持此功能:

  • LE 设置 PHY 命令( HCI_LE_SetPhyCmd())
  • LE 设置默认PHY命令( HCI_LE_SetDefaultPhyCmd())
  • LE 读 PHY 命令( HCI_LE_ReadPhyCmd())

当调用 HCI_LE_SetPhyCmd()时,Controller 启动 PHY 更新过程来更改 PHY。该过程会交换两个设备的 PHY 参数并根据 PHY 参数协商使用正确的 PHY 。根据对端设备的能力和优先级,PHY 更新过程可能不会导致有效 PHY 配置发生变化。

LE 2M PHY

LE 2M PHY 功能使用与 LE 1M PHY 相同的发射功率,唯一的变化是 PHY 中数据的调制。由于在相同的输出功率下进行更高的数据调制,LE 2M PHY 的能耗会降低。下表列出了两个 PHY 之间的一些区别:

参数 比较
能量消耗 在对等设备中的两个端点之间的逻辑连接,其特征在于它们的信道标识符( CID )
速率 服务数据单元:L2CAP 与上层交换的数据包,并使用本文档中规定的过程通过 L2CAP 通道透明传输
接收灵敏度 协议数据单元:包含 L2CAP 协议信息字段,控制信息和/或上层信息数据的数据包
输出功率 L2CAP 层实体可以接受的八位字节中的有效负载数据的最大大小(即 MPS 对应于最大 PDU 有效载荷大小)。

使用 LE 2M PHY 的主要优点是高吞吐量应用程序以更高的速度传输数据。

PHY 限制

以下是 BLE5-Stack 当前的 PHY 限制:

  • BLE 控制器不支持在连接期间链路层发起的 PHY 自动更改,连接总是以 1M PHY 形成。应用程序或对端设备调用 HCI_LE_SetPhyCmd()来切换到不同的 PHY。
  • BLE 控制器不支持连接在每个方向( RX 和 TX )上使用不同 PHY 的非对称连接。
  • HCI_LE_SetPhyCmd()中的 PHY_options 参数将在以后的版本中与 LE Long Range 功能一起得到支持。

默认 PHY

应用程序可以调用 HCI_LE_SetDefaultPhyCmd()设置主配置和从配置默认的 PHY 首选项。如果没有指定首选项或 API 没有被调用,则堆栈将使用所有支持的 PHY(1M + 2M)。类似地,对于 HCI_LE_SetPhyCmd(),如果没有指定首选项,则堆栈将使用默认 PHY(即由 HCI_LE_SetDefaultPhyCmd()定义的连接 PHY )),否则将使用参数中指定的内容。

HCI_LE_SetDefaultPhyCmd()应在连接之前调用,HCI_LE_SetPhyCmd()只能在连接期间被调用。另请注意 HCI_LE_SetDefaultPhyCmd()不更改 PHY,只有 HCI_LE_SetPhyCmd()可以更改 PHY。

在下面这两种情况下使用 HCI_LE_SetDefaultPhyCmd()设置的首选项:

  • 对端设备使用 HCI_LE_SetPhyCmd()启动 PHY 更新过程, 根据两个设备的首选项协商正确的 PHY
  • HCI_LE_SetPhyCmd()被调用,设置为 1 AllPhys 参数(表示对设置参数没有要求)

在 PHY 协商中可以看到这个例子。

更改 PHY

应用程序可以在连接中启动 PHY 更新过程,不需要考虑设备的角色。在 PHY 协商期间默认使用 HCI_LE_SetDefaultPhyCmd()设置的 PHY 首选项,除非 HCI_LE_SetPhyCmd()更改了 PHY 。HCI LE setdefaultmd()用于指定用于传输和接收所有后续连接的首选参数。但是当 HCI_LE_SetPhyCmd()用于更改连接的 PHY 时,更改仅适用于该连接(后续连接将恢复为使用默认 PHY )。

两者的参数 HCI_LE_SetDefaultPhyCmd()和 HCI_LE_SetPhyCmd()是相同的。ALL_PHYS 参数指定是否使用其他两个参数( TX_PHYS 和 RX_PHYS )。主值 '1' 表示客户端没有该方向的 PHY 偏好,而 '0' 表示应该使用相应的参数。可以将 TX_PHYS 和 RX_PHYS 设置为指定用于发送和接收的 PHY。请注意,当指定所有支持 PHY,堆栈总是试图一组 PHY 协商期间选择最快的 PHY 。

下面的序列图 1 显示了主机启动 PHY 更新过程的用例。

图1. 主机启动 PHY 更新过程

或者图 2 中从设备也可以使用与以下相同的 API 启动 PHY 更新过程。

图2. 从设备启动 PHY 更新过程

如果 PHY 没有改变(例如,如果主机尝试更改为 Slave 不支持的 PHY ),那么只有启动 PHY Update 过程的一方将获得 hciEvt_BLEPhyUpdateComplete_t事件,另一方将不会收到 hciEvt_BLEPhyUpdateComplete_t 事件,如图 1 和图 2 中虚线箭头所示。

加入我们

文章所有代码、工具、文档开源。加入我们QQ群 591679055获取更多支持,共同研究CC2640R2F&BLE5.0。

CC2640R2F&BLE5.0-乐控畅联 © Copyright 2017, 成都乐控畅联科技有限公司.

cc2640r2f/le_2m_phy.txt · 最后更改: 2021/06/22 23:14 (外部编辑)