Journal of Information and Electronics of Guangdong cean University Vol.1, No.1, September 2014, pp 35-43 广 东 海 洋 大 学 电 子 信 息 学 刊 2014 年 9 月 第 1 卷 浅 析 BLE 协 议 栈 温 碧 伟 1+ 1 ( 广 东 海 洋 大 学 信 息 学 院 电 气 工 程 及 其 自 动 化 1113 班 ) The Analysis of BLE Protocol Stack Biwei Wen 1+ 1 (Class Electrical engineering and its automation 1113, Information Insititute, GuangDong cean University) + Corresponding author: Phone: 13726934904,E-mail: 397337354@qq.com, http://www.gdou.edu.cn Abstract: This passage mainly describes the structure of the BLE protocol stack and the key part of the BLE bluetooth development. Key words: Advertisement; Connection; GAP; GATT 摘 要 : 本 文 主 要 是 介 绍 BLE 协 议 栈 的 结 构 以 及 BLE 蓝 牙 开 发 的 中 关 键 部 分 关 键 词 : 广 播 ; 连 接 ;GAP;GATT 1 引 言 BLE 蓝 牙 协 议 栈 是 由 蓝 牙 技 术 联 盟 在 蓝 牙 4.0 的 基 础 上 推 出 的 低 功 耗 蓝 牙 协 议, 旨 在 占 领 低 功 耗 设 备 与 手 持 设 备 通 信 的 市 场 因 此 深 入 了 解 BLE 协 议 栈 还 是 很 有 必 要 的, 特 别 对 其 通 信 和 服 务 的 配 置 等 本 文 旨 在 让 初 学 蓝 牙 者 对 BLE 协 议 栈 结 构 和 内 容 有 一 个 大 概 的 了 解 2 BLE 协 议 栈 结 构 BLE 协 议 栈 结 构 入 图 一 所 示, 主 要 有 两 成 :Host( 主 机 协 议 层 ) Controller( 控 制 协 议 层 ) 图 一 3 控 制 协 议 层 Controller 控 制 协 议 层 主 要 分 为 物 理 层 (Physical Layer) 和 链 接 层 (Link Layer)
36 广 东 海 洋 大 学 电 子 信 息 学 刊 Vol.1, No.1, September,2014 3.1 通 道 Channels 一 共 40 个 通 道, 有 37 个 数 据 通 道 用 于 两 个 连 接 的 设 备 的 通 讯 ;3 个 混 合 通 道 分 别 是 37 38 39, 用 于 发 现 设 备 (Scanning devices) 初 始 化 连 接 (initiating a connection) 和 广 播 数 据 (broadcasting date) 通 道 的 具 体 频 带 分 布 如 图 二 图 二 3.2 链 接 层 状 态 Link Layer States 链 接 层 状 态 有 六 个 : 待 机 状 态 (Standby): 设 备 没 有 传 输 或 接 收 任 何 数 据, 并 且 没 有 连 接 任 何 设 备 广 播 状 态 (Advertiser): 周 期 性 地 发 射 广 播 扫 描 状 态 (Scanner): 主 动 寻 找 正 在 广 播 的 设 备 发 起 连 接 状 态 (Initiator): 主 动 尝 试 开 始 和 另 一 个 设 备 连 接 主 设 备 (Master): 作 为 主 设 备 和 另 一 个 设 备 连 接 从 设 备 (Slave): 作 为 从 设 备 和 另 一 个 设 备 连 接 两 个 设 备 建 立 连 接 过 程 中, 链 接 层 状 态 切 换 如 下 图 : 图 三 3.3 广 播 Advertisement (1) 广 播 事 件 类 型 Advertisement Event Types 广 播 事 件 类 型 分 为 4 种, 分 别 是 : 可 连 接 无 定 向 广 播 事 件 Connectable Undirected Event 可 连 接 定 向 广 播 事 件 Connectable directed Event 不 可 连 接 无 定 向 广 播 事 件 Non-connectable Undirected Event
温 碧 伟 : 浅 析 BLE 协 议 栈 37 可 扫 描 无 定 向 广 播 事 件 Scannable Undirected 不 同 的 广 播 类 型 对 扫 描 请 求 和 连 接 请 求 的 不 同 结 果 如 下 图 : (2) 广 播 事 件 Advertisement Events 图 四 图 五 如 图 广 播 事 件 并 不 是 连 续 的, 而 是 有 一 个 时 间 间 隔 广 播 间 隔 (Advertisement Interval) 在 每 次 广 播 事 件 中, 链 路 层 会 产 生 一 个 0~10ms 的 随 机 延 迟, 这 个 延 迟 时 间 被 加 到 广 播 间 隔 中 去, 避 免 多 器 件 的 碰 撞 一 个 广 播 事 件 的 时 间 (T_advEvent)= 广 播 间 隔 (advinterval)+ 广 播 延 时 (advdelay) 3.4 连 接 Connection (1) 连 接 初 始 化 Connection Initiation 在 扫 描 设 备 扫 描 到 一 个 可 连 接 的 广 播 消 息 后, 扫 描 设 备 可 以 通 过 发 送 "Connection Request" 数 据 包 给 广 播 设 备, 而 成 为 ( 连 接 的 ) 发 起 者 连 接 参 数 Connection Parameters "Connection Request" 包 含 从 机 设 备 一 系 列 的 链 路 层 参 数, 这 些 参 数 声 明 连 接 时 的 从 设 备 的 MAC 和 通 道 以 及 时 序 要 求 如 果 广 播 设 备 接 受 了 连 接, 那 么 这 两 个 器 件 就 进 入 了 连 接 状 态 而 发 起 者 就 成 为 了 主 机, 广 播 设 备 则 成 为 了 从 机
38 广 东 海 洋 大 学 电 子 信 息 学 刊 Vol.1, No.1, September,2014 (2) 连 接 事 件 Connection Events 图 六 如 图 : 两 个 设 备 建 立 连 接 后, 空 中 的 几 个 重 要 参 数 : 连 接 间 隔 Connection interval 两 个 Connection Event 之 间 的 空 闲 值, 单 位 :1.25ms,Range:7.5ms~4s 从 机 ( 外 设 ) 延 迟 Slave Latency 从 机 ( 外 设 ) 和 主 机 建 立 连 接 后, 主 机 会 定 期 的 向 从 机 发 送 request, 而 从 机 可 以 选 择 性 的 进 行 response, 这 个 Slave Latency 就 是 跳 过 的 主 机 发 送 的 request 次 数,Range:0~499 次 有 效 的 连 接 间 隙 = 连 接 间 隔 *(Slave Latency 次 数 +1); 注 意 :Connection interval*( 最 大 Slave Latency 次 数 +1) < 32s 管 理 超 时 Supervision Timeout 两 个 设 备 在 连 接 的 这 段 时 间 内 没 有 发 生 通 讯 导 致 连 接 自 动 断 开 的 时 间, 单 位 10ms,Range:10ms~32s; Supervision Timeout 必 须 大 于 有 效 连 接 间 隙, 即 Supervision Timeout > Connection interval*( 最 大 Slave Latency 次 数 +1) < 32s 4 主 机 协 议 层 Host 主 机 协 议 层 包 括 的 逻 辑 连 接 控 制 和 适 配 层 (L2CAP) 属 性 协 议 层 (ATT) 通 用 属 性 配 置 层 (GATT) 通 用 访 问 文 件 配 置 层 (GAP) 和 安 全 协 议 层 (SMP), 本 文 主 要 介 绍 开 发 中 常 见 的 三 个 协 议 层 GATT GAP ATT 层 4.1 通 用 访 问 配 置 文 件 概 述 Generic Access Profile(GAP) verview GAP 层 一 共 有 四 种 设 备 角 色 可 以 配 置 : 广 播 者 (Broadcaster): 不 可 连 接 的 广 告 设 备 ; 观 察 者 (bserver): 扫 描 广 播, 但 不 发 起 建 立 连 接 ; 外 设 (Peripheral): 可 连 接 的 设 备, 可 以 在 单 个 链 路 层 中 作 为 从 机 ; 主 机 (Central): 扫 描 广 告 设 备 并 发 起 连 接, 在 单 个 链 路 层 中 作 为 主 机, 最 多 连 接 三 个 外 设 这 几 种 角 色 的 关 系 如 下 图 :
温 碧 伟 : 浅 析 BLE 协 议 栈 39 图 七 4.2 属 性 协 议 概 述 Attribute Protocol(ATT) verview ATT 是 离 散 值, 与 之 相 关 的 有 以 下 三 个 属 性 : ATT handle 属 性 句 柄, 每 个 属 性 都 有 一 个 独 一 无 二 的 handle; ATT Type 属 性 类 型, 由 UUID 定 义 或 用 户 自 定 义 ; A set of permission 一 组 权 限, 规 定 客 户 端 对 服 务 器 属 性 的 访 问 权 限 4.2.1 ATT 客 户 端 与 服 务 端 结 构 Client/Server Architecture Server( 服 务 端 ) 有 数 据,Client( 客 户 端 ) 就 是 访 问 这 些 数 据 注 : 它 与 链 接 层 的 主 / 从 设 备 是 两 个 概 念, 也 不 同 于 GAP 的 外 设 和 主 机 的 角 色 一 个 主 设 备 既 可 以 是 客 户 端, 也 可 以 是 服 务 端 ; 从 设 备 也 是 如 此 不 过 主 设 备 一 般 做 Client, 从 设 备 一 般 做 Server 4.2.2 属 性 示 例 Attribute Table Example 图 八 4.3 Bluetooth 服 务 的 UUID UUID 含 义 是 通 用 唯 一 识 别 码 Universally Unique Identifier, 这 里 的 UUID 主 要 是 关 于 Bluetooth 服 务 的 方 面 标 识, 由 Bluetooth 技 术 联 盟 定 义 推 出 UUID 在 表 中 有 两 种 形 式, 一 种 是 16Bit 的, 一 种 是 128Bit 的 其 中 16Bit 在 最 终 传 输 的 时 候 也 是 128Bit UUID 由 Alias 和 Base 两 部 分 例 如 :UUID 为 0000xxxx-0000-1000-8000-00805F9B34FB, 其 中 xxxx 就 是 Alias 部 分, 剩 余 部 分 为 Base 部 分 Bluetooth SIG 定 义 的 UUID 就 是 16Bit 的 Alias 部 分, 它 们 使 用 相 同 的 Base 部 分
40 广 东 海 洋 大 学 电 子 信 息 学 刊 Vol.1, No.1, September,2014 自 定 的 UUID, 关 键 是 Alias 部 分 在 表 中 必 须 是 增 长 的 趋 势 在 决 定 服 务 的 UUID 之 前, 最 好 查 看 有 没 有 Bluetooth SIG 有 没 有 定 义 好 4.4 通 用 属 性 配 置 文 件 概 述 Generic Attribute Profile(GATT) verview 两 个 设 备 应 用 数 据 的 通 信 时 通 过 协 议 栈 的 GATT 层 实 现 因 为 GATT 层 是 ATT 的 配 置 层, 所 以 ATT 层 的 属 性 与 GATT 所 说 的 属 性 特 性 是 同 一 个 概 念 4.4.1 GATT 客 户 端 与 服 务 端 结 构 Client/Server Architecture 从 GATT 角 度 来 看, 当 两 个 设 备 建 立 连 接 后, 他 们 处 于 以 下 角 色 之 一 : GATT 服 务 器 它 是 为 GATT 客 户 端 提 供 数 据 服 务 的 设 备 ; GATT 客 户 端 它 是 从 GATT 服 务 器 读 写 应 用 数 据 的 设 备 这 个 GATT 客 户 端 / 服 务 器 和 ATT 层 的 角 色 是 一 样 的, 两 者 必 须 相 同 因 为 GATT 是 ATT 层 属 性 的 定 义 者 4.4.2 GATT 配 置 文 件 层 次 结 构 GATT Profile Hierarchy 一 个 GATT 服 务 器 中 可 以 包 含 多 个 GATT 服 务, 这 些 服 务 可 以 是 GAP Service,GATT Service, 而 要 管 理 这 些 服 务 就 需 要 用 到 Profile, 其 层 次 结 构 如 下 图 : 图 九 4.4.3 服 务 端 示 例 Server Example 如 上 图 可 知, 每 一 个 服 务 都 有 很 多 属 性 组 成, 常 见 的 有 Include Primary Service Characteristic Characteristic Format Characteristic User Description Client Characteristic Configuration Descriptor 等 组 成 而 在 协 议 栈 ( 程 序 中 ) 就 需 要 一 张 服 务 表 来 管 理 这 些 服 务 属 性 了 例 如 下 表 :
温 碧 伟 : 浅 析 BLE 协 议 栈 41 可 知, 这 张 服 务 表 由 三 个 部 分 组 成, 分 别 是 Handle UUID(Attribute Type) Value(Attribute Value) Handle 的 范 围 为 0x0001 to 0xFFFF 中 的 任 意 数, 但 是 不 能 重 复, 并 且 在 服 务 表 中 是 处 于 增 长 的 趋 势, 允 许 不 连 续 增 长, 所 以 Handle 的 值 在 服 务 表 中 是 独 一 无 二 的 为 了 方 便 管 理, 同 一 个 服 务 的 各 个 属 性 最 好 按 照 一 定 的 间 隔 增 长 从 中 可 以 得 出 GATT 最 多 只 能 有 65536 个 属 性 在 一 个 服 务 的 Handle 区 间, 服 务 的 属 性 类 型 就 要 以 UUID( 即 universal unique identifier) 来 解 释 了 在 每 一 个 服 务 开 始 的 Attribute Type 必 须 是 Primary Service 属 性 或 者 是 Secondary Service 属 性, 接 着 就 是 Include 或 Characteristic 了, 再 接 下 去 就 要 根 据 不 同 的 服 务 功 能 来 分 了 由 Bluetooth SIG 定 义 的 UUID 如 下 : 表 1: 图 十 Attribute Type UUID Reference specification Description «Generic Access Profile» 0x1800 «蓝 牙 核 心 规 格» 第 3 卷 C 部 分 第 12 节 GATT 服 务 «Generic Attribute Profile» 0x1801 «蓝 牙 核 心 规 格» 第 3 卷 G 部 分 第 7 节 «Primary Service» 0x2800 «蓝 牙 核 心 规 格» 第 3 卷 G 部 分 第 3.1 节 «Secondary Service» 0x2801 «蓝 牙 核 心 规 格» 第 3 卷 G 部 分 第 3.1 节 «Include» 0x2802 «蓝 牙 核 心 规 格» 第 3 卷 G 部 分 第 3.2 节 «Characteristic» 0x2803 «蓝 牙 核 心 规 格» 第 3 卷 G 部 分 第 3.2 节 «Characteristic Extended Properties» 0x2900 «蓝 牙 核 心 规 格» 第 3 卷 G 部 分 第 3.3.3.1 节 «Characteristic User Description» 0x2901 «蓝 牙 核 心 规 格» 第 3 卷 G 部 分 第 3.3.3.2 节 GATT 属 性 类 型 GATT 特 征 描 述 符
42 广 东 海 洋 大 学 电 子 信 息 学 刊 Vol.1, No.1, September,2014 «Client Characteristic Configuration» 0x2902 «蓝 牙 核 心 规 格» 第 3 卷 G 部 分 第 3.3.3.3 节 «Server Characteristic Configuration» 0x2903 «蓝 牙 核 心 规 格» 第 3 卷 G 部 分 第 3.3.3.4 节 «Characteristic Format» 0x2904 «蓝 牙 核 心 规 格» 第 3 卷 G 部 分 第 3.3.3.5 节 «Characteristic Aggregate Format» 0x2905 «蓝 牙 核 心 规 格» 第 3 卷 G 部 分 第 3.3.3.6 节 «Device Name» 0x2A00 «蓝 牙 核 心 规 格» 第 3 卷 C 部 分 第 12.1 节 «Appearance» 0x2A01 «蓝 牙 核 心 规 格» 第 3 卷 C 部 分 第 12.2 节 «Peripheral Privacy Flag» 0x2A02 «蓝 牙 核 心 规 格» 第 3 卷 C 部 分 第 12.3 节 «Reconnection Address» 0x2A03 «蓝 牙 核 心 规 格» 第 3 卷 C 部 分 第 12.4 节 «Peripheral Preferred Connection Parameters» 0x2A04 «蓝 牙 核 心 规 格» 第 3 卷 C 部 分 第 12.5 节 «Service Changed» 0x2A05 «蓝 牙 核 心 规 格» 第 3 卷 G 部 分 第 7.1 节 4.4.4 GATT 服 务 的 基 本 组 成 GATT 特 征 类 型 一 个 基 本 的 GATT 服 务 在 除 了 Handle 之 外, 就 包 括 GATT 属 性 类 型 和 服 务 内 容 两 部 分 而 根 据 在 不 同 的 GATT 服 务 中 属 性 类 型 的 Characteristic 的 详 细 程 度, 又 可 延 伸 出 Characteristic Descriptor( 特 性 描 述 符 ) 和 Characteristic Type( 特 性 类 型 ) 所 以 对 于 一 个 服 务 内 容 复 杂 性, 可 以 根 据 Characteristic 的 详 细 程 度 来 判 断 4.4.5 GATT 属 性 类 型 由 上 表 可 以 知 道 GATT 属 性 类 型 包 括 «Primary Service» «Secondary Service» «Include» «Characteristic» 四 类 这 里 简 单 介 绍 常 用 的 «Primary Service» 和 «Characteristic» 两 个 (1)Primary Service 格 式 Primary Service 的 值 就 是 向 Client 端 说 明 这 是 一 个 什 么 服 务, 也 就 是 一 个 服 务 名 字, 这 个 名 字 也 是 16Bit 的 UUID Bluetooth SIG 定 义 两 个 通 用 的 服 务 GAP 和 GATT 服 务 这 个 值 是 可 以 自 定 的 但 是 经 过 查 找 资 料 发 现, 要 想 自 己 服 务 具 有 通 用 性, 被 其 他 蓝 牙 设 备 识 别, 是 要 向 Bluetooth SIG 提 交 申 请 的 Bluetooth SIG 已 经 通 过 了 很 多 服 务 名 字 的 UUID, 在 定 义 这 个 值 的 时 候 最 好 查 询 一 下, 看 看 是 否 存 在 (2)Characteristic 格 式 这 是 GATT 最 重 要 的 一 个 属 性 类 型 了 它 包 含 了 三 个 部 分 :Properties Handle UUID Properties 描 述 的 是 服 务 性 质, 具 有 作 用 其 常 用 值 如 下 表 : 图 十 一 这 个 值 可 以 是 表 中 的 性 质 的 叠 加, 比 如 一 个 服 务 具 有 Notify 和 Read 性 质, 那 这 个 就 是 0x10+0x02=0x12 Handle 就 是 服 务 内 容 在 GATT 服 务 表 中 具 体 的 值 这 里 的 UUID 就 是 服 务 内 容 在 GATT 服 务 表 中 具 体 的 UUID 可 以 自 定 义 ( 按 照 UUID 格 式 ), 也 可 以 是 Bluetooth SIG 规 范 中 的 4.4.6 GATT 定 义 的 GATT 服 务 器 与 客 户 端 之 间 的 通 信 子 过 程 在 蓝 牙 核 心 规 范 文 档 中, 一 共 定 义 了 11 个 features, 每 个 feature 对 应 一 种 或 多 种 Sub-procedures 这 11 个 features 与 对 应 的 Sub-procedures 如 下 表 :
温 碧 伟 : 浅 析 BLE 协 议 栈 43 No. Feature Sub-Procedures Support in Client 1 Server Configuration Exchange MTU Support in Server 2 Primary Service Discover All Primary Services M Discovery Discover Primary Services By Service UUID M 3 Relationship Discovery Find Included Services M 4 Characteristic Discovery Discover All Characteristic of a Service M Discover Characteristic by UUID M 5 Characteristic Descriptor Discovery Discover All Characteristic Descriptors M Read Characteristic Value M 6 Characteristic Value Read Read Using Characteristic UUID M Read Long Characteristic Values Read Multiple Characteristic Values 7 Characteristic Value Write Write Without Response Signed Write Without Response Write Characteristic Value Write Long Characteristic Values Characteristic Value Reliable Writes 8 Characteristic Value Notification Notifications 9 Characteristic Value Indication Indications M C3 Read Characteristic Descriptors 10 Characteristic Descriptor Value Read Read Long Characteristic Descriptors Write Characteristic Descriptors 11 Characteristic Descriptor Value Write Write Long Characteristic Descriptors : for optional to support (used for capabilities that can be used in the profile); M: M for mandatory to support (used for capabilities that shall be used in the profile); C1: Write Without Response is mandatory if Signed Write Without Response is supported otherwise optional C2: Write Characteristic Value is mandatory if Write Long Characteristic Values is supported otherwise optional C3: If Service Change Characteristic is present, this feature is mandatory, otherwise optional. 5 总 结 本 文 只 是 对 蓝 牙 协 议 栈 有 一 个 深 入 的 理 解, 主 要 是 蓝 牙 的 角 色 和 建 立 连 接 时 的 状 态 切 换, 以 及 GATT 协 议 层 中 Profile 的 服 务 格 式, 这 是 在 蓝 牙 BLE 通 信 的 核 心, 因 为 BLE 数 据 传 输 主 要 通 过 读 取 服 务 中 的 Characteristic 值 限 于 篇 幅, 文 章 进 行 了 压 缩, 部 分 内 容 未 能 详 细 叙 述, 而 且 并 未 介 绍 BLE 协 议 栈 的 实 例 开 发 如 果 有 需 要, 可 以 去 TI 公 司 官 网 下 载 CC2540 的 开 发 Demo, 或 者 联 系 笔 者 索 要 具 体 开 发 实 例 和 资 料 C1 C2 参 考 文 献 : [1] http://developer.bluetooth.cn/ [2] http://www.bluetooth.com/ [3] www.ti.com/blestack [4] Specification of the Bluetooth System 4.0.pdf 温 碧 伟 (1991- ) 广 东 河 源 人, 广 东 海 洋 大 学, 信 息 学 院, 电 气 工 程 及 其 自 动 化 1113 班, 兴 趣 方 向 为 嵌 入 式 系 统 开 发, 自 动 化 控 制