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:
程序结构如下:
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进行调试:
可以看出基于Eclipse的ON Semiconductor IDE debug功能相当强大,寄存器数值一目了然。
成功运行:LED 闪烁
手机APP发现蓝牙,连接。HRS 数据解析APP:
功耗测试,HRS整个板卡功耗仅仅1个mA多一点,还包含JLINK功耗。
测试视频如下:
https://v.youku.com/v_show/id_XNTgxODIwMDk0OA==.html?x=&sharefrom=android&sharekey=84e242f1539a0ada0056e5d19c0a43659