Texas Instruments CC2540/41
Bluetooth® Low Energy
Software Developer’s Guide
v1.3.2
Document Number:SWRU271F
《低功耗蓝牙开发权威指南》
Robin Heydon著,陈灿峰、刘嘉 译
机械工业出版社
2014.6
标签:读书笔记 BLE
通用访问规范(GAP)定义了设备如何彼此发现、建立连接以及如何实现绑定,同时描述了设备如何成为广播者和观察者,以及实现无需连接的数据传输,还定义了如何用不同类型的地址来实现隐私性和可解析性。
为了发现一个设备,必须扫描有哪些正在广播的设备。多个广播设备向多个扫描设备发送数据包,构成一个多对多的拓扑结构。
发现性包含两种类型:有限可发现性和一般可发现性。
通过特定的过滤规则,获得设备列表。
一旦得到设备列表,并选中了其中的某些设备,下一步便是与该设备建立初始连接,即向广播报文提供的地址发起一个连接。如果设备建立了连接,可以穷举对端设备的所有服务和特性或只查找部分服务及其特性。
服务发现最终将获得一个服务列表,包含对端设备公开的各种服务。客户端便可以使用这些服务。在应用商店模型中,由应用来完成接下来的特性发现和配置工作。特性发现与服务发现类似,设备可以枚举某一服务的所有特性,或者直接使用一些服务必须公开的公知特性。
为了实现设备间高效的数据传输,应使用通知和指示。如果客户端希望收到关于某特性的通知或指示,必须在客户端的特性配置描述符中写入信息,通过其启用所需的功能。于是,服务器设备在必要的时候将发送相应的通知或指示。
设备之间相关联俗称“绑定”。要完成绑定,需要将两个设备设置为可绑定。当其中一个设备打算进行绑定时,两个设备交换输入输出能力,选择一个认证算法,彼此身份验证,产生用于加密链路的STK(短期密钥)。链路加密完成后,进行共享机密的交换,用于与之前连结果的设备执行重连。
私有地址是指周期性变化的设备地址。
BLE设备定义了四类GAP角色:
广播者是发送广播报文的设备,通常广播一些服务数据给处于观察者角色的设备。必须有发射装置,但不一定有接收装置。
观察者是扫描广播者并将信息报告给应用的设备。必须有接收装置,但不一定有发射装置。
外围设备是利用可连接广播报文进行广播的设备。一旦连接将成为从设备,外围设备必须同时拥有发射和接收装置。
中央设备是向外围设备发起连接的设备。一旦连接将成为主设备,中央设备必须同时拥有发射和接收装置。
一个设备可以同时支持多个GAP角色,比如既可以是广播者,又可以同时为外围设备。
在GAP内部用模式(mode)和规程(procedure)来描述设备的行为。
当一个设备被配置为按照某种方式操作一段较长的时间时,称为模式。当一个设备被配置为在某一段有限的时间内执行某种特定的操作时,称为规程。
GAP定义了下列模式:
GAP定义了下列规程:
设备处于广播模式时,将使用链路层广播信道和广播数据包发送数据。使用观察规程的设备能够获得该广播数据。
一些设备可能只装备了发射装置,通常不能在广播数据中使用私有地址或者签名的数据。因为二者均需要密钥的相关信息,它们只可能在连接建立后的绑定过程中进行分配,这既需要发射装置有需要接收装置。
在GAP中,只有外围设备才允许被发现。尝试发现外围设备的那些设备处于中央角色。
为了提供不同的可发现性,外围设备有三种工作模式:不可发现模式、有限可发现模式和一般可发现模式。不可发现模式并不意味着不允许发送广播数据,而是指即使对端设备发现了该设备,其用户界面也不会发出通知。
GAP要求可发现设备必须在其广播数据里包含有关可发现性的信息,从而与那些发送不可发现信息的广播设备区分开来。
1、不可发现模式
AD信息标识不必放在广播数据中,除非设置其他信息。
不可发现模式是默认值,主机需要执行命令才能将该默认模式变为其他任意一种模式。
2、有限可发现模式
AD Bit0置位,Bit1清除。
有限可发现模式大概只能维持30s的时间。
由于有限可发现模式主要用于打算被发现并且进入连接的设备,因此强烈建议在广播数据中包含下列信息,以帮助接收者构建用户界面:
有限可发现设备应该按照合理的广播间隔执行广播,一方面便于快速生成用户界面,另一方面减少BLE主设备的扫描时间。
3、一般可发现设备
AD Bit0清除,Bit1置位。当设备打算被发现时,应该使用一般可发现模式。
和有限可发现模式的不同点:
发现一般可发现设备需要较长的时间。其广播数据包也应包含发射功率值以及其他用于构造用户界面的信息。
4、 可发现性
希望找到可发现外设的中央设备,可以使用有限可发现规程或一般可发现规程。除了基于AD信息标识执行的过滤操作不同,这两个规程基本一样。
如果广播数据包没有AD信息标识,或者虽然存在该信息,但既不含有限可发现模式位也不含一般可发现模式位,则视为该广播者为不可发现设备,且不会被发现。
如果AD信息标识设置为有限可发现模式位,则设备总是可发现的,无论使用有限可发现规程还是一般可发现规程。
如果AD信息标识设置为一般可发现模式位,仅当使用一般可发现规程时,该外围设备才是可发现的。
一般可发现规程将发现所有可发现的外围设备,有限可发现规程仅仅能够发现有限可发现的外围设备。
在GAP中,只有处于外围角色的设备才可使用可连接模式。尝试连接外围设备的那些设备处于中央角色,使用连接建立规程。
就可连接性而言,可连接的外围设备可处于下列三种模式:不可连接模式、定向可连接模式和无向可连接模式。对中央设备而言,存在四种不同的连接建立规程:自动、一般、选择性和定向连接建立规程。
链路层提供了两种类型的可连接广播报文:ADV_IND和ADV_DIRECT_IND,以及连种类型的不可连接广播报文:ADV_NONCONN_IND和ADV_SCAN_IND。主机总是可以根据它的连接模式选择正确的广播报文类型。
1、不可连接模式
处于不可连接模式的设备,只能使用ADV_NONCONN_IND和ADV_SACN_IND两种广播报文类型。不可连接模式是默认模式,要将外围设备变为可连接,需要主机执行指定的操作。
2、定向可连接模式
定向可连接模式用于快速连接中央设备,该模式采用ADV_DIRECT_IND广播报文,不含主机的广播数据,因此无法与可发现模式相结合。
定向广播报文发送频率很快,该模式最多持续1.28s,超时之后不允许主机立刻重启该模式,否则会干扰其他设备。
ADV_DIRECT_IND广播报文既包含当前外围设备的地址,有包含中央设备的地址。外围设备必须曾经与中央设备建立过连接才能获悉其地址。
3、无向可连接模式
一个可连接的外围设备如果无需快速建立连接,或者打算尽可能的节省电量,则可以使用无向连接模式。该模式采用ADV_IND广播报文,包含AD信息标识,因此设备处于可发现模式的同时,也可处于无向连接模式。
4、自动连接建立规程
自动连接建立规程用来向多个设备同时发起连接。为实现同时向多个设备发起连接,中央设备的主机首先必须生成白名单,其中包括应与之建立连接的设备的集合,再根据白名单发起连接。通常,主机使用已绑定设备集作为白名单。一旦找到其中设备,使用定向可连接模式或者无向可连接模式的主机即可建立连接。如果还需要与其他外设链接,自动连接建立规程将再次启动。该规程有两个缺点:只能使用一套基本连接参数;不能连接使用私有地址的设备。
5、一般连接建立规程
该规程不使用白名单,采用被动扫描寻找所有的广播设备。
对于使用可解析私有设备的地址,它们的地址将于所有IRK进行匹配,以便找出中央设备打算连接的那些设备。
该规程的缺点在于,在主机发现广播设备和开始直接连接之间,需要一定的处理时间;一般连接建立规程还需要主机处理控制器收到的所有广播报文,比自动连接建立规程消耗的能量多。
6、选择连接建立规程
该规程用来向多个设备发起连接,但设备的连接参数各不相同。
执行选择连接建立规程,主机首先将连接设备集放入白名单,而后启用白名单并开始扫描。正在广播的外围设备只有在白名单上的才会被提交给主机,而该领域的其他设备会被控制器过滤。
对于白名单上的设备,主机可以从控制器收到其广播信息。它首先检查该设备是否使用可连接广播数据包类型,如果是,主机就停止扫描使用定向连接建立规程向该地址发起连接。
与一般连接建立规程相比,缺点至少耗费两个广播报文才可建立连接;与自动建立规程相比,解决了单一连接参数问题,但没有解决私有地址解析带来的私有性问题。
7、定向连接建立规程
该规程采用一套特有的连接参数与制定设备建立连接。
该规程直接向单个设备地址发起连接,不再考虑白名单。
1、不可绑定模式
设备的默认模式为不可绑定模式,此时设备不接受绑定,不交换也不存储密钥。
2、可绑定模式
设备如果想被绑定,必须处于可绑定模式。此时它将接受对端设备的绑定请求。要进入可绑定模式,在配对请求消息的认证需求中,应设置绑定位。
3、绑定规程
希望与其他可信设备进行绑定的设备可以使用绑定规程。当使用绑定规程时,设备将发起配对,并在配对请求消息的认证需求中设置绑定位。
GAP定义了两类安全模式和三个安全等级。第一类安全模式用于在连接内部提供不同级别的加密,第二类安全模式用于提供不同级别的数据签名保护。
设备在发送广播报文时,必须遵循固定的广播数据格式或扫描响应数据格式。开始处均含有一个长度字段,用来表示该结构其余部分的字节长度,紧接着是广播数据类型字段。
标识AD是位字段的序列,可以从0字节到若干字节的任意长度。在广播数据之外的任意字节默认值均为“0”。
BLE定义了如下标识:
四种不同的服务广播数据类型:
本地名称的广播数据类型共有两类:
当本地名称太长而无法放入一个广播报文中时,使用裁剪的本地名称数据类型。本地名称是UTF-8字符串,允许截断。
发射功率等级广播数据类型是指传输该广播数据包时采用的功率值,长度1个字节,单位dBm。
利用从设备连接间隔范围,中央设备能够获得外围设备倾向的连接间隔的参考值,用于发起连接。间隔参数包括两个16位的值,第一个为最小连接间隔,第二个为最大连接间隔。
服务列表包括了外围设备希望中央设备支持的服务。该服务请求为正在搜寻外围设备的中央设备提供了连接能力,它们能够据此判断那些外围设备最有可能包含和服务对应的客户端功能。
服务请求广播数据包括16位服务UUID或128位服务UUID的部分列表。
设置广播服务时,使用的是“服务数据”广播数据类型。服务数据的起始两个字节是16位UUID,表示服务号,其他字节为实际的服务数据。
数据的起始两个字节为16位的公司标志,接着是公司指定的数据。
GAP定义了通用属性规范服务,为服务提供了一种确定信息的方式。服务提供了下列五项特性:
设备名特性是一个UTF-8字符串,表示设备的名称。由于一个设备只允许一个设备名特性,直接使用按UUID都去请求便能快速获得设备名,无需首先执行服务发现或者特性发现。
外观特性是要给16位的值,用来列举设备的外观样式。该特性值为枚举类型,在编号分配文件中定义。
外围设备隐私标识表示设备是否正在使用隐私。该特性即可读又可写。只有当存在重连地址并且隐私标志设置为“启用”时,设备才能真正实现带隐私的重连。
重连地址用于外围设备与曾经绑定的中央设备进行重连,且该中央设备知道外围设备启用了隐私的情况。重连地址为不可解析的私有地址,在每次重连时更换。
外围设备通过外围设备首选连接参数特性公开这些参数,因此中央设备不用猜测这些具体参数,只需在首次连接时读取它们,并尽快调整连接参数即可。