蓝牙低功耗(BLE)是蓝牙技术联盟(Bluetooth SIG)设计和推出的一种无线通信技术。BLE具有以下5个特点:
  1. 通信距离长,高达100米。
  2. 超低功耗,大部分时间需要使用纽扣电池运行。BLE可实现超低的峰值、平均和空闲模式功耗。此外,低占空比设备还能节省更多电能。RSL10在深度睡眠模式下的功耗仅62.5纳瓦(nW),业界最低。
  3. 跨平台互通,多厂商互操作性。作为一个标准。安卓、iOS、Windows系统、Linux等主流操作系统均原生支持BLE。
  4. 传输速度快,RSL10可实现每秒2百万位元 (Mbps)的速度2Mbps
  5.封装较小,可穿戴设备空间有限,RSL10封装仅仅6 x 8 x1.46毫米系统级封装(SiP)模组,包含天线。
  BLE协议:
  控制器层:不同MC硬件设定,对数据包进行编码并使用无线信号发送它们的实际设备。控制器还能接收无线信号,并将它们解码为数据。
  主机层:软件栈,包含各种协议和规范(profile)(共同执行一个特定的最终应用的一组服务及它们的行为),负责管理两个设备之间的通信。
  应用层: 利用控制器和主机执行某个特定功能的用例。
  应用层是开发人员重点关注的,除了一组通用的协议和服务之外,他们还能使用很多专用协议。蓝牙技术联盟为BLE设备定义了几个规范(profile) (即设备在某个特定应用中如何运行的规范)。HRS(Heart Rate Service)是Bluetooth SIG组织定义的标准服务之一,提供了心率测量、电池服务,RR区间、能量累计、皮肤接触等功能。HRS服务不依赖任何其他服务可独立存在。一个设备可以有多个实例。该规范可让一个采集器(如一部智能手机)连接用户身体上的一个心率传感器,并与其交互。SIF发布的这个规范描述了规范依赖关系HRP需要一个通用属性规范(GATT))、传感器角色要求、采集器(数据)角色要求、连接建立规程、安全事项等等。遵守这个规范能够无缝、轻松地让BLE适用于某个应用。SIG网站列出了所有可用规范。一个设备可以利用多个规范。
   打开RSL10 集成开发环境:ON Semiconductor IDE,通过PACK导入SDKble_peripheral_server_hrp:
1.png
程序结构如下:
11.png
main函数解析:
初始化默认设备名称特征数据APP_InitDevInfo();  
配置电池服务服务器:BASS_Setup();
配置设备信息服务服务器:DISS_Setup();
配置心率服务服务器:HRPS_Setup();

心率是用过模拟随机实现的: APP_HRP_measure.measurement.heart_rate = (rand() % (191 - 64)) + 64;
#include <app.h>
  • extern const struct DISS_DeviceInfo_t deviceInfo;
  • static void BASS_Setup(void){
  •     BASS_Initialize(APP_BAS_NB, APP_BASS_ReadBatteryLevel);
  •     BASS_NotifyOnBattLevelChange(TIMER_SETTING_S(1));     /* Periodically monitor the battery level. Only notify changes */
  •     BASS_NotifyOnTimeout(TIMER_SETTING_S(6));             /* Periodically notify the battery level to connected peers */
  •     APP_BASS_SetBatMonAlarm(BATMON_SUPPLY_THRESHOLD_CFG); /* BATMON alarm configuration */
  • }
  • static void DISS_Setup(void)
  • {
  •     DISS_Initialize(APP_DIS_FEATURES, (const struct DISS_DeviceInfo_t*) &deviceInfo);
  • }
  • /* ----------------------------------------------------------------------------
  • * Function      : void HRPS_Setup(void)
  • * ----------------------------------------------------------------------------
  • * Description   : Configure the Heart Rate Service Server
  • * Inputs        : None
  • * Outputs       : None
  • * Assumptions   : None
  • * ------------------------------------------------------------------------- */
  • /**
  • * @brief Configure the Heart Rate Service Server
  • */
  • static void HRPS_Setup(void)
  • {
  •     HRPS_Initialize(TIMER_SETTING_S(1),
  •             HRPS_BODY_SENSOR_LOC_CHAR_SUP | HRPS_ENGY_EXP_FEAT_SUP | HRPS_HR_MEAS_NTF_CFG,
  •             HRS_LOC_CHEST,
  •             &app_adv_info,
  •             APP_HRPS_HeartRateMeasurementUpdate,
  •             APP_HRPS_EnergyExpResetInd);
  •     APP_HRPS_Initialize();
  • }
  • int main(void)
  • {
  •     /* Configure hardware and initialize BLE stack */
  •     Device_Initialize();
  •     /* Debug/trace initialization. In order to enable UART or RTT trace,
  •      * configure the 'RSL10_DEBUG' macro in app_trace.h */
  •     TRACE_INIT();
  •     PRINTF("\n\rble_peripheral_server_bond has started %s!\r\n", __TIME__);
  •     /* Configure application-specific advertising data and scan response data.
  •      * The advertisement period will change after 30 s as per 5.1.1 */
  •     APP_SetAdvScanData();
  •     /* Initialize the default device name characteristic data */
  •     APP_InitDevInfo();
  •     /* Configure Battery Service Server */
  •     BASS_Setup();
  •     /* Configure Device Information Service Server */
  •     DISS_Setup();
  •     /* Configure Heart Rate Service Server */
  •     HRPS_Setup();
  •     /* Add application message handlers */
  •     MsgHandler_Add(TASK_ID_GAPM, APP_GAPM_GATTM_Handler);
  •     MsgHandler_Add(GATTM_ADD_SVC_RSP, APP_GAPM_GATTM_Handler);
  •     MsgHandler_Add(TASK_ID_GAPC, APP_GAPC_Handler);
  •     MsgHandler_Add(APP_LED_TIMEOUT, APP_LED_Timeout_Handler);
  •     MsgHandler_Add(APP_BATT_LEVEL_LOW, APP_BASS_BattLevelLow_Handler);
  •     MsgHandler_Add(APP_TIMEOUT_WHITELIST, APP_WhitelistTimerHandler);
  •     /* Reset the GAP manager. Trigger GAPM_CMP_EVT / GAPM_RESET when finished. See APP_GAPM_GATTM_Handler */
  •     GAPM_ResetCmd();
  •     while (1)
  •     {
  •         Kernel_Schedule();    /* Dispatch all events in Kernel queue */
  •         Sys_Watchdog_Refresh();
  •         SYS_WAIT_FOR_EVENT;    /* Wait for an event before re-executing the scheduler */
  •     }
  • }
  • 复制代码


    jlink 配置debug:注意红色框图,点击run就可以启动jlink进行调试:
    22.png

    可以看出基于Eclipse的ON Semiconductor IDE debug功能相当强大,寄存器数值一目了然。
    333.png

    成功运行:LED 闪烁
    4.png

    手机APP发现蓝牙,连接。HRS 数据解析APP:
    3.jpg 4.jpg

    1.jpg
    功耗测试,HRS整个板卡功耗仅仅1个mA多一点,还包含JLINK功耗。
    6.png

    测试视频如下:

    https://v.youku.com/v_show/id_XNTgxODIwMDk0OA==.html?x=&sharefrom=android&sharekey=84e242f1539a0ada0056e5d19c0a43659