主要内容

使用状态流建模蓝牙低能耗链路层

这个例子展示了如何使用一个独立的Stateflow®图表来建模蓝牙®低能量(BLE)链路层中的状态机。

蓝牙技术是一种无线接口,旨在取代连接便携式和固定电子设备的电缆。蓝牙特殊兴趣小组行业联盟为这项技术定义了两组标准:蓝牙低能耗(BLE)和蓝牙基本速率/增强数据速率(BR/EDR)。BLE器件的特点是低功耗和低成本。这些设备的工作无线电频率范围为2.4000 GHz到2.4835 GHz。工作频带分为40个信道,每个信道的带宽为2 MHz。用户数据包的传输通道为0 ~ 36。广告数据包在通道37、38、39传输。

BLE协议栈的功能分为三个主要层:

  • 控制器层包括低能物理层(PHY)、链路层(LL)和控制器侧主控制器接口(HCI)。由这个例子建模的状态机是BLE协议栈的这一部分的链路层的一部分。

  • 主机层包括主机端HCI、逻辑链路控制和适应协议(L2CAP)、属性协议(ATT)、通用属性配置文件(GATT)、安全管理器协议(SMP)和通用访问配置文件(GAP)。这一层还包含BLE网格堆栈,它由广告承载、网络、下层传输、上层传输、访问、基础模型和模型层组成。

  • 应用程序配置文件和服务层(APP)是定义使用配置文件并实现蓝牙应用程序之间互操作性的用户界面。

有关更多信息,请参见蓝牙技术概述(蓝牙工具箱)蓝牙协议栈(蓝牙工具箱),蓝牙Mesh组网(蓝牙工具箱)

确定BLE设备的工作模式

在BLE协议栈中,链路层管理无线电的状态,以定义设备的角色为发布者或扫描器。该层直接与PHY层连接,PHY层使用三个发布通道(37、38和39)来传输和接收数据包。

在本例中,是独立的状态流图sf_bluetooth.sfx定义链路层的工作模式。图表有三种状态:备用广告,扫描。最初,备用State为active,表示设备处于空闲状态。在下一个时间步骤中,图表将过渡到广告扫描状态,这取决于本地数据的值TxData。此值表示主机层中是否有来自广告承载方的数据可用于传输。

如果有可用数据,则图表转换为广告状态。当此状态为激活状态时,设备在三个发布通道中循环,并在每个通道中传输相同的数据包。图表仍在广告状态为广告间隔,然后返回备用状态。广告间隔被分为三个检查点时间戳,分别对应于三个广告通道。在本例中,广告间隔至少由20毫秒组成,检查点时间戳分别为1毫秒(通道37)、9毫秒(通道38)和17毫秒(通道39)。

如果没有可用数据,则图表将转换到扫描状态。当此状态为活动状态时,PHY层被动地扫描其中一个广告通道以获取新数据。如果PHY层收到一个数据包,链路层将它传递给广告承载层。图表仍在扫描状态,然后返回到备用状态。此时,如果仍然没有可用的数据,图表将选择一个新的广告渠道并开始另一个扫描间隔。在本例中,扫描间隔为50毫秒。

模拟BLE链路层

这个脚本sf_bluetooth_demo.m创建一个BLE链路层对象bleLinkLayer并模拟广告载体上10秒的网状通信。链接层对象依赖于独立的图表sf_bluetooth.sfx用于控制逻辑和链路层队列对象bleQueue用于存储来自广告承载者的数据。

该模拟由10,000个时间步组成。每个时间步表示链路层对象的执行(对应于1毫秒的模拟时间),通常由以下步骤组成:

  1. 如果链路层队列不为空,则读取数据包。队列中的数据表示链路层从广告承载层获得的广告数据包。

  2. 设置图表数据的值TxData并执行独立图表。在这一步中,图表确定设备是充当广告商还是扫描仪。

  3. 如果图表在广告。传输状态,使用从链路层队列中读取的数据生成BLE链路层发布通道协议数据单元(PDU)。PDU代表PHY层的传输。有关生成和配置广告通道PDU的详细信息,请参见bleLLAdvertisingChannelPDU(蓝牙工具箱)bleLLAdvertisingChannelPDUConfig(蓝牙工具箱)

有两种例外情况:

  • 每隔1000个时间步,脚本在执行链路层对象之前将数据推入链路层队列。该数据表示链路层从广告承载层获得的广告数据包。

  • 每隔2500个时间步,脚本生成一个BLE链路层广告通道PDU,它表示PHY层接收到的广告数据包。然后脚本执行链接层对象。如果图表在扫描状态,链路层对象尝试解码PDU,如果解码成功,将PDU传递给广告承载层。有关PDU解码的更多信息,请参见bleLLAdvertisingChannelPDUDecode(蓝牙工具箱)

模拟完成后,脚本输出一个摘要,其中列出链路层传输和接收的数据包和字节数。

链路层发送的pdu数:27链路层发送的pdu数:702链路层接收的pdu数:4链路层接收的pdu数:112

在模拟过程中,图表动画提供了算法运行时行为的可视化指示。注意,图表动画会降低性能。为了减少示例的运行时间,请在运行脚本之前关闭图表。

另请参阅

(蓝牙工具箱)|(蓝牙工具箱)|(蓝牙工具箱)

相关的话题