【IoT】Android/TI 蓝牙 profile 详解
发布日期:2021-05-08 10:08:53 浏览次数:21 分类:精选文章

本文共 2702 字,大约阅读时间需要 9 分钟。

TI BLE Profile详解

BLE 协议栈的 GATT 层是用于应用程序在两个连接设备之间的数据通信。从 GATT 层的角度看,当设备连接后,设备将充当以下两种角色之一:

  • GATT Client:从 GATT 服务器读取或写入数据的设备
  • GATT Server:包含客户端需要读取或写入的数据的设备

需要注意的是,GATT Client 和 Server 的角色与 BLE 的链路层(slave 和 master)或 GAP 层(peripheral 和 central)的角色是完全独立的。在这一点上,一个 slave 或 master 也可以同时作为 GATT Client 或 GATT Server。

一个 GATT Server 可以包含多个完成特定功能或特性 GATT Server 组成。在 SimpleBLEPeripheral(从机)应用程序中,有三个 GATT 服务:

  • Mandatory GAP Service:包含设备和访问信息,如设备名称、供应商和产品标识。这是 BLE 协议栈中不可或缺的一部分,需要每个设备按照 BLE 协议栈规范实现。
  • Mandatory GATT Service:包含有关服务器的信息。这也是 BLE 协议栈的一部分,需要每个 BLE 服务器设备按照 BLE 规范实现。
  • SimpleGATTProfile Service:这是一个示例配置文件,用于测试和演示。
  • 什么是 Profile?

    为了确保 Bluetooth 设备之间的兼容性, Bluetooth 规范定义了 Profile。Profile 可以被理解为连接层或应用层协议,提供设备之间特定功能的实现。

    Bluetooth 的一个重要特性是,所有的 Bluetooth 产品不需要实现全部的 Bluetooth 规范。开发者可以根据所需实现的功能选择性地实现所需的 Profile,而无需承担额外的开发开销。例如,当需要利用蓝牙提供数据传输功能时,就必须建立对应的 Profile。TI 的 BLE 协议栈为我们提供了部分 Profile,其中包括一些非标准的 Profile,如 SimpleGATTProfile 和 SimpleKeysProfile。通过对这两个 Profile 的介绍和实验,我们可以更好地了解 Profile 的特性和使用方法。

    每个 Profile 在初始化时会响应其特定的服务和内部寄存器。GATT 服务器将整个服务添加到属性表中,并为每个属性分配唯一的句柄。GATT Profile 用于存储和处理 GATT 服务器中的数据。

    GATT 服务器通过一个称为属性表的表格组织数据,这些数据是真正用于发送的数据。属性表中的每个属性都包括以下信息:

    • UUID:属性表中数据类型的信息,是理解属性表中值的关键信息。
    • handle:属性在 GATT 表中的索引,设备中每个属性的句柄都是唯一的。
    • Characteristic Values:属性的实际值。

    需要注意的是,GATT 表中可以包含多个属性,但这些属性可能具有相同的 UUID。

    Android Bluetooth Profile详解

    Android 中常用的 Bluetooth Profile 包括 SPP(有线通道)、A2DP(高级音频分布 Profile)、AVRCP(音视频遥控 Profile)、HID(人类接口设备 Profile)和 HFP(无线头戴设备 Profile)。其中 A2DP 和 AVRCP 是 Media 相关 Profile,经常用于数据通信,而 SPP 是基础 Profile。

    Bluetooth Profile 的概念

    Profile 定义了一种基于 Bluetooth 的应用,规范通常包括:

    • 针对开发者的接口
    • 消息的格式和标准(如音频压缩)
    • 使用的蓝牙协议栈组件

    每个 Profile 对应一个 UUID,类似于 TCP/IP 中端口的概念。Bluetooth 使用 SDP(服务发现协议)来发现设备支持的 Profile。SDP Client 根据 SDP 服务 daemon 的信息完成 Profile 的发现和鉴别。

    需要注意的是,基础 Profile 包括 GAP 和 SDP,而 SPP 通常作为其他 Profile 的实现基础。

    Bluetooth UUID 的概念

    UUID 是一种分布式 ID 生成方式,在 Bluetooth SIG 中定义的 Profile UUID 采用特定的格式:

    • BASE_UUID + uuid16 < 96 或 BASE_UUID + uuid32 < 96
      其中,BASE_UUID 为 00000000-0000-1000-8000-00805F9B34FB。

    例如,A2DP_UUID 为 0000110B-0000-1000-8000-00805F9B34FB。在 Android 的 logcat 输出中经常可以看到 00805F9B34FB 的字串。

    需要注意的是,SPP 是唯一的 Android 完全开放的 Bluetooth Profile,其 UUID 可以自定义,但设备双方必须事先共享 UUID。SPP 通信方式类似于 Linux 的 TCP socket,需要注意客户端接入后如何处理以及是否需要另起线程等问题。

    A2DP 是实现音频和多媒体功能的重要 Profile。在 Android 中,A2DP 的相关 API 大部分为 @hide,开发者需要通过反射获取相关 API。A2DP 的 API 与 Android API Level 的对应关系将在后续文档中总结。

    HID 和 AVRCP

    HID 是标准的输入输出 Profile,常用于键盘、鼠标等设备。例如,可以利用 HID Profile 实现一些简单的远程按键控制。在 Android 中,HID 事件的捕获与 backKey 的处理方式类似,可以通过 View.OnKeyListener 的 onKey 方法捕获对应的 keyCode。

    AVRCP 主要用于多媒体播放控制,与 HID 类似,但具体事件定义在 Android 的键盘布局中,用于定义音量键、播放暂停键等。

    HFP

    HFP 是车载设备中常用的 Profile,类似于 A2DP,支持 HFP 和 A2DP 的设备。Bluetooth 在蓝牙打开的情况下会自动连接。

    通过以上 Profile 的理解和实践,可以更好地掌握蓝牙通信的实现细节,提升开发效率。

    上一篇:【IoT】TI BLE 主从机数据交互过程-蓝牙 Notification 方式
    下一篇:【IoT】TI BLE CC2541 串口控制蓝牙详解

    发表评论

    最新留言

    路过按个爪印,很不错,赞一个!
    [***.219.124.196]2025年04月30日 08时41分05秒