s110_nrf51822 migration document

a fatal programming error hapened

对于安卓,推荐装NORDIC提供的MCP(Master Control Panel)

BLE Device Monitor
ble-sniffer_win_1.0.1_1111_Sniffer.exe

    通用访问配置文件(Gineric Access Profile,GAP),该Profile
保证不同的Bluetooth产品可以互相发现对方并建立连接。

    (GAP)定义了蓝牙如何发现和建立与其他设备的安全(或不安全)连接。
它处理一些一般模式的业务(如询问、命令和搜索)和一些安全性问题(如担保),
同时还处理一些有关连接的业务(如链路建立、信道和连接建立)。

    GAP代码:

gap_params_init()


这个函数完成了两件事:
    设置连接的安全模式
    设置连接间隔

3.1.2 GAP初始化安全模式配置:
   
    GAP通常还会负责启动BLE连接的安全功能。只有对通过身份验证的连接而言某些
数据是可读或可写的。一旦形成一个连接,两个设备可以通过一个过程被称为配对。
进行配对时,密钥建立加密和认证的连接。
    在一个典型的案例,外围设备需要中央设备提供密钥以完成配对过程。这可能是
一个固定值,如“000000”,或可能是一个随机生成的值被提供给用户。中央设备发送
正确的密钥后,两台设备交换安全密钥加密和验证的链接。

    在许多情况下,相同的中央设备和外围设备将会经常建立连接和断开连接。BLE
具有一个安全功能允许两个设备在配对的时候给对方一个长久的安全密钥。此功能称为
绑定,使得两个重连设备能够迅速重新确定加密和认证而不需要经过充分的配对过程,
只要它们存储长期的密钥信息。

   
设备名称修改:
   

err_code = sd_ble_gap_device_name_set(&sec_mode, (const uint8_t*)DEVICE_NAME,
                                                       strlen(DEVICE_NAME));

GAP初始化设置连接间隔

    连接前,外围设备需要先广播,向中央设备通告自己的存在,主要有这几个参数:
广播间隔:单位0.625ms,广播快,容易被中央设备发现,慢则省电。
广播持续时间:为了省电,可以广播一段时间之后。

    在一个典型的蓝牙系统中,外围设备发现具体的广告数据让任何中央设备知道他是一个可连接的设备。
广告内容包含设备地址,还可以包含一些额外的数据,比如设备名称。中央设备接收到广播后发送一个搜索请求
给外围设备,外围设备答复一个搜索答复。这就是设备发现的过程,中央设备就知道外围设备是一个可连接的
设备。中央设备可以发送一个建立连接的请求给外围设备,一个连接情况包含一些连接参数:

连接间隔:
    在一个BLE连接中调频机制需要被使用,这样两个设备之间可以在一个特定的通道上进行数据收发,
在一个特定的时间之后会跳到一个新的通道上,LL层负责通道的切换。

从机潜伏周期:
    这个参数描述了从机跳过连接事件的次数。这使外围设备具有一定的灵活性,如果它不具有任何数据
传送,它可以选择跳过连接事件,并保持睡眠,从而提供了一些积蓄力量。这一决定取决于外围设备。

监督超时:
    监督超时时间从最小10(100ms)到最大3200(32.0s)。

短连接间隔:
    高功耗,搞数据吞吐量,发送等待时间短

长连接间隔:
    低功耗,低数据吞吐量,发送等待时间长

低或者0潜伏值:
    从机在没有数据发送的情况下高功耗,从机可以快熟的收到主机的数据

高潜伏值:
    从机在没有数据发送的情况下可以低功耗,从机无法及时收到主机的数据,但主机能及时收到从机的数据。

 

1:nRF51822 蓝牙协议的分层

 应用层:
     Speed & Cadence 、Blood Pressure、Heart Rate、Thermometer
Battery、Proximity、HID over GATT

主协议层:
    GATT GAP ATT SMP L2CAP

控制层:
    Host Controller Interface(HCI)
    Link Layer(LL)
    Physical Layer(PHY)

 

 

2.1.1 角色
   
    为了创建和维持一个BLE连接,引入了“角色”这一概念。一个BLE设备不是集中器角色就是外围设备
角色,这是根据是谁发起这个连接来确定的。集中器设备总是连接的发起者,而外围设备总是被连接者。

2.1.2 广播

    集中器能够与外围设备建立连接,外围设备必须处于广播状态,它每经过一个时间间隔发送一次广播
数据包,这个时间间隔称为广播间隔,它的范围是20ms到10.24s。广播间隔影响建立连接的时间。

    集中器发送一个连接请求来发起连接之前,必须接收到一个广播数据包,外围设备发送一个广播数据包之后
一小段时间内只监听连接请求。

    一个广播数据包最多能携带31字节的数据,它通常包含用户可读的名字、关于设备发送数据包的有关信息
用于表示此设备是否可被发现的标志等类似的标志。

    当集中器接收到广播数据包后,它可能发送请求更多数据包的请求,称为扫描回应。

    广播,包括扫描请求和扫描回应,出现在远离WLAN使用的2.4G频段之外的3个频率上,以防止被WIFI干扰。

2.1.3 扫描

    扫描是集中器监听广播数据包和发送扫描请求的过程,它有2个定时参数需要特别注意:扫描窗口和扫描
间隔。

2.1.4 发起

    如果集中器想建立一个连接,当扫描监听到广播数据包后它将采用相同的过程:当要发起连接时,集中器
接收到一个广播数据包之后将会发送一个连接请求。

2.1.5 连接

    集中器和外围设备第一次交换数据定义为连接状态。

2.2 通用属性配置文件(GATT)
   
    GATT层是传输真正数据所在的层。包括了一个数据传输和存储框架以及基本操作。

GATTA定义了两类角色:
    服务器(server)和客户端(client),

注意:一个设备可以同时作为服务器和客户端。这里采用开发板作为服务器,手机作为客户端。

2.2.2 GATT的规范层次

    一个GATT服务器通过一个称为属性表的表格组织数据,这些数据就是用于真正发送的数据。

2.2.2.1 属性

    一个属性包含句柄、UUID、值,句柄是属性在GATT表中的索引,在一个设备中每一个属性的句柄都是
唯一的。UUID包含属性表中数据类型的信息,它是理解属性表中的值的每一个字节的意义的关键信息。
在一个GATT表中可能有许多属性,这些属性可能有相同的UUID。

    
2.2.2.2 特性

    一个特性至少包含2个属性:一个属性用于声明,一个属性用于存放特性的值。

2.2.2.3 描述符

    任何在特性中的属性不是定义为属性值就是为描述符。描述符时一个额外的属性以提供更多特性的信息,
它提供一个人类可识别的特性描述的实例。

2.2.2.4 服务

    一个服务包含一个或多个特性,这些特性是逻辑上相关的集合体。

2.2.2.5 profile(数据配置文件)

    一个profile文件可以包含一个或者多个服务,一个profile文件包含需要的服务的信息或者对等设备