引言
今天的便携式设备通过持续的活动监测和情境感知来了解周围环境。为了实现这个功能,设备集成了越来越多的传感器和外设,由此产生大量数据。这反过来使得集成更强大的CPU变得很有必要,以便执行越来越多的计算。同时,必须缩小设计尺寸,降低成本和功耗,但又不牺牲最终产品不断提升的功能要求。
传感器中枢(Sensor hub)的概念被越来越多地采用到当今的SoC设计中,以满足“始终运行”的传感器/外设访问和控制(甚至以高速率)的要求,而且不会增加功耗和设计成本。传感器中枢可以是小型CPU内核,与传感器/外设连接,并通过执行后台操作并仅在需要时“唤醒”主处理器,充当功耗较大的主处理器的卸载引擎的角色。
用于传感器采集的基于处理器的典型架构
应用在集成多个传感器的系统中的典型基于微控制器的架构包括以下组件[1]:
a) 一个微控制器单元(MCU) - 也称为处理子系统,MCU控制系统内所有构成部分的运行并处理数据。它包括一个处理器、一个内部或外部存储器、以及本地数据处理所需的所有外设和子系统。在典型的基于MCU的架构中,控制器执行所有传感器数据收集、处理和存储。
b) 传感器元件(或传感子系统) - 一组传感器,可以是无源或有源,数字或模拟的任意组合。这些传感器将来自外部环境的输入信息转换成电信号。在大多数应用中,传感器用于监测运动、光、气压、振动、流速、温度、通风、电等。通常来说,传感器元件在其输出端生成电压或电流信号。在数据被处理、存储和传输之前,这些信号一般会被放大,并通过模数转换器转换成数字信号。
c) 无线电 - 一种短距离收发器,提供与主机的无线通信。
d) 电源子系统 - 通常连接到电池或能量采集器。该子系统充当可控单元,可单独打开和关闭系统构建块的电源。它通常是MCU软件中的一个软件块。电源子系统负责为每个单独的硬件组件提供合适的电源电压。
在具有多个传感器的更复杂的基于微控制器的架构中,在硬件中集成了智能,用来控制各种子系统。 例如,从传感器到存储器传输数据耗时又耗电,这一部分工作其实可以从处理器转移到直接内存存取(DMA)单元。电源管理单元(PMU)还可以被编程为对特定事件做出反应并关闭各种子系统,例如外设、传感器和无线电。
图1. 基于微控制器的典型架构
这种先进架构的目的是尽可能减少主MCU活跃的时间。原来需要MCU干预的任务,现在可以由智能子系统执行。然而,还存在一个问题,就是每次有来自传感器、无线电或各种子系统的事件时,MCU都需要被唤醒,因为它是唯一可以部署逻辑来处理这些事件的元件。
优化功率的技术 - 添加传感器节点控制器
为了延长具有多个传感器的系统的续航时间,已经提出了很多种降低功耗的技术[2],[3]。有些技术在媒体访问控制层面进行节能[4],[5],有些技术从数据聚合或融合着手[6],[7],有的则采用芯片设计优化技术,如片上功率门控[ 8]或动态电压调节[9]。
本文介绍了一种不同的技术,来优化多传感器系统中的电源使用,同时将主处理器用于数据采集的唤醒时间控制到最短。该技术基于集成复杂的硬件状态机,可以接管主处理器上的重复性任务,如传感器轮询和读取,从而实现集成的低功耗传感器中枢概念。专用硬件状态机可以更快地唤醒,并使用更少的模块来将数据从传感器/外设传输到内存,以及反向传输,而主处理器保持休眠状态。此外,传感器中枢可以对数据执行简单操作,因此主处理器只需要在要求复杂数据操作时唤醒。
这种方法的一个很好的例子,是集成在Dialog半导体公司的DA1469x蓝牙低功耗SoC解决方案中的传感器节点控制器(SNC)硬件模块[10]。SNC是一种微型硬件状态机,能运行由有限的指令集组成的微码(μcode),有助于开发人员操控通信控制器(即SPI、I2C等)、传感器和外设。它可以通过使用其最小指令集自动运行,无需唤醒系统的其余部分。这允许它执行众多操作 - 例如:轮询传感器状态位、比较寄存器与内存地址内容(值)、将数据从通信接口传输到系统RAM以及比较分支 - 同时消耗最低电流。
图2. 具有传感器节点控制器外设的应用处理器架构
SNC的主要特性如下(图3):
• 传感器节点指令集(SeNIS),包含10条微码生成指令,适用于:
o 轻松创建指向内存缓冲区的指针
o 轮询串行接口状态位
o 比较阈值
• 系统RAM用于微码存储和数据
• DMA功能,用于将数据直接从通信接口传输到系统RAM
• 直接访问所有外设和寄存器
• 通过PMU在中断触发和域上电(例如定时器、GPIO)后立即执行
• SNC到主处理器通知,以及反向通知
SNC与所有通信接口(SPI、I2C和UART)位于相同的电源域,SNC还可以控制其他电源域。它执行驻留在系统RAM中的微码,其中SNC具有直接内存连接;以系统时钟速度运行;并且可以生成中断以通知PMU所有操作都已完成,从而可以关闭整个系统的电源。
图3. 传感器节点控制器框图
使用此类专用硬件执行传感器和外设数据操作的架构的主要优点是:
• 主CPU睡眠时间更长,从而可以节省功耗
• 节省MIPS,因为CPU不必访问慢速外设或执行简单的数据操作
不过它有一些缺点。SNC编程模型的非常简单的指令集仅允许基本操作。另外,编程SNC需要使用汇编语言。最后,由于SNC是一个非常简单的模块,调试会变得复杂。
节省功耗和MIPS
我们已经进行了一系列测量,证明了使用SNC可以实现的功耗和MIPS节省。这些测量是在Dialog的基于ARM Cortex-M33的DA1469x SoC上进行的,并比较了只使用主CPU和在SNC支持下执行的相同任务。 第一组测量集中在访问通常用于传感器读数的慢速外设(如I2C和SPI)时节省的功耗/MIPS。第二组测量着眼于使用DA1469x中包含的蓝牙低功耗(BLE)通信模块的实际应用案例。
与CPU(CM33)相比,SNC执行事务所需的时间要短很多,如表2所示。由于CPU可能需要执行忙等待,因此节省了时间相当于节省了MIPS。
时长 (μs)
CS-写 写 写-读 读 读-CS 总计 时间差异
SNC 13.98 26.1 16.68 209.64 5.5 271.9
(8-bit 模式SPI)
CM33 46.96 18.06 139.18 145.04 87.3 436.5 60.50%
(DMA, 有适配器)
对现实生活中的使用案例,我们比较了每隔1500毫秒(表3)和500毫秒(表4)进行广播时所消耗的功率,同时使用SPI每100毫秒读取加速计传感器一次。
表3:每1500毫秒进行广播时的能耗,使用SPI每100毫秒进行一次传感器读取
广播 (每1500 ms) & 传感器读取每 100 ms – 进行15 秒 电流消耗 (μC) 节省
SNC 223.6
CM33 374.8 40.30%
表4:每500毫秒进行广播时的能耗,使用SPI每100毫秒进行一次传感器读取
广播 (每500 ms) & 传感器读取每 100 ms – 进行15 秒 电流消耗 (μC) 节省
SNC 255.6
CM33 406.8 37.20%
在复杂的应用中,如果需要访问多个传感器,考虑到缓存未命中和任务切换等问题,对MCU的占用会更大。
降低编程复杂度
上面提到过,使用集成的传感器节点控制器时面临的最大挑战之一,是确保基础系统功能的编程、调试和充分利用与采用通用MCU的方案一样简单。挑战的主要方面有:
• 提供对开发人员友好的抽象编程,以有效控制驱动与连接的传感器/外设的通信接口,以及与主CPU通信相对应的基本功能。
• 利用10指令汇编式编程,并提供更高级别的编程结构,以简化和加速软件开发。
• 支持完整的系统整体调试 - 而不是单独调试每个CPU内核,因为可能无法检测到当内核并行运行时的系统行为错误。
为了解决这些挑战,我们需要一个完整、易于使用的编程框架。它必须包括抽象和程序,将并发操作系统任务的范例扩展到在SNC上执行的相应(并行)处理。我们已经为Dialog DA1469x解决方案开发了这样的编程框架(图4)。它具有以下特点:
• 简化的SNC微码开发
o 通过定义基于SeNIS的类C编程语言,可以同时支持汇编和类C编程。
• 用于编程的“混合”编码模型
o 在相同的源和头文件中同时包含针对SNC和主处理器情境(context)的代码开发 - 使用了一个C预处理器来定义基于SeNIS的语言结构,方便开发人员。
• 与驱动主处理器通信接口、交换SNC通知、和操作系统资源相关的基础机制和功能的抽象,作为一组完整且易于使用的API程序/类C函数。
• 可观察性和高级调试机制同时应用于SNC和主处理器执行情境。
图4. SNC编程框架
SNC编程模型的特征可归纳如下:
• DA1469x应用包括由OS任务和SNC 微码并行执行的进程。
• SNC适配器向DA1469x系统注册或注销SNC微码,从而创建一列SNC微码,每个微码由特定PMU事件触发。
• SNC适配器采用特殊的SNC微码,根据相应的微码列表实现注册的SNC微码执行的调度,并通过其低级驱动器控制SNC硬件模块。
• 定义了一组基于SeNIS的结构预处理器宏,从而生成一组汇编和类C语言结构用于SNC微码开发。
• 提供一组低级驱动器SNC微码,可用于驱动SPI、I2C等通信外设。
• 为操作系统任务和SNC微码提供了一种机制,进行交换:
o 通知
o 数据(即:SNC 队列)
除了上述实现轻松编程SNC函数的结构之外,还提供以下内容以支持调试:
• 使用SNC断点和逐步调试区域来调试SNC微码的机制。
• SNC仿真器,而不是SNC硬件模块,用于改进和简化SNC微码调试过程。
总结
本文介绍了一种新的架构,可最大限度地降低集成了多个传感器和外设的便携式系统的功耗。该架构使用复杂的硬件状态机来卸载主处理器上的一些重复性任务,例如传感器/外设轮询和读取。与其他架构相比,这种新架构在功耗和MIPS优化方面具有很大的优势,不过会使编程模型变的更复杂。因此,我们还介绍了一种对开发人员友好的编程框架来克服该问题。