江文瑞 译,何小庆 审校
物联网的“物”的定义有多种多样,在Micrium看来,“物”是网络上发送和接收信息的一个个嵌入式计算设备(或称为“嵌入式系统”)。
图1 嵌入式计算设备
嵌入式系统是基于微控制器(MCU)并以小的内存占用运行软件的电子系统。一些以Linux和Android为基础的系统也可以称为嵌入式系统,但通常这些通用的操作系统需要运行在应用处理器上,并具有额外的功能,如动态程序加载功能。这就是为什么基于MCU的嵌入式系统通常被描述为“深嵌入式系统”。在Micrium看来,这些深嵌入式系统就是物联网中的“物”。
嵌入式系统中32位架构的微控制器越来越常见,过去几年中,32位微控制器的价格已经大大下降,而其更强大的性能为嵌入式系统开发人员提供了新的选择。
对于8和16位MCU,软件经常是使用前/后台的方法(即超级循环)来实现。但是随着32位微控制器价格的下降,现在RTOS(实时操作系统)成为首选,基于RTOS的设计允许更灵活的和可扩展的软件运行在这些系统中。一个完整的RTOS系统应该具有内核、图形用户接口(GUI)、文件系统、USB协议栈、网络,以及更多的其他功能,且能够适合小于1 MB的内存空间。随着RTOS的使用,嵌入式系统的软件体系结构变得更为灵活,故障排除和添加新功能的能力大大增强,使用RTOS还可以简化实现固件升级的方法。总之,在32位处理器上使用RTOS更有意义。
图2 物联网设备软件架构
在处理器架构的选择方面,到目前为止,主要的竞争者是英特尔(Intel)和ARM。
一方面,英特尔已经把其Atom处理器作为嵌入式处理器来发展,主要针对的是工业网络应用;另一方面,英特尔新的Quark处理器,直接瞄准深嵌入式系统市场。ARM系列处理器包括广泛的32位体系结构,并授权给大量的供应商。ARM芯片是目前广泛应用的低功耗架构,而且处理器软件的启动与英特尔相比也要简单得多。
人们普遍认为物联网硬件应该是低成本的,这样才可以将物联网设备(每个灯泡一个IP地址)遍布整个地球。但事实上,低成本不是适合所有应用的解决方案,尤其是在以IP为核心的网络中。
首先,TCP/IP协议栈不是一个只有一点点代码的软件。当然,你可以找到开源的TCP/IP协议栈,仅仅占据32 KB空间,但通常它只支持TCP/IP标准最基本的功能,如果需要物联网设备能够在广阔的主流IP网络上运行,这就会导致一些问题。第二,TCP需要一定数量的网络缓冲区有效进行工作,这需要宝贵的内存。并且,如果需要使用Java,那么物联网设备将需要一个操作系统作为基础来运行Java虚拟机(JVM)。所有这些因素制约了物联网设备对低成本架构的选择。
设计物联网设备时,哪一款微控制器是好的选择呢?
①在物联网设备中,对于ARM处理器,Cortex-M0是很好的选择。对于网关设备,ARM Cortex-M3/M4或Cortex-A是不错的选择,因为它们具有良好的处理能力。
②对于非ARM处理器,用于物联网设备的一个好的选择是瑞萨(Renesas)的RL78或RX100,对于网关设备,可选择瑞萨RX600或RZ。
无论上述的哪种方式,不断上市的新处理器会具有更多的闪存和内存,并始终维持低成本。
现在嵌入式系统设计的一个共识就是降低功耗,常见的方法是系统尽可能快地执行,然后立即进入睡眠模式。现在的处理器核心架构,在低性能状态下,可以做到基本上不消耗任何电力。针对无线传感器网络边缘节点的设计,这种特性很有吸引力。这种针对性能的低功耗优化设计意味着要晶体管工作电压接近(或小于)其阈值电压。
ARM是目前一个经过优化后可以工作在接近CMOS晶体管阈值电压的处理器内核,并在几 MHz的时钟频率下执行指令。ARM的近阈值(near-threshold)设计与Cortex-M0架构兼容,这对软件开发社区来说是个好消息。近阈值的设计不是很容易,ARM可以与多个晶圆工厂一起工作,而不必自己拥有芯片工艺。这与亚阈值(sub-threshold)设计的情形不同,亚阈值设计需要芯片公司和晶圆工厂自己定义一个制造过程,这种方式会给芯片公司和晶圆工厂带来很大的风险。
用于深嵌入式系统的编程语言可以是C或C++,有时是Java。需要注意的是,Java总是运行在操作系统之上。所以,你的选择不是C/C++或Java两者之一,而是C/C++和Java都会使用。
对于物联网设备,Java是很有吸引力的,因为全球有大量的Java开发者,他们给行业带来了巨大的增长潜力。据Oracle和ARM公司估计,全球大约有45万嵌入式软件工程师,约九百万Java开发人员。
Java引擎的资源占用是必须要考虑的因素,Oracle针对小型设备的嵌入式Java ME产品估计有下述系统需求:
①基于ARM架构的SoC系统。
②内存占用(近似估计)。从130 KB RAM/350 KB ROM(最小的,定制的配置),到700 KB RAM/2 000 KB ROM(完整的,标准配置)。
③非常简单的嵌入式内核,或一个更强大的嵌入式操作系统和嵌入式实时操作系统。
④至少一种类型的网络连接(有线或无线)。
以上这些指标不符合Micrium关于深嵌入式系统的设备定义。上述需求加上嵌入式内核和通信协议栈,将ROM和RAM的总量推进到数兆。显然,对于物联网设备,Java的使用将受到成本和能力的限制。
在不计成本的情况下,可以选择一个单一强大的处理器,运行设备所有需要的任务,然而,工程中常常要做些折中,在传感器/执行器设备中使用两个处理器:一个是低成本的处理器(8或16位),用于物理世界的接口;另一个为32位处理器,连接网络接口。第二个处理器通常被放在一个单独的模块上,协议已被认证并遵守FCC的规范。具有两个处理器的物联网设备结构图如图3所示。
图3 具有两个处理器的物联网设备结构图
当采用双处理器时,对于传感器/执行器的处理,实时内核不是必需的,而对于通信模块,强烈建议要使用实时内核。
网关连接两个不同的网络,以便网络之间的数据流动,通常是专有网络和互联网之间的连接,网关结构如图4所示。
图4 网关结构
举个智能家居的例子。不同的公共事业公司可能在你的家里安装了各种各样的物联网设备,每一个都有自己的网关,这些可以包括电、天然气、水、电话、互联网、有线/卫星电视、报警系统、医疗设备等。这些网关的一部分可能需要额外的功能,如本地存储或者用户接口。
总之,物联网的物是一个智能的嵌入式系统,设计中应考虑到性能和功耗的平衡,嵌入式实时多任务操作系统在双处理器的物和网关中是必需的组件。