没有合适的资源?快使用搜索试试~ 我知道了~
首页nrf51822创建一个简单ble例程
nrf51822创建一个简单ble例程
需积分: 50 34 下载量 27 浏览量
更新于2023-03-16
评论
收藏 1.1MB PDF 举报
本文介绍了在nRF51822 上如何开始编写低功耗蓝牙(BLE)应用程序,包括对BLE 的特性进 行了概要的介绍,并且详细描述了构建一个定制服务的简单例程,这个简单的例程叫做LED Button 服务
资源详情
资源评论
资源推荐
本文介绍了在 nRF51822 上如何开始编写低功耗蓝牙(BLE)应用程序,包括对 BLE 的特性进
行了概要的介绍,并且详细描述了构建一个定制服务的简单例程,这个简单的例程叫做 LED
Button 服务。
1 简介
本文的目的是教你如何一步步创建自己的 BLE 应用程序,包括使用 nRF51822 芯片创建一个
定制的服务。
1.1 最低要求
需要有嵌入式 C 语言编程经验,以便完全理解本应用手册。
1.1.1 需要的工具
需要一个 nRF51822EvaluationKit 的开发板,另外还需要下载和安装以下软件工具:
•S110SoftDevice
•nRFgoStudio
•nRF51SDK
•KeilMDK‐ARM
•SEGGER’sJ‐Linktools
如何把协议栈固件 S110SoftDevice 烧录到 nRF51822 芯片中请参考:《nRF51822EvaluationKit
UserGuide》。
注意:当编写本文档时参考了最新版本的 nRF51 SDK 5.2.0 和最新版本的协议栈 S110
SoftDevice6.0.0。
1.2 文档说明
下面的文档是重要的参考资料。
文档 描述
nRF51822EvaluationKitUserGuide
使用 Evaluation Kit 开发板的介绍和配置,包括 Keil 和
SoftDevice 的配置。
nRF51SDKdocumentation
这个文件在 SDK 安装的文件夹之下的子文件夹中,包含
了 SDK 中所有功能 API 的文档。
S110nRF51822SoftDeviceSpecification
介绍了协议栈 S110SoftDevice,包括资源的用法和高级
的功能函数。
nRF51822ProductSpecification
描述了 nRF51 的硬件、模块和电气特性。
nRF51SeriesReferenceManual
介绍了 nRF51 芯片系列所有功能模块的描述和芯片所有
的外围资源。
nAN‐15:CreatingApplicationswiththeKeil
C51Compiler
这个应用手册包含使用 KeilμVision 的信息,它为
nRF24LE1 芯片而写,但是 3.3 节“Includingfiles”和 3.4 节
““Debugyourproject”同样适用于 nRF51822 芯片。
BluetoothCoreSpecification,version4.0
卷 1,3,4,6
这个文档由蓝牙技术联盟组织提供,包含了关于蓝牙服
务和 profiles 的信息。
1.3 蓝牙技术资源
所有蓝牙技术联盟的服务、特性和描述都是根据蓝牙开发网站
来定义,可以参考规范的不同
部分找到 UUID 或者是数据格式的定义。
1.4 nRF51822 和 S110SoftDevice
S110SoftDevice 是 BLE 外围设备协议栈的解决方案,它集成了低功耗控制器、主机,并提供
了一个完整和灵活的 API 用于在一个片上系统(SoC)构建一个低功耗蓝牙的解决方案,S110
SoftDevice 提供的是已经编译完成的 HEX 文件,在加载你的应用程序之前,你必须把它预先
烧录到芯片中。
S110SoftDevice 使用了一部分芯片的 flash 和 RAM,它们在你的代码中已被保护,因此你不
能意外地写数据到该区域。S110SoftDevice 也需要互斥地访问外围资源和寄存器。
如何烧录 S110SoftDevice 到 nRF51822 中请参考:
《nRF51822EvaluationKitUserGuide》
SoftDevice 使用了哪些资源,请参考:
《nRF51822S110SoftDeviceSpecification》
1.5 应用简述
LEDButton 应用示例是为了让你学习如何在 nRF51822 上开发 BLE 应用,它是一个通过 BLE
的通知功能进行通信的 BLE 应用的简单演示。当它运行时,你可以通过集中器(见第 10 页
2.2.1 节“角色”
中对集中器的定义部分)触发 nRF51822 上 LED 的输出,并且当在 nRF51822
上的按键被按下时集中器将会收到一个通知。
这个应用通过一个服务(见第 10 页 2.2.2 节“GATT 层”服务和特性的描述部分)被建立,
这个服务包括 2 个特性:LED 特性和按键特性。LED 特性:通过没有回应的写远程操作 LED
的亮灭。按键特性:当按键被按下时,将会发送一个通知到集中器。
2BLE 介绍
本章将介绍 BLE 协议不同的层,包括各个层的部件和它们的概念。
2.1通用访问规范(GenericAccessProfile,GAP)
GAP 是应用层能够直接访问 BLE 协议栈的最底层,它包括管理广播和连接事件的有关参数。
注意:GAP 的更多详细介绍见《BluetoothCore Specification》(蓝牙核心规范)的第 3 卷 C 部
分。
2.1.1 角色
为了创建和维持一个 BLE 连接,引入了“角色”这一概念。一个 BLE 设备不是集中器角色就是
外围设备角色,这是根据是谁发起这个连接来确定的。集中器设备总是连接的发起者,而外
围设备总是被连接者。集中器和外围设备的关系就像链路层中的主机和从机的概念。
在 LED Button 应用例程中,使用 S110 SoftDevice 烧录到 nRF51822 作为外围设备,计算
机或者手机作为集中器。
除了集中器角色和外围设备角色,蓝牙核心规范还定义了观察者角色和广播者角色,观察者
角色监听空中的事件,广播者角色只是广播信息而不接收信息。观察者角色和广播者角色都
只广播而并不建立连接。它们在我们的这个应用中并不适用。
注意:在一个连接的另一端的设备被称为对等设备,不管它是集中器还是外围设备。
2.1.2 广播
集中器能够与外围设备建立连接,外围设备必须处于广播状态,它每经过一个时间间隔发送
一次广播数据包,这个时间间隔称为广播间隔,它的范围是 20ms 到 10.24s。广播间隔影响
建立连接的时间。
集中器发送一个连接请求来发起连接之前,必须接收到一个广播数据包,外围设备发送一个
广播数据包之后一小段时间内只监听连接请求。
一个广播数据包最多能携带 31 字节的数据,它通常包含用户可读的名字、关于设备发送数
据包的有关信息、用于表示此设备是否可被发现的标志等类似的标志。
当集中器接收到广播数据包后,它可能发送请求更多数据包的请求,称为扫描回应,如果它
被设置成主动扫描,外围设备将会发送一个扫描回应做为对集中器请求的回应,扫描回应最
多可以携带 31 字节的数据。
广播,包括扫描请求和扫描回应,出现在远离 WLAN 使用的 2.4G 频段之外的 3 个频率上,
以防止被 WiFi 干扰。
2.1.3 扫描
扫描是集中器监听广播数据包和发送扫描请求的过程,它有 2 个定时参数需要特别注意:扫
描窗口和扫描间隔。
对于每一个扫描间隔,集中器扫描的时间等于一个扫描窗口,这就意味着如果扫描窗口等于
扫描间隔,那么集中器将处于连续扫描之中。扫描窗口和扫描间隔之比为扫描占空比。
2.1.4 发起
如果集中器想建立一个连接,当扫描监听到广播数据包后它将采用相同的过程:当要发起连
接时,集中器接收到一个广播数据包之后将会发送一个连接请求。
2.1.5 连接
集中器和外围设备第一次交换数据定义为连接状态。在一个连接状态中,集中器将会在一个
特定定义的间隔从外围设备请求数据,这个间隔称为连接间隔,它由集中器决定并应用于连
接,但是外围设备可以发送连接参数更新请求给集中器。根据蓝牙核心规范,连接间隔必须
在 7.5ms 到 4s 之间。
如果外围设备在一个时间帧内没有回应集中器的数据包,称为连接监管超时,连接被认为
丢失。
可以通过在每一个连接间隔中传输多个数据包以获得更高的数据吞吐量,每一个传输数据
包最多可以携带 20 个字节的应用数据。但是如果电流消耗是重点,同时外围设备也没有数
据要发送,它可以选择忽略一定数量的连接间隔,这个忽略连接间隔的数目称为从机延时
(slavelatency)。
在一个连接中,除了广播信道,设备间在频带的所有信道中进行通信。当然对于应用层,
这是完全透明的。
2.2 通用属性配置文件(GenericAttributeprofile,GATT)
GATT 层是传输真正数据所在的层。
2.2
2.2.1 角色
除了 GAP 定义了角色之外,BLE 还定义了另外 2 种角色:GATT 服务器和 GATT 客户端,它们
完全独立于 GAP 的角色。提供数据的设备称为 GATT 服务器,访问 GATT 服务器而获得数据
的设备称为 GATT 客户端。
以 LEDButton 应用为例,外围设备(带有 LED 和按键)作为服务器,集中器作为客户端。
注意:一个设备可以同时作为服务器和客户端。
2.2.2GATT 层
一个 GATT 服务器通过一个称为属性表的表格组织数据,这些数据就是用于真正发送的数据。
2.2.2.1 属性
一个属性包含句柄、UUID、值,句柄是属性在 GATT 表中的索引,在一个设备中每一个属性
的句柄都是唯一的。UUID 包含属性表中数据类型的信息,它是理解属性表中的值的每一个
字节的意义的关键信息。在一个 GATT 表中可能有许多属性,这些属性能可能有相同的 UUID。
2.2.2.2 特性
一个特性至少包含 2 个属性:一个属性用于声明,一个属性用于存放特性的值。
所有通过 GATT 服务传输的数据必须映射成一系列的特性,可以把特性中的这些数据看成是
一个个捆绑起来的数据,每个特性就是一个自我包容而独立的数据点。例如,如果几块数据
总是一起变化,那么我们可以把它们集中在一个特性里。
以 LEDButton 应用为例,外围设备(带有 LED 和按键)作为服务器,集中器作为客户端。
在 LEDButton 服务中,LED 和按键之间没有任何联系,而且它们可以各自独立地改变, 因
此,可以让它们成为独立的特性,所以我们用一个特性表示当前按键的状态,用另一个
特性用来表示当前 LED 的状态。
2.2.2.3 描述符
任何在特性中的属性不是定义为属性值就是为描述符。描述符是一个额外的属性以提供更多
特性的信息,它提供一个人类可识别的特性描述的实例。
然而,有一个特别的描述符值得特别地提起:客户端特性配置描述符(ClientCharacteristic
ConfigurationDescriptor,CCCD),这个描述符是给任何支持通知或指示功能的特性额外增加
的,参见第 15 页第 2.2.5 节“空中操作和性质”。
在 CCCD 中写入“1”使能通知功能,写入“2”使能指示功能,写入“0”同时禁止通知和指示
功能。
在 S110SoftDevice 协议栈中,对任何使能了通知功能或是指示功能的特性,协议栈将自
动加入这个类型的描述符。
2.2.2.4 服务
一个服务包含一个或多个特性,这些特性是逻辑上相关的集合体。
GATT 服务一般包含几块具有相关的功能,比如特定传感器的读取和设置,人机接口的输入
输出。组织具有相关的特性到服务中既实用又有效,因为它使得逻辑上和用户数据上的边界
变得更加清晰,同时它也有助于不同应用程序间代码的重用。GATT 基于蓝牙技术联盟(SIG)
官方而设计,SIG 建议根据它们的规范设计自己的 profile。
对于 LEDButton 应用例程,因为不关心它们的重用,所以把 LED 特性和按键特性放到了一个
服务中。
2.2.2.5profile(数据配置文件)
一个 profile 文件可以包含一个或者多个服务,一个 profile 文件包含需要的服务的信息或者
为对等设备如何交互的配置文件的选项信息。设备的 GAP 和 GATT 的角色都可能在数据的交
换过程中改变,因此,这个文件应该包含广播的种类、所使用的连接间隔、所需的安全等级
等信息。
需要注意的是一个 profile 中的属性表不能包含另一个属性表。
在 LEDBUTTON 示例中的 profile 不是一个标准描述的 profile。
2.2.3 标准的定制服务和特性
蓝牙技术联盟(SIG)已经定义一些 profile、服务、特性和根据协议栈的 GATT 层定义的属性。
但是,协议栈中只实现了一部分应用的 BLE 服务,那就意味着,只要协议栈支持 GATT,就
可能为一个应用建立一个它需要的 profile 和服务。
既然在一个应用中可以支持 profile 和服务,那么就可以在这个应用中建立一个定制的服
务。
对于 LEDBUTTON 这个示例来说,蓝牙技术联盟没有包含这个应用,因此它建立了一个定制
的服务,包括 2 个定制的特性。
2.2.4 UUID
在第 10 页 2.2.2 节“GATT 层”中定义的所有属性都有一个 UUID 值,UUID 是全球唯一的 128
位的号码,它用来识别不同的特性。
2.2.4.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 位的 UUID 足够唯一地识别蓝牙技术联盟
所定义的各种属性。
蓝牙技术联盟所用的基本 UUID 不能用于任何定制的属性、服务和特性。对于定制的属性,
必须使用另外完整的 128 位 UUID。
2.2.4.2 供应商特定的 UUID
SoftDevice 根据蓝牙技术联盟定义 UUID 类似的方式定义 UUID:先增加一个特定的基本 UUID,
再定义一个 16 位的 UUID(类似于一个别名),再加载在基本 UUID 之上。这种采用为所有
的定制属性定义一个共用的基本 UUID 的方式使得应用变为更加简单,至少在同一服务中更
是如此。
使用软件 nRFgoStudio 非常容易产生一个新的基本 UUID,见第 29 页第 4.4.3 节“服务初始化”。
例如,在 LED BUTTON 示例中,采用 0x0000xxxx‐1212‐EFDE‐1523‐785FEABCD123 作为基本
UUID。
蓝牙核心规范没有任何规则或是建议如何对加入基本 UUID 的 16 位 UUID 进行分配,因此你
可以按照你的意图来任意分配。
剩余28页未读,继续阅读
bbbcccdddd444
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2022年中国足球球迷营销价值报告.pdf
- 房地产培训 -营销总每天在干嘛.pptx
- 黄色简约实用介绍_汇报PPT模板.pptx
- 嵌入式系统原理及应用:第三章 ARM编程简介_3.pdf
- 多媒体应用系统.pptx
- 黄灰配色简约设计精美大气商务汇报PPT模板.pptx
- 用matlab绘制差分方程Z变换-反变换-zplane-residuez-tf2zp-zp2tf-tf2sos-sos2tf-幅相频谱等等.docx
- 网络营销策略-网络营销团队的建立.docx
- 电子商务示范企业申请报告.doc
- 淡雅灰低面风背景完整框架创业商业计划书PPT模板.pptx
- 计算模型与算法技术:10-Iterative Improvement.ppt
- 计算模型与算法技术:9-Greedy Technique.ppt
- 计算模型与算法技术:6-Transform-and-Conquer.ppt
- 云服务安全风险分析研究.pdf
- 软件工程笔记(完整版).doc
- 电子商务网项目实例规划书.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0