可穿戴应用程序的实现
智能手表不再只是为了显示时间。智能手表通过发送短信、电话和健康监控手段将我们的手腕变成了智能手机套件。可穿戴设备是用户"几乎总是"佩戴的无线设备。例如,健身监测器是一种可穿戴设备,可以通过监测心率、锻炼、睡眠习惯、体温、出汗等参数来跟踪人的健康状况。这些设备有多个传感器,通常像智能手机或个人电脑一样可以与互联网连接的设备进行通信。 这些设备有三个主要特征:
始终运行: 因为健身监视器是持续运行的,所以这些设备需要长时间的电池寿命。当设计可穿戴设备时,最大的挑战之一就是他们对电力的渴求,而且他们所能容纳的电池尺寸往往有限。 监控活动: 一个健身器械监测感官、过程、日志和报告用户活动。这包括监测多个传感器和执行"传感器融合",其中多个传感器的数据通过类似DSP的引擎相互关联,以分析更复杂的行为,并以用户可以理解和使用的方式跟踪它们。 交换数据: 这包括将收集和分析的信息传递给其他设备的能力,例如向智能手机发送通知和告警。
图8: 可穿戴设备的特征
图9: 使用嵌入式MCU的可穿戴健康监测设备的实现
活动监测
计步器和卡路里计数器计算一个人行走的步数,并计算出燃烧的卡路里数量。为了检测步数,需要一个加速度传感器。压力传感器也用来测量步行/跑步时海拔的变化。大多数传感器都有一个数字接口,通常是I2C,SPI或UART。需要对已获得的数据进行额外的过滤和处理,以计算步数、高度、燃烧的卡路里等等。这些传感器也用于实现低功耗的系统功能,比如在检测到运动时唤醒整个系统,以便进行实时分析。为了支持多传感器,嵌入式MCU将需要几个数字接口。理想情况下,这些接口可以在I2C、SPI和UART之间进行配置,以使开发人员在传感器选择和实现方面拥有最大的灵活性。此外,嵌入式单片机需要支持一个双核体系结构,它具有一个能够执行传感器融合和复杂分析的单片机,以及一个低功耗的单片机来执行系统任务,如在运动中唤醒。
环境监测
传感器也可能需要收集环境数据,例如紫外线照射量、环境温度、大气压力、指南针方向等。
GPS
全球定位系统传感器通常是带有UART接口的数字传感器。 GPS传感器提供位置(经纬度)、速度和高度信息。
音频
在无线链路传输音频数据之前,数字域的音频信号处理是任何音频系统的重要组成部分。 数据通常采用基于麦克风来收集数据,然后测量、过滤和/或压缩。 具有集成DSP功能和音频功能的嵌入式单片机,可以大大简化高质量、不间断的声音音频子系统的设计。
安全性
可穿戴设备需要能够跟上不断变化的安全协议和措施。带有安全引导功能的嵌入式单片机确保可穿戴设备只执行经过身份验证的代码。此外,设备可以支持在线 OTA (OTA)更新,使更新对用户是透明的。
用户界面
今天的用户已经习惯于使用按钮、滑块和近距离感应来触摸显示器。一个嵌入式的单片机也可以支持不同的输出类型,可以支持各种显示技术,如 Eink,OLED等。
无线连接
设备需要支持可穿戴设备操作的必要服务——无线连接,例如与低耗电蓝牙的连接。
支持所有这些功能需要一个完整的固件流(见图10)。支持可穿戴应用的制造商可以提供完整的库,可以加速开发和降低整体设计的成本。
图10 可穿戴设备的固件流示例
任务架构
在任何可穿戴设计中,有三个关键任务:
获取数据
处理数据
与用户的输入和输出(显示)进行通信
传感器采集通常需要比其他任务更高的处理器操作频率,因为这种处理包括在大样本基础上运行的过滤器。因此,使用像Arm Cortex-M0 + 这样的低功耗核心来进行传感器数据的获取效率更高。处理传感器数据取决于所使用的算法的复杂性,开发人员必须在功率效率和处理速度之间权衡。 对于光处理,可以使用用于获取传感器数据的相同低功耗核心。然而,对于更多的实时操作,需要更高性能的处理器,如ARM Cortex M3/M4核心。 用户界面,通常是一个轻量级的过程,当涉及到简单的可穿戴显示和输入时,可以由任何一个核心处理,但理想的是在低功耗核心上实现。因此,为了在低功耗的可穿戴设备中实现最佳性能,需要一个双核结构。需要注意的是,可以利用双核架构来做固件框架管道化,通过加速任务完成来提高响应性能,并通过在核心之间共享时钟、RAM、Flash等资源,减少资源和功耗。
低功耗处理器,如Cortex M0 +,运行一个简单的任务调度器来处理频繁的、低带宽的任务,比如:
传感器数据采集
电容式感应扫描及处理
BLE链路层控制器维护BLE的连接和通告
系统管理,包括安全任务和传感器控制
高性能处理器,如 Cortex M4,作为运行 RTOS 的应用程序处理器,并处理处理器密集的应用程序级任务,如: 传感器数据处理(如定向计算、高度计算等) 显示图形,如绘制文字、图像、形状等 完整的指纹处理,包括匹配和注册算法 主机层任务,包括所有服务、配置文件和连接身份验证
在共享内存和快速的处理器间通信(IPC)是核心之间的桥梁,通信延迟几乎不存在,相比之下,两个设备在外部进行通信几乎是不可比的。
低功耗核心任务架构
在高级别上,低功耗核心执行两种类型的任务: 第1级: 在每个周期执行的周期性任务和二级任务: 周期性时间档任务,但在每个循环中执行一次(任务/周期的n个周期)。 一个计时器可以用来产生一个中断来表示一个周期的开始,比如每10毫秒(100hz)。 1级任务在中断事件中执行一次。时隙变量可以在每个中断时递增,并传递给二级任务管理器。根据插槽编号,执行适当的二级任务。表1提供了可在低功耗核心中执行的各种任务的例子。
任务类型BLE控制器Level 1电容式感应扫描和手势检测Level 1获取和处理GPSLevel 1压力 / 温度数据的获取Level 2紫外线数据的获取Level 2电池数据采集Level 2
在完成数据采集任务或任何需要通过高性能核心运行的任务(如已经检测到一个手势) ,就会形成一个消息包,并通过IPC发送到高性能核心。对高性能核心发出中断,处理消息包,并将数据适当传递给在高性能核心上执行的预期任务。
高性能核心任务架构
高性能核心使用一个RTOS来管理诸如BLE、运动感应、显示更新、GPS、压力/温度、紫外线和指纹检测等任务。 除了BLE、运动感应和指纹检测外,其他任务都需要等待来自低功耗核心的数据。
可以周期性地运行 BLE 任务(每次连接间隔一次)。 完成后,任务暂停,直到下一次唤醒。
运动感应任务可以是一个非周期性的任务,只要运动传感器本身提出一个中断,它就会运行。 像 Invensense MPU9255这样的运动传感器包括一个数字运动处理器(DMP),它收集芯片上的FIFO数据,并以预先配置的速率中断高性能核心。 在中断时,运动传感器任务通过SPI接口读取运动传感器中的FIFO,并处理数据以计算方向,步骤,卡路里燃烧等等。
指纹检测任务可以是一个非周期性的任务,当用户在滚动、验证或者删除指纹时都会运行。当用户指纹被注册并且显示被锁定时,这个任务也会运行。一个注册用户的指纹可以用来解锁和保护可穿戴设备。
显示任务也可以是一个非周期性的任务,只要数据需要在屏幕上进行更新(即传感器数据、时间、电池和来自其他任务的 BLE 通知) ,或者如果一个电容式感应的手势事件是从低功耗核心报告的。
GPS、压力/温度和紫外线任务可以是伪周期任务,因为它们不会周期性地停止和唤醒。相反,在从各自的传感器收集数据之后,任务唤醒是从低功耗核心触发的。由于低功耗核心的数据采集速率是周期性的,所以这些任务可以在高性能核心上定期执行。
表2显示了高性能核心管理的任务示例。
任务优先级堆栈BLE9500运动传感器8500显示6500压力传感器8200GPS传感器8100指纹传感器75000
处理器间通信架构
两个同时运行的核心需要一个保护共享数据和通信的机制,以便同步固件中的任务。 双核体系结构需要支持多个IPC机制,如 IPC锁、消息传递和中断/通知。 任务代码可以使用IPC锁特性来保护共享数据和 IPC 消息传递到核心之间的通知和数据。
IPC锁
当访问共享数据进行修改时,访问核心/任务就会尝试获取与数据相对应的锁。 如果锁是空闲的,那么核心/任务将被授予访问数据的权限。 一旦更新/处理完成,该任务就可以释放锁来将数据访问到其他待完成的任务。 这保护数据不会被多个试图同时更新或使用数据的数据损坏。
IPC消息
除了保护共享数据外,还需要一种通信方式来同步核心之间的任务。 这可以通过在内核之间传递的"命令和参数"消息包来实现。 当一个核心希望对方执行一个动作时,它会将动作/命令ID包含任何需要的参数到消息中,并将消息传递给IPC。 一旦消息包准备好,核心会在另一个核心上触发一个IPC中断,在这个核心中,命令被解析,然后执行。
智能家居配备可穿戴设备
为了理解可穿戴设备与智能家居互动的一些方法,可以考察一些用例。
智能厨房
智能电器只有在家长在附近(即家长的健康监察器或电话在适当范围内)时,才能使用危害儿童的器具(例如炉子、炉子、洗碗机) ,以防止发生意外。
图11|使用可穿戴设备的智能厨房控制
智能车库
一个自动车库门可以做更多的开放。 当一个人走近车道或门,设置一个预先设定好的功能序列,例如打开车道、车库、走廊和厨房的灯光,就可以触发'我回家'功能。车库的门也可以调整家庭的安全设置,打开车库内部的入口门,调整房间的供暖到预设温度,打开家庭音响系统开始播放音乐。
图12|使用可穿戴设备的智能车库控制
基于手势的交互控制
一种包含9轴运动感应的可穿戴设备可以决定用户手腕的方向。这种定向数据可以进一步处理,以检测基于运动的手势。 这样的手势可以用来控制节点。 例如,当一个人靠近前门时,他或她可以把手腕平放,指向门,并顺时针旋转手腕来打开门或者逆时针锁上门(见图13)。
图13|使用可穿戴设备的智能门锁控制