nRF51822芯片上的BLE蓝牙协议栈
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
nRF51822芯片上的BLE蓝牙协议栈
本文介绍了在nRF51822芯片上使用S110 SoftDevice协议栈构建一个最小的BLE应用的过程。
1初始化介绍
有一些初始化函数通常在执行一个BLE应用之前调用,下面的表格中列出了这些初始化调用函数,在后面将对它们进行详细的介绍。
大部分采用数据结构的形式作为输入参数,这些数据结构包含一系列的配置和选项信息,阅读代码中的注释能更好地理解它们。
在广播开始之后,你就进入了main函数中的for循环。
2 协议栈S110 SoftDevice
为了使用独特的射频特性,你必须使能S110 SoftDevice协议栈。
见《S110 nRF51822 SoftDevice Specification》(S110 nRF51822 SoftDevice协议栈说明书)中对硬件资源的详细需求。
3 广播
用于广播的数据结构如下:
ble_gap.h 中ble_gap_conn_sec_mode_t
ble_advdata.h 中ble_advdata_t
注意:传递给sd_ble_gap_device_name_set()的安全模式仅适于设备本身的名字。
广播参数(ble_gap_adv_params_t)必须通过sd_ble_gap_adv_start()来传递:
4 连接参数
SDK提供了一个名为ble_conn_params的模块用于管理连接参数更新,它通过SoftDevice API进行处理,包括请求的时间和第一次请求被拒绝再发送一个新的请求。
在初始化结构体ble_conn_params_init_t中,定义了更新过程的有关参数,例如,是否开始连接,什么开始写入一个特定的CCCD,是否使用连接参数,发送更新请求的延时等等。
在初始化函数ble_conn_params_init()中,使用封装了初始化连接参数(ble_gap_conn_params_t)的结构体ble_conn_params_init_t作为输入参数进行连接参数初始化。
ble_conn_params SDK模块确保与主机(集中器)的连接参数相适应,如果不适应,外围设备将要求更改连接参数,超过设定的更新次数都没有更新成功后,它就会断开连接或者根据设置返回一个事件到应用层。
5 服务
服务可以通过sd_ble_gatts_service_add()进行添加,最好不要在应用层代码中建立服务,而是在一个单独的文件中建立服务。
一个服务不是主服务就是次服务,但是在通常实际的应用中大部分使用主服务。
变量service_uuid就是你想用于服务的UUID。
变量service_handle是一个输出变量,当创建一个服务的时候将会返回一个唯一的句柄值,这个句柄可以在以后用于识别不同的服务。
6 特性
特性可以通过sd_ble_gatts_characteristic_add()函数进行添加,它有4个参数。
为了代码清晰,这个函数应该只能出现在服务文件中,而不能出现在应用层中。
第1个参数是特性要加入的服务的句柄,第2个参数是特性的结构体,它是一个全局变量,它包含了特性可能用到的性质(读,写,通知等)。
第3个参数是值属性的描述,它包含了它的UUID,长度和初始值。
第4个参数是返回的特性和描述符的唯一句柄,这个句柄可以在以后用于识别不同的特性。
例如,在写事件中用于识别哪一个特性被写入。