过去谈及人工智能,人们首先想到的往往是云计算——将数据上传至云端,借助强大的算力进行处理,再返回结果。这一思路本身并无问题,但前提是网络带宽必须足够宽裕。到了6G时代或许能轻松实现,但在当前,尤其是对实时性要求极高的场景,这条路已经显得行不通。
意法半导体(ST)的解决思路是把人工智能“下沉”到边缘端,直接在传感器端完成计算。传统的边缘计算,算法通常存放在MCU里,传感器仅输出原始数据,MCU再独立运行算法。如今ST更进一步:将算法下放到传感器内部。具体来说有两种路径:一种是基于MLC,利用可重配置的rPU处理器,把决策树这类算法直接嵌入传感器,传感器输出事件结果给MCU,MCU无需再处理全量数据;另一种就是本文的主角——ISPU(Intelligent Sensor Processing Unit,智能传感器处理单元)。

首先需要明确一个概念:ISPU并非独立的传感器,而是嵌入在IMU(惯性测量单元)内部的一个功能模块。本质上它是一个微型C语言可编程处理器,能在传感器内部完成信号处理与AI算法,兼容常见的开发工具。相当于在传感器里塞入了一个DSP,可以运行类似MCU的算法——支持标准C指令、信号处理、AI推理、机器学习甚至二进制神经网络。最关键的是,这一切都在微安级的功耗下完成,让传感器的智能程度提升了一个台阶。
目前搭载ISPU的6轴IMU有两款:面向消费类应用的LSM6DSO16IS(适合复杂动作手势识别、事件检测、运动追踪),以及面向工业和边缘应用的ISM330IS(适合机器人、空调、资产追踪、预测性维护)。除了基本的IMU功能(可配置陀螺仪量程、加速度量程、ODR数据、SPI/I2C接口),内部还集成了ISPU,运行频率最高10MHz,配有32KB程序RAM和8KB数据RAM,总共40KB内存,支持浮点与32位整数运算。
ST的ISPU方案基于DSP架构,面积非常小——仅8K门。封装尺寸仅为3mm×2.5mm×0.83mm。基于32位哈佛架构,支持浮点运算和神经网络,最高主频10MHz,最大输出数据率6.6KHz。
ISPU的优势相当突出。首先谈功耗——如果把传感器融合算法放在ISPU里运行,5MHz下功耗仅200µA。而如果放在Cortex-M0上运行,即使主频只有4MHz,功耗也需要1300µA。计算下来,ISPU的功耗大约是M0的五分之一。更关键的是,ISPU直接集成在传感器内部,获取加速度计等数据无需总线参与,这进一步降低了系统负载。具体对比:在104Hz频率下读取数据,ISPU只耗费1µA,而Cortex-M0在4MHz时已经需要94.4µA。

千万别小看这个差距——当ODR增大、ISPU运行速率加快时,功耗差距会进一步拉大。例如以883Hz提取加速度数据,ISPU的功耗只有7.5µA,而Cortex-M0高达747µA,相差近100倍。倾角检测、排气检测、传感器融合、手腕倾斜(比如手表的翻腕亮屏)等算法,ISPU的功耗同样非常低。
再说AI方面的优势。ISPU提供了更大的自学习空间,支持多种机器学习决策树(比如Scikit-learn),也支持深度学习算法(比如QKeras、TensorFlow、ONNX)。ST通过ISPU编译器,将基于机器学习和深度学习的模型编译成UCF配置文件,MCU通过总线将该配置文件写入ISPU即可运行算法。这种方案可以广泛用于个人电子产品(穿戴设备、头戴设备等)以及工业领域的事件监测中。
ISPU的运行原理
在LSM6DSO16IS/ISM330IS的IMU内部框架中,传感器HUB可以通过I2C连接外部磁力计、气压计等设备。ISPU可以直接通过内部IMU传感链,读取外部传感器(地磁或气压计)以及内部加速度计、陀螺仪和温度数据。ISPU最多可以同时运行30个算法(单核串行执行),每个算法都可以产生一个中断信号,通知主控发生了相应的事件。
ISPU通过I2C或SPI与主控连接,并通过多种寄存器与主控交互。举个例子:主控需要配置参数时,可以通过总线将参数写入ISPU的配置寄存器;标志寄存器负责主控与ISPU的数据交互;输出数据寄存器则在中断发生后将数据送出,告诉MCU当前发生了什么事件。

ISPU开发流程
第一步,基于ISPU代码进行编码,用工具链编译成ISPU二进制文件。第二步,将此二进制文件与传感器配置文件(configure.txt)一起,通过工具生成ISPU.h或UCF配置文件。第三步,将这些文件复制到MCU的应用程序代码中,加载ISPU程序并读取算法结果。第四步,使用ARM工具链编译,生成应用.bin文件。最后,将应用.bin文件烧录到MCU中运行。

ISPU软件的开发工具(三种方式)
1)命令行工具CLI
主要适用于Windows环境,通过CMD输入命令完成编译。使用前需要先安装ISPU编译工具链和make工具。然后基于ST提供的ISPU模版开发Norm算法,修改传感器配置,通过json输出文件进行编译。最后通过GUI连接板子并连上电脑,使能ISPU。
2)基于Eclipse的IDE
比如STM32CubeIDE,可以编辑代码并编译ISPU程序。开发时需要先下载安装Eclipse插件,然后导入工程进行编译。
3)GUI工具 AlgoBuilder
这个方式最为便捷——无需写代码,直接在软件里用鼠标拖拽不同模块进行连接,系统会自动生成代码。用户需要在ST官网下载AlgoBuilder、STM32CubeIDE、STM32CubeProgrammer和Unico-GUI并安装。配置完成后,就能实现零代码设计,基于模块固件编译和烧写,并通过Unicleo-GUI进行调用。
