青风带你学蓝牙第二节:蓝牙LED任务读写原理任务详解

所需积分/C币:47 2018-04-18 18:03:26 563KB PDF
10
收藏 收藏
举报

青风带你学蓝牙第二节:蓝牙LED任务读写原理任务详解 --蓝牙服务定义,属性,特征值,代码编写详细说明,真的讲的很棒
電責 青风带你玩蓝牙nRF52832V1.0 3淘宝地址:htt:/qfv5.taobao.com 作者:青风 出品论坛:www.qfv8cm 淘宝店:http:/lgfv5.taobao.con QQ技术群:346518370 硬件平台:青云QY-nRF52832开发板 24蓝牙BLE之LED灯任务的读写 原理分析与讲解: BLE LED应用示例是为了让你学习如何在nRF52832上开发BLE应用,它是一个 通过BLE的通知功能进行通信的BLE应用的简单演示。当它运行时,你可以通过集中 器触发nRF52832上LED的输出。关于集中器的概念等下来讲。 这个应用通过一个服务"GAT层〃服务被建立,那么这个服务应该包括1个特性 LED的特性。如果有多个仁务就可以设置多个特性 我们设置LED特性这里应该为:通过没有回应的写远程操作LED的亮灭,不发通 知给集中器 下面首先来介绍下几个基本的蓝牙概念 1:nRF52832蓝牙协议的分层 Copyrights2016-2022青风电子社区 alL rights reserved 電責 青风带你玩蓝牙nRF52832V1.0 淘宝地址http://qfv5.taobao.com/ 应用层 3 豆 GATT GAP ATT SMP 主协议层 L2CAP Host Controller Interface(HCI) Link Layer(LL) →控制层 Physical Layer(PHY) GLOBAL te TOUR a 1.1首先是应用层: 从蓝牙特别兴趣小组SIG的官方网站上可以看到已经发布的GATT规范列表,包括 警告通知( alert notification),血压测量( blood pressure)心率( heart rate),电 池( battery)等等,如上图所示。它们都是针对具体的低功耗监牙的应用实例来设计的。 目前蓝牙技术联盟还在不断的制定新的规范,并且将陆续发布。详细内容人家可以参看 蓝牙特别兴趣小组SIG的官方网站进行了解。 12控制器的控制层 如上图所示,实际内部分为三部分 1:主机控制器(HCI),也称为设备管理器 设备管理器是基带中的一个功能模块,控制一般的蓝牙设备行为。它负责所有与数 据无关的蓝牙系统操作,例如询问附件蓝牙设备是否存在,连接蓝牙设备,或者让本地 的蓝牙设备可以被其他设备发现或者连接。 为了执行相应的功能,设备管理器要求通过基带的资源控制器访问传输媒介。同时, 设备管理器还通过HCI命令提供本地设备行为的控制功能,例如管理设备的本地名称。 存储链路密钥等 2:链路层(LL) 链路层主要负责链路管理,链路控制。包括负责创建,维护和释放逻辑链路已经更 新设备之问物理链路的相关参数。 3:物理层 Copyrights2016-2022青风电子社区 alL rights reserved 電責 青风带你玩蓝牙nRF52832V1.0 3淘宝地址:htp:/afv5 taobao. com 物理层模块负责从物理信道传输和接收信息数据包。在基带和物理层之间,一条 控制路允许基带模块控制物理层的时隙和频率载波。同时,物理层模垬问物理信道和基 带发送和接收符合格式要求的数据流 2主机主协议层详细说明: 本实验主要就是编写主机层,因此下面需要来详细说明: 2.1通用访问规范( Generic Access profile,GAP GAP是应用层能够直接访问BLE协议栈的最底层,它包括管理广播和连接事件的有 关参数。GAP模块代表了所有蓝牙设备的共用基础功能,如传输,协议或者应用规范 所使用的模式和访问过程。GAP的服务包括设备发现,连接方式,安全,认证,关联 模型和服务发现等。我们会在后面专门写一篇文章进行介绍 注意:GAP的更多详细介绍见《 Bluetooth Core Specification》(蓝牙核心规范)的 第3卷C部分。 2.11角色 为了创建和维持一个BLE连接,引入了角色"这一概念。一个BLE设备不是集中 器角色就是外围设备角色,这是根据是谁发起这个连接来确定的。集中器设备总是连接 的发起者,而外围设备总是被连接者。集中器和外围设备的关系就像链路层中的主机和 从机的概念。 在 BLE LED应用例程中,使用S132 SoftDevice烧录到nRF52832作为外围没备 计算机或者手机作为集中器。 除∫集中器角色和外围设备角色,蓝牙核心规范还定乂∫观察者角色和广播者角色,观 察者角色监听空中的事件,广播者角色只是广播信息而不接收信息。观察者角色和广播 者角色都只广播而并不建立连接。它们在我们的这个应用中并不适用。 注意:在一个连接的一端的设备被称为对等设备,不管它是集中器还是外围设备。 2.12广播 集中器能够与外围设备建立连接,外围设备必须处于广播状态,它每经过一个时间 冋隔发送一次丿播数据包,这个时间间隔称为)播闫隔,它的范围是20ms到10.24s。 广播间隔影响建立连接的时间。 集中器发送一个连接请求来发起连接之前,必须接收到一个广播数据包,外围设备 发送一个广播数据包之后一小段时间内只监听连接请求。 Copyrights2016-2022青风电子社区 alL rights reserved 電責 青风带你玩蓝牙nRF52832M10淘宝地址:hmp/ fv5. taobao. com/ 一个广播数据包最多能携带31字节的数据,它通常包含用户可读的名字、关于设 备发送数据包的有关信息、用于表示此设备是否可被发现的标志等类似的标志。 当集中器接收到播数据包后,它可能发送请求更多数据包的请求,称为扫描回应, 如果它被设置成主动扫描,外围设备将会发送一个扫描回应做为对集中器请求的回应, 扫措回应最多可以携带31字节的数据。 广播,包括扫描请求和扫描回应,出现在远离WLAN使用的2.4G频段之外的3 个频率上,以防止被WiFi干扰 2.1.3扫描 扫描是集中器监听广播数据包和发送扫描请求的过程,它有2个定时参数需要特 别注意:扫描窗凵和扫描问隔。 对于每一个扫描间隔,集中器扫描的时间等于一个扫描窗口,这就意味着如果扫描窗I 等于扫描间隔,那么集中器将处于连续扫描之中。扫描窗口和扫描间隔之比为扫描占空 比 2.14发起 如果集中器想建立一个连接,当扫描监听到广播数据包后它将采用相同的过程:当要发 起连接时,集中器接收到一个广播数据包之后将会发送一个连接请求。 2.1.5连接 集中器和外围设备第一次交换数据定义为连接状态。在一个连接状态中,集中器将会在 个特定定义的间隔从外围设备请求数据,这个间隔称为连接间隔,它由集中器决定并 应用于连接,但是外围设备可以发送连接参数更新请求给集中器。根据蓝牙核心规范 连接问隔必须在7.5ms到4s之间 如果外围设备在一个时间帧内没有回应集中器的数据包,称为连接监管超时,连接 被认为丢失。 可以通过在每一个连接间隔中传输多个数据包以获得更髙的数据吞吐量,每一个传 输数据包最多可以携带20个字节的应用数据。但是如果电流消耗是重点,同时外围设 备也没有数据要发送,它可以选择忽略一定数量的连接间隔,这个忽略连接问隔的数目 称为从机延时( slave latency)。 在一个连接中,除」广播信道,设备间在频带的所有信道中进行通信。当然对于应 用层,这是完全透明的 22通用属性配置文件( Generic Attribute profile,GATT) GATT层是传输真正数据所在的层。包括了一个数据传输和存储框架以及其基本操作。 GTTA定义了两类角色: Copyrights2016-2022青风电子社区 alL rights reserved 6 電責 青风带你玩蓝牙nRF52832V1.0 淘宝地址http://qfv5.taobao.com/ 服务器( server)和客户端( client),GATT角色无需和GAP角色绑定,但是可能由 更高层的规范进行指定。下面来详细介绍在任务中的定义 2.2,1角色 除了GAP定义了角色之外,BLE还定义了另外2和角色:GAT服务器和GATT 客户端,它们完全独立于GAP的角色。提供数据的设备称为GATT服务器,访问GATT 服务器而获得数据的设备称为GAT客户端。 以 BLE LED应用为例,外围设备(带有LED)作为服务器,集中器作为客户端。 注意:一个设备可以同时作为服务器和客户端。这里采用开发板作为服务器,于机作为 客户端 2.2.2GATT的规范层次 一个GATT服务器通过一个称为属性表的表格组织数据,这些数据就是用于真正发送 的数据 2.2.2.1属性 个属性包含句柄、UUID、值,句柄是属性在GATT表中的索引,在一个设备中 每一个属性的句枘都是唯一的。UUID包含属性表中数据类型的信息,它是理解属性表 中的值的每一个字节的意义的关键信息。在一个GATT表中可能有许多属性,这些属 性能可能有相同的UUID 2.22.2特性 个特性至少包含2个属性:一个属性用于声明,一个属性用于存放特性的值 所有通过GAT服务传输的数据必须映射成一系列的特性,可以把特性中的这些数据 看成是一个个捆绑起来的数据,每个特性就是一个自我包容而独立的数据点。例如,如 果几块数据总是一起变化,那么我们可以把它们集中在一个特性里 以 BLE LED应用为例,外围设备(带有LED)作为服务器,集中器作为客户端 在 BLE LED服务中,如果多任务,任务和任务之间没有任何联系,而且它们可以各自 独立地改变,因此,可以让它们成为独立的特性,所以我们用一个特性用来表示当前 LED的状态 2.2.2.3描述符 任何在特性中的属性不是定义为属性值就是为描述符。描述符是一个额外的属性以 提供更多特性的信息,它提供一个人类可识别的特性描述的实例。 然而,有一个特别的描述符值得特别地提起:客户端特性配置描述符( Client Characteristic Configuration Descriptor,ccCD),这个描述符是给任何支持通知 Copyrights2016-2022青风电子社区 alL rights reserved 青风带你玩蓝牙nRF52832V1.0 淘宝地址http://qfv5.taobao.com/ 或指示功能的特性额外増加的。在CCCD中写入"1″使能通知功能,写入"2″使能指示 功能,写入"0“同时禁止通知和指示功能。 在S132 SoftDevice协议栈中,对任何使能了通知功能或是指示功能的特性, 协议栈将自动加入这个类型的描述符。 2.2.24服务 一个服务包含一个或多个特性,这些特性是逻辑上相关的集合体 GATT服务一般包含几块具有相关的功能,比如特定传感器的读取和设置,人机接 口的输入输出。组织具有相关的特性到服务中既实用又有效,因为它使得逻辑上和用户 数据上的边界变得更加清晰,同时它也有助于不同应用程序间代码的重用。GATT基于 牙技术联盟(SIG)官方而设计,SIG建议根据它们的规氾设计自己的 profile。 对于 BLE LED应用例程,把LED特性放到服务中 2.2.2.5 profile(数据配置文件) 个pof|e文件可以包含一个或者多个服务,一个pofe文件包含需要的服务的信 息或者为对等设备如何交互的配置文件的选项信息。设备的GAP和GATT的角色都可 能在数据的交换过程中改变,因此,这个文件应该包含广播的科类、所使用的连接间隔、 所需的安全等级等信息。 要注意的是一个 profile中的属性表不能包含另一个属性表 在 BLE LED示例中的 profile不是一个标准描述的 profile。标准 profile参加本 文2.1接描述 2.23标准的定制服务和特性 蓝牙技术联盟(SIG)已经定义些 profile、服务、特性和根据协议栈的GATT层定义 的属性。但是,协议栈中只实现了一部分应用的BLE服务,那就意味着,只要协议栈 支持GATT,就可能为个应用建立个它需要的 profile和服务。既然在个应用中 可以支持 profile和服务,那么就可以在这个应用中建立一个个人定制的服务。 对于 BLE LED这个示例来说,蓝牙技术联盟没有包含这个应用,因此它建立了一个 定制的服务,包括1个定制的特性。 注:讲到这里大家应该清楚我们的任务就是要建立私有的 profile。 Copyrights2016-2022青风电子社区 alL rights reserved 電責 青风带你玩蓝牙nRF52832V1.0 3淘宝地址:htp:/afv5 taobao. com 23如果定制私有 profile服务 只要协议栈支持GATT,就可能为一个应用建立一个它需要的 profile和服务。因 此该 profile必须符合GATT的规范定,这里大家有可以回到前面重新研读GATT的说 明 23.1 UUID 在GAT层"中规范定义的所有属性都有一个UUID值,UUID是全球唯一的128 位的号码,它用来识别不同的特性。 2.3.1.1蓝牙技术联盟UUID 蓝牙核心规范制定了两种不同的UUID,一种是基本的UUID,一种是代替基本UUID 的16位UUID。 所有的蓝牙技术联盟定义UUID共用了一个基本的UUID 0X0000XXXX-0000-1000-8000-00805F9B34FB 为了进一步简化基本UUID,每一个蓝牙技术联盟定义的属性有一个唯一的16位 UUID,以代替上面的基本UUID的x′部分。例如,心率测量特性使用0X2A37作为 它的16位UUID,因此它完整的128位UUID为: 0X00002A37-0000-1000-8000-00805F9B34FB 虽然蓝牙技术联盟使用相同的基本UUID,但是16位的∪UID足够唯一地识别蓝牙技 术联盟所定义的各种属性 蓝牙技术联盟所用的基本∪UID不能用于仼何定制的属性、服务和特性。对于定制的 属性,必须使川力外完整的128位UUID。 2.3.1.2供应商特定的UUID SoftDevice根据蓝牙技术联盟定义UUID类似的方式定义UUID:先增加一个特定的 基本UUID,再定义一个16位的UUID(类似于一个别名),再加载在基本UUID之 上。这种采用为所有的定制属性定义一个共用的基本UUID的方式使得应用变为更加 简单,至少在同一服务中更是如此 使用软件 nRFgo Studio非常容易产生一个新的基本UUID,见第29页第4.4.3节ν服 务初始化"。 例如,在 BLE LED示例中,采用 0x0000XX-1212-EFDE-1523-785 FEABCD123作为基本UUID。 蓝牙核心规范没有任何规则或是建议如何对加入基本∪UID的16位UUID进行分配, 因此你可以按照你的意图来任意分配。 Copyrights2016-2022青风电子社区 alL rights reserved 電責 青风带你玩蓝牙nRF52832V1.0 淘宝地址http://qfv5.taobao.com/ 例如,在 BLE LED示例中,0x1523作为服务的UUID,0×1524作为LED特 性的UUID。 23.2空中操作和性质 大部分的空中操作事件都是采川句柄来进行的,因为句柄能够唯一识别各个属性。如何 使用特性依据它的性质,特性的性质包括: l写 1没有回应的写 读 通知:客户端发给请求给服务器,不需要服务器回复一个响应 指示:服务器发给指示给客户端,需要客户端发一个确认给服务器 更多的性质在蓝牙规范中有明确的定义,但以上性质更为常用。 2.3.2.1写和没有回应的写 写和没有回应的写允许GATT客户端写入一个值到GATT服务器的一个特性中 它们之间不同的地方在于没有回应的写事件没有任何应用层上的确认或回应。 2.3.2.2读 读性质表明一个GATT客户端可以读取在GATT服务器中特性的值。 2.3.2.3通知和指示 通知和指示性质允许GATT服务器在其某个特性改变的时候对GAT客户端进行提醒, 通知和指示之间不同之处在于指示有应用层上的确认,而通知没有 在 BLE LED示例中,控制LED的特性,都是LED服务中的定制的特性。在LED特 性中,集中器需要能够设置它的值和能够读取它的值。因为应用层级别的确认没有必要 因此你可以使用没有回应的写和读的性质 注意:GATT和它的下一层ATT协议在《监牙核心规范》第3卷,第F和G部分中有 详细的描述。 3.1广播 用于广播的数据结构如下: ble_ gap.h中be_ gap_conn_sec_mode_t/GAP链路安全要求 Copyrights2016-2022青风电子社区 alL rights reserved 10

...展开详情
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
上传资源赚积分or赚钱
    最新推荐