分类:mcu

LE Data Length Extension

数据长度扩展( LE Data Length Extension )功能允许 LE 控制器在连接状态下发送高达 251 字节的 PDU,在连接期间的任何时刻,主从设备可以协商该 PDU 大小。

对比 BLE4.0/4.1 的控制器数据通道最大有效载荷为 27 字节,使能数据扩展功能后的 BLE4.2/BLE5.0 能够达到 251 ,数据速率提高了大约 2.5 倍。

一旦建立连接,控制器将以两种可能的方式之一进行操作:

  • 如果在连接之前,PDU 大小和传输时间都被设置为默认值(即 TX 和 RX 都为 27B,328us),则 CC2640R2F 将不会发起数据长度交换命令(即 LL_LENGTH_REQ 不发送)。

    如果对等连接的主从设备发送 LL_LENGTH_REQ ,此时对等设备同样以默认大小 LL_LENGTH_RSP 回应。

  • 如果在连接之前,PDU 的大小和传输时间收发双方或者有一方不是默认值,则设备的 LE 控制器将使用 LL_LENGTH_REQ 和 LL_LENGTH_RSP 控制 PDU 协商,选择一个较大的 PDU 有效负载。

    数据长度更新可由 Host 发起或 Controller 自主执行,主机或从机可以启动该过程。

数据长度更新过程完成后,两个控制器都会根据两个参数选择新的数据长度:PDU 大小和传输时间,同时被主从设备支持的最大长度将会被选择。考虑到时间来支持不同的数...

Logical Link Control and Adaptation Layer Protocol (L2CAP)

L2CAP 运行在 HCI 之上的 Host ,实现 Host 更高层(GAP、GATT、APP)和低层协议栈之间传输数据。

该层负责在 Host 和协议栈之间把交换的数据进行分割( segmentation )和重组( reassembly )以提供协议的多路处理能力。L2CAP 允许更高级别的协议和应用程序发送和接收高达 64KB(实际受限于蓝牙设备实际内存)的上层数据包(L2CAP 服务数据单元,SDU)。

图1. L2CAP 层数据传输示意图

蓝牙低功耗协议栈支持在链路层将 L2CAP PDU 分割( segmentation )和重组( reassembly )。这种分段允许 L2CAP 和构建在 L2CAP 之上的更高级协议(如属性协议 ATT )使用更大的有效负载,从而减少与较大数据传输不断拆分开销。当使用分片时,较大的数据包直接被分割成多个链路层数据包,并由对等设备的链路层重新组合。

图2. L2CAP 分割重组数据包

L2CAP PDU 的大小决定了属性协议最大传输单元( Attribute Protocol Maximum Transmission Unit ( ATT_MTU ))。默认情况下,LE 设备 L2CAP PDU 的大小为 27 字节,意味着在单个连接事件数据包可以传输的 LE 数据包的最大字节。在这种情况下,L2CAP 协议头为 4 字节,ATT_MTU...

Generic Attribute Profile (GATT)

GAP 层负责连接相关的功能,GATT 主要是负责在两个已经连接的设备之间进行交互数据。GAP 层把 BLE 设备区分为主机 Master(Central)和从机 Slave(Perpherial),在 GATT 层则区分为 Server 和 Client 。客户端读取和写入存储在服务端的特征值( Characteristics )。

Server 该设备包含由 GATT 客户端读取或写入的 characteristic。

Client 从 GATT 服务器读取或写入数据的蓝牙设备。

图1. Server 和 Client

GATT 层的 Profile、Service、Characteristics、Attributes 概念一定要深入理解,因为一旦建立连接后,不管是嵌入式端还是应用端进行数据交互的都是这些概念。为了帮助理解,抽象以下包含关系:

图2. GATT 层四种概念之间的抽象包含关系

如图 2 ,一个或者多个 Characteristic 组成一个 Service。一个多个 Service 组成 Profile。Characteristic 又由多个 Attributes 组成。每个 Attribute 由包含 Handle、Type、Permissions 三个属性。

下面着重理解 Characteristic,它是数据交互的最终实体,每个特征包含以下 4 个 Attribute...

Generic Access Profile (GAP)

GAP 分层负责设备建立连接的相关功能,包括设备发现、数据链路建立、终止、初始化安全管理和设备配置,参见下图 1 。

图1. GAP 分层的建立连接的示意图

在 Standby 状态,双方设备都处于未连接状态。Advertiser 尝试广播数据,Scanner 接收到广播数据后尝试进行扫描请求,并且得到扫描回复。此时 Scanner 产生连接意图,转变成 Initiator 发送连接请求,成功连接后发送广播的 Advertiser 作为 Master ,进行连接请求的 Initiator 成为 Slave。

  • Standby:复位后设备处于初始空闲状态。
  • Advertiser:设备正在通过特定数据进行广告,让任何 Initiator 设备知道它是可一个连接设备(此广告数据负载可以包含设备地址和一些其他数据,如设备名称)。
  • Scanner:扫描设备收到广告后,向广告客户发送扫描请求。广播者响应扫描响应。这个过程称为设备发现。当然扫描设备已经知道广告设备可以发起与其的建立连接。
  • Initiator:启动时,启动器必须指定要连接的对等设备地址。如果接收到与对等设备地址匹配的广告,则发起设备发送连接请求,该请求包含与广告设备连接所需的连接参数。
  • Master/Slave:当连接形成时,广播的发起者作为 Slave ,Initiator 建立者作为 Master。
  • Advertiser 进行广播

  • Scanner...

simple_peripheral 应用框架

本章节将详细讲解 CC2640R2F BLE5.0 的应用程序框架,我们希望您已经按照学习线路图储备了 CC2640R2F平台的软硬件架构知识 ,明白应用工程区分 App 和 Stack 工程管理。本章主要内容是围绕基于 TI-RTOS 的 App 应用程序框架。

图1. 应用程序框架图

以 simple_peripheral Demo 应用程序部分为例,包括以下内容:

  • Pre-main initialization
  • ICall
  • Simple Peripheral Task
  • Intertask Messages

main 函数包含在 IDE Startup 文件夹的资源文件 main.c 中。作为程序的入口,主要完成全局中断禁止、外设驱动初始化、电源管理、TI-RTOS 任务创建或构造、在启用 SYS / BIOS 内核调度时完成全局中断使能。main 函数不返回,将在整个项目生命周期内保留其资源。

基本 main.c 功能。

软件架构章节阐述了由于历史兼容原因会把整个应用工程区分 App 和 Stack 两个工程管理。因此,无法采用常规 API 调用和全局变量方式完成消息传递,App 和 Stack 之间的通信就需要重新考虑了。TI 引入了 ICALL 消息机制完成 App 和 Stack 独立工程管理的相互通信,接下来就着重理解原理和代码实现。

Indirect Call Framework (

ble5.0 蓝牙协议概述

从这部分开始详细介绍蓝牙协议栈功能、接口、协议栈工程关联、实现协议栈的文件和任务,该任务也作为协议栈应用的最高优先级任务。TI 采用库文件的方式作为协议栈的一个主策略,尽管如此,还是需要开发者了解协议栈各个抽象的功能和相互作用。

蓝牙 5.0 核心规范包含 LE 和 BR/EDR 两种设备类型,其中 LE 主要是设计为低功耗、小数据终端产品。BLE5.0 核心主要包含以下功能:

  • 2M Sym/s PLY 层设计(2M Symbol Rate 物理层)。
  • LE 信道选择算法 #2
  • LE 安全连接
  • LE 数据长度扩展
  • LE 隐私
  • LE LCAP 面向连接的信道支持
  • LE 链路层拓扑结构
  • LE Ping
  • 从机功能扩展
  • 连接参数请求

以上功能均在蓝牙 5.0 协议栈实现,并且可以选择编译。

如图 1 ,蓝牙协议栈包含一个 Host 和 Controller 两个逻辑实体。这种区分从经典蓝牙的 BR/EDR 就存在了,各种功能独立实现,任务配置文件和应用相关都在 Host 的 GAP、GATT 抽象层。

图1. 协议栈基础

BLE 工作在无需认证的 2.4G 免费频段,该频段广泛应用于 ISM(工业、科学、医疗)领域。BLE 通过跳频通信实现抗干扰特性,是 GFSK 调制信号,它采用 1Mbps 码元率 PHY 层设计,可以实现 1Mbps 波特率通信。BLE5.0 优化的物理层设计可以实现 2Mbps 的 PHY 层。

stm32cube programmer

官方产品介绍页面

初次使用ST-Link需要安装驱动, 如果已经安装过Keil或者STM32CubeProgrammer 会自动安装驱动。打开设备设备管理器(Win+R 键入devmgmt.msc)确定。

如果显示未知设备,需要手动安装驱动。驱动路径在C:\Keil_v5\ARM\STLink\USBDriver C:\Program Files (x86)\STMicroelectronics\STM32Cube\STM32CubeProgrammer\Drivers\stsw-link009_v3。

按照以下接口依次一一对应仿真器连接。

直接在ST 官网下载 Flash 烧写工具 STM32CubeProgrammer 安装,需要Java 环境,如果未安装,会自动跳转到下载页面提示安装。

  • 双击打开软件,提示Not connected 点击 Connect(确认已经正常连接仿真器和IC)

    成功连接设备后提示Conneceted.

  • 按照以下步骤依次点击,勾选。

    1、选择 Erasing &programming 按钮;

    2、点击Browse 找到我们需要烧写的固件(通常为* .bin、*.hex、*.axf);

    3、勾选Verify progrmming(可选);

    4、Full chip erase(全部擦出一次,可选);

    5、Start Programming (开始编程);

    6、弹出和LO...

STM32CubeMx

STM32CubeMx 是一个STM32的图形化配置工具,可以作为STMCube 工具独立使用,也可以作为Eclipse的插件。主要包含以下主要工功能:

  • 覆盖所有STM32的选型;
  • 所有ST官方开发板选择;
  • 快速配置(引脚、时钟、外设、和中间件软件)以及产生相应的C代码;
  • 通过先前的配置快速切换选型;
  • 轻松导出到兼容的配置到兼容MCU;
  • 产生配置报告;
  • 通过选择IDE生产对应工程代码;
  • 功耗计算;
  • File->New Project我们需要知道指定芯片具体型号和封装,例如我们这里的STM32F103RDT6 LQFP64。
  • Pinout
  • Clock Configuration设置时钟源
  • 设置低速时钟源(LSE LSI)LSE:The low speed external clock signal LSI:The low speed internal clock signal 从图我们可以看出,低速时钟源主要为RTC和独立看门狗提供时钟系统。其中RTC时钟源可以选择HSE_RTC 也就是HSE高速外部时钟128分频和来自外部低速时钟LSE和内部RC振荡器LSI RC。
  1. 设置高速时钟源(HSE、HSI)HSE:The high speed external clock signal HSI:The high speed internal clock signal 其中HSE可以选择外部高速晶振和外部高速时...

关于ble 5.0的几个常见问答

本文汇集了关于蓝牙 5.0 几个常见问题的答案,以帮助开发人员更好地了解蓝牙 5.0 的一些新特性。

  1. 蓝牙 5.0 向后兼容现有的蓝牙 4.x 设备吗?

对于蓝牙 4.1 、4.2 和 5.0 中添加的所有功能,它们在 BLE 连接期间都是可以协商选择的。这一点确保了蓝牙 5.0 设备能够可靠地连接到旧版蓝牙 4.x 设备,并与其进行交互。除了向后兼容性之外,蓝牙 4.1 和 4.2 中的可选功能适用于蓝牙 5.0 .因此,除了 2 Mbps 功能之外,蓝牙 5.0 设备还可支持蓝牙 4.2 的数据长度扩展功能。TI BLE5-Stack 结合了蓝牙 4.1 和 4.2 协议栈现有的所有功能,包括增强的隐私性和安全连接配对。

  1. 如何在应用程序中启用蓝牙 5.0 高速模式?

您只需在应用程序中调用一个新的 API 来请求 BLE 连接使用 2 Mbps PHY 就可以了,这个 API 是:HCI_LE_SetDefaultPhyCmd()。调用该 API 会操作控制器(链路层)启动所谓的PHY更新过程。

如下图所示,该图显示了对等设备进行协商然后变更链路速度的步骤。如果连接中的两个设备都支持并且都想在 2 Mbps PHY 下传输数据,那么它们之间的连接会切换到 2Mbps 的链路速度,与默认的 1 Mbps 链路速度相比,速度会快一倍。如果对等设备不支持 2 Mbps 功能或者不希望启用,则...