这里只展开BLE这一部分,
框图如下所示
蓝牙也是使用分层的结构组织代码。
Application:是自己的业务逻辑实现的地方。当然应用程序需要根据BLE的规定,实现配置文件(profile)、服务(service)和特征(character)。
Host::这一部分实现蓝牙如何存储和交互数据,也涉及到数据加密的部分
Controller:控制层将蓝牙数据通过无线电发送出去,这一部分是硬件强相关的,且往往是闭源的。nordic的这部分也是闭源。
Controller可以先不研究,一般都挺稳定的,毕竟nordic需要自己负责这部分的稳定性。
Host主机层
- 逻辑链路控制和适配协议(L2CAP):向上层提供数据封装服务。
- 安全管理器协议 (SMP):定义并提供安全通信的方法。
- 属性协议 (ATT):允许一个设备向另一个设备公开某些数据。
- 通用属性配置文件(GATT):定义使用ATT层所需的子程序。
- 通用访问配置文件 (GAP):直接与应用程序交互以处理设备发现和连接相关的服务。
GATT实现了怎么展示应用层定义的服务。这些交互过程都在这里实现
GAP:主要是设备信息的展示,比如设备名这些。
zephyr的host层实现了上面列出的所有功能。
https://docs.nordicsemi.com/bundle/ncs-latest/page/zephyr/connectivity/bluetooth/bluetooth-arch.html#host
后续开章节详解这部分的API。
控制器层
物理层 (PHY):确定实际数据如何调制到无线电波上,以及如何传输和接收。
链路层 (LL):管理无线电的状态,定义为以下之一 - 待机、广告、扫描、启动、连接。
在NCS里可以使用zephyr自带的控制器。也可以用nordic专门设计的softDevice。
- 官方是强烈推荐softDevice。因为这能充分发挥nordic芯片的性能。
- 在蓝牙标准里面也有对控制器统一、标准化、详细的定义,因此zephyr自带的控制器也能控制nordic的BLE部分,不过有些特别的设计就无法实现。这里我还没有详细深入控制器这一块,只知道是这个原理。
- softDevice的API文档地址