一、概述
CC2640R2F作为BLE单SOC解决方案, TI的SDK将工程分为应用程序(APP)和协议栈(Stack)两部分
二、协议栈
协议栈包括:主机(Host)和控制器(Controller),如下图所示
主机通常是一个软件栈,管理两台或多台设备间如何通信以及如何利用无线电同时提供几种不同的服务。
控制器通常是一个物理设备,它能够发送和接收无线电信号,并将这些信号翻译成携带信息的数据包。
Controller(控制器)
1、PHY(物理层Physical Layer)
采用2.4GHz无线电,完成电磁的传输和接收工作,无线电波通常可以在给定的某个频段内通过改变幅度、频率或相位携带信息,在低功耗蓝牙中,采用一种称为高斯频移键控(GFSK)的调制方式改变无线电波的频率,传输0或1的信息。 2、LL(链路层Link Layer)
负责发广播、扫描、建立连接以及确保数据包按照正确的方式组织、正确地计算检验值和加密序列等,简单来说就是负责两个BLE设备之间的发现、连接以及数据交互,并将数据按照一定的格式打包成报文再通过物理层进行操作。为实现广播、连接以及数据的传输,LL信道(简单理解为通信频道)分为广播信道(3个)和数据信道(37个)总计40个信道。其中广播信道固定为37、38、39,其余的均为数据信道。
3、HCI(主机-控制器接口Host-Controller Interface)
顾名思义,HCI提供主机和控制器的通信接口,它允许主机将命令和数据发送到控制器,并且允许控制器将事件和数据发送到主机。
蓝牙规范定义了4种物理接口:UART、3线UART、USB、SDIO,应用于系统中主机和控制器分别位于2个芯片上的情况。对于CC2640R2F这种单芯片设备,HCI体现为逻辑接口。 Host(主机)
1、L2CAP(逻辑链路控制和适配协议)
低功耗蓝牙的复用层,具有协议复用、分段重组、服务质量quality of service信息的交换、组抽象的功能。例如连接参数更新请求和响应就在这里实现。其定义了2个基本概念:L2CAP信道和L2CAP信令。对于BLE,有3条固定的信道
2、SM(安全管理器 Security Manager)
安全管理器定义了一个简单的配对和密钥分发协议,配对是一个获取对方设备信任的过程,通常采取认证的方式实现。
3、ATT(属性协议Attribute Protocol)
它由6种基本操作构成:请求、响应、命令、指示、确认、通知。定义了客户端与服务端如何相互发送符合标准的消息。 4、GATT(通用属性规范Generic Attribute Profile)
定义了客户端与服务端如何发现与使用服务、特性与描述符的标准方法。分为3种基本类型:发现规程、客户端发起规程、服务端发起规程。另外的交换MTU规程属于属性协议中的MTU交换请求。
发现规程:
4种需要发现的基本对象:首要服务、次要服务以及该服务实例所公开的特性和描述符。
发现服务:
有3种发现服务的途径:发现所有首要服务、按服务UUID发现首要服务、查找包含服务。
特性发现:
在服务被发现后,便可以发现每一个服务的特性,要获取完整的特性,需要发现特性和特性描述符。
客户端发起规程:
对于特性,客户端可执行:读取特性值、写入特性值、读取特性描述符、写入特性描述符。
服务端发起规程:
有2种GATT规程是由服务端发起的:通知(Notify)、指示(Indicate),其中
通知是服务端任何时刻都可以发送给客户端,而不需要客户端的确认便可以发送下一条消息。
指示是服务端任何时刻都可以发送给客户端,在进行下一次发送前服务端必须已经确认上一条消息被客户端接收到了。 5、GAP(通用访问规范Generic Access Profile)
定义了设备如何彼此发现、建立连接以及如何实现绑定,同时描述了设备如何成为广播者和观察者,并且实现无需连接的数据传输。
BLE定义了4类GAP角色:广播者、观察者、外围设备、中央设备。 三、应用程序
应用程序包括:用户的application、GAP角色设定、profile规范配置文件。
在这一层,我们根据实际需求将芯片设置为对应的角色(外围设备、中央设备),这一过程在GAP实现。
Profile包含了service(服务) 、characteristic(特性)
1、profile
profile可以理解为一种规范,一个标准的通信协议,它通常存在于从机中。蓝牙组织规定了一些标准的profile,例如 HID OVER GATT ,防丢器 ,心率计等。每个profile中会包含多个service,每个service代表从机的一种能力。
2、service
service可以理解为一个服务,在ble从机中,通过有多个服务,例如电量信息服务、系统信息服务等,每个service中又包含多个characteristic特征值。每个具体的characteristic特征值才是ble通信的主题。比如当前的电量是80%,所以会通过电量的characteristic特征值存在从机的profile里,这样主机就可以通过这个characteristic来读取80%这个数据
3、characteristic
characteristic特征值,ble主从机的通信均是通过characteristic来实现,可以理解为一个标签,通过这个标签可以获取或者写入想要的内容。
4、UUID
UUID,统一识别码,我们刚才提到的service和characteristic,都需要一个唯一的uuid来标识。蓝牙联盟已经定义了许多标准的UUID,用户也可以自行定义的UUID格式,那么便只能被自己所理解而无法被采用UUID标准的设备所理解(会显示Unknow) 每个从机应用中都会有一个Profile的存在,Profile包含service, 用户可自行添加service,每个service又包含了多个characteristic,主机和从机之间的通信,均是通过characteristic来实现,即通信数据都存放于characteristic中。 四 、ICall
SDK将工程划分为2个工程(APP和Stack)进行管理,那么APP和Stack之间的通信便无法像常规API调用和全局变量方式进行消息传递,这时候便引入ICall(消息框架) 基于TI-RTOS提供服务(例如,同步线程、消息、事件)完成BLE协议栈和应用程序在两个工程的消息交互,保证了应用程序和协议栈在统一的TI-RTOS环境中完成高效运行、相互通信和资源共享。
|