一、BLE基本认识
1.BLE双模可以扮演四种角色:Central,Peripheral,Observer和Broadcaster,常用的是Central和Peripheral。Central通过scan功能搜索周边开启的蓝牙设备,并可以与多个同时连接,比如手机设备等。Peripheral通过advertising功能发送自己设备信息,被Central设备连上之后不能再被其他Central设备搜索到,比如蓝牙耳机、蓝牙音箱等。
2.softdevice协议里面有client和server两种角色。Central需要通过服务(profile/service的UUID)向Peripheral获取数据,而UUID以及属性值是由Peripheral设备定义好的,因此Central设备在协议里扮演的是client角色,Peripheral扮演则是Server角色。
二、开发资料
开发资料主要是nRF官方提供的SD和SDK以及相关文档。需要注意的是SD版本与SDK版本需要配套使用。本人使用的SD版本是S130,SDK版本是V12.3.0。
SoftDevice简称SD,是基于BLE协议栈的API接口,用于应用层和协议栈之间的通信,因此我们只能看到S130文件夹中就是一堆头文件以及一个协议栈对应版本的hex文件。
SDK是nRF官方提供的软件开发包。里面主要提供了开发库以及官方例程。开发库路径在./components,官方例程路径在./examples,有部分官方例程是不支持BRF51系列的,比如ant应用等。下面对开发库和官方例程内容做一个详细描述。
文件路径 | 内容说明 |
---|---|
./component/ant | 这个应用是在NRF52系列以上的,SD也应使用S2xx以上版本,在此不多描述 |
./component/ble | 与ble开发相关的应用层代码 |
./component/boards | Nordic官方开发板的板级头文件定义 |
./component/device | Nordic蓝牙芯片开发寄存器等头文件定义 |
./component/drivers_ext | Nordic官方开发板扩展功能芯片的驱动 |
./component/drivers_nrf | Nordic蓝牙芯片M0内核外设的驱动 |
./component/libraries | Nordic官方提供的应用层可移植库(M0的外设应用等) |
./component/softdevice | 四个版本的SD,NRF51系列开发可用S130或S132版本 |
./component/toolchain | 开发时必须要的一些内核文、.s启动文件以及调试文件 |
下面重点在介绍一下./component/ble路径下与NRF51系列Ble开发的内容。
文件路径 | 内容说明 |
---|---|
./component/ble/ble_advertising | 做central角色时搜索设备的实现 |
./component/ble/ble_db_discovery | 蓝牙设备协议栈接收到数据时应用层处理的实现 |
./component/ble/ble_services | ble的服务实现(文件夹名带_c后缀的表明在service中做是client角色,基本认识里面已经做过说明),里面包括了串口服务nus_c/nus等(理解:noirdic uart service,蓝牙底层接收到数据之后会触发串口服务,具体实现按照自己需要可进行修改) |
./component/ble/common | ble应用层开发会用到的可移植文件,定义了一些设备状态接口等,一般不需做修改 |
下面列举examples文件夹里面有NRF51系列Ble开发相关的内容。
文件路径 | 内容说明 |
---|---|
./examples/ble_central | 做central角色的例程,包括串口蓝牙通信例程,一连多例程等 |
./examples/ble_peripheral | 做peripheral角色的例程,有beacon例程,串口通信例程等 |
./examples/ble_central_and_peripheral | 既可作centra又可做peripheral角色的例程 |
./examples/peripheral | NRF51系列芯片外设参考例程,这个相当于裸机外设调试例程,ble开发不需要用到 |