一种面向IR46电能表的单芯片软件设计

2020-02-03 05:47王修全
电子技术与软件工程 2020年11期
关键词:服务程序固件内核

王修全

(上海复旦微电子集团股份有限公司 上海市 200433)

随着物联网技术和电能表技术的发展,具有联网功能的电能表越来越多的被使用,这类电能表将逐渐被赋予除基本电能计量计费功能外的更多功能,比如家庭能源管理网关等。因此,国内外电能表市场的逐渐采用符合IR46 标准的智能电能表,然而IR46 要求电能表计量的关键部件,无论是软件或硬件部分,不允许被电能表的其他部分影响[1]。IR46 标准对于电能表的软件部分提出软件分离的要求,即相关法制软件部分与其他部分固件进行通讯,则固件接口应被明确定义,所有通讯应通过此唯一接口,并且法制固件部分和接口应清晰描述,以使型式批准机构确定固件子集的正确性[2]。

本文主要研究基于FM33A06xE 芯片实现单芯片固件分离方案。法制固件部分包含MCU 的硬件抽象驱动层、法制芯片接口驱动、法制计量应用及法制数据接口等部分,运行在MPU 保护的特权模式;非法制固件则包含RTOS、驱动及API、升级管理非法制应用等。

1 系统总体框架设计

本方案根据IR46 标准的软件分离要求,一方面,将系统固件从认证维度划分法制固件部分和非法制固件部分;另一方面,从内核MPU 的保护维度将固件划分为特权区和非特权区。在符合设计需求的微处理器中,本文选择应用较为广泛的上海复旦微电子公司的FM33A06xE 微处理器作为系统主控处理器。FM33A06xE 是一款使用ARM 公司CortexM0+内核的MCU,该芯片具有存储器保护单元(MPU)、FLASH 存储器支持应用代码保护机制、支持多种加解密算法及Hash 算法加速器,并且拥有最大80K RAM 及512K Embedded Flash,非常适合作为电能表的主控制器。

图1:系统总体设计框图

图2:固件存储分割示意图

图3:固件运行示意图

图4:法制与非法制变量分离示意图

如图1 所示,本方案将系统划分为法制和非法制固件。

法制部分主要由MCU内核、硬件抽象层(HAL)、法制设备驱动、法制计量应用及接口API 组成。MCU 内核、硬件驱动层以及法制和非法制共享的外部设备(RTC、EEPROM 等)是法制应用稳定、安全运行的重要组成部分,其应当归属于法制部分,非法制部分不应具有直接操作的权限,该方案中将法制部分划分在MPU 的特权模式中。主控制器具有FLASH 访问权限控制功能,在实际应用中,为保证法制部分代码不被窃取,可以将法制固件区域的FLASH 读写权限关闭,只保留代码执行权限。

非法制部分主要包括操作系统层、法制设备驱动、非法制升级管理、以及非法制应用部分。其中除非法制应用外,其他部分在业务上虽然不属于非法制固件,但由于其对与整个系统的稳定性具有重要意义,因此该部分归属在特权模式。而非法制应用在智能电能表的应用中随着业务的拓展应属于可升级部分。

本方案基于IR46 标准中法制和非法制固件分离的要求以及系统稳定性要求,将非法制应用固件划分在用户模式,其他部分划分在特权模式。即可以实现IR46 标准的要求,又解决系统稳定要求。合理使用ARM 内核的MPU 特性,可以做到特权模式和用户模式的访问权限控制。

2 系统关键技术详细设计

为实现概述设计中的要求,系统设计中涉及法制和非法制的固件分离设计以及法制和非法制的变量分离设计。

2.1 法制与非法制固件设计

法制和非法制固件在电能表中一般存储在非易失的Embedded Flash 存储器,微控制器可以直接运行该固件,不需要运行前加载,各功能在Flash 中存储位置如图2 所示。法制固件根据IR46 标准的要求,不允许其运行中升级;非法制固件的操作系统及相关功能与电能表的硬件息息相关,一般在实际应用中并不需要升级。因此除了非法制应用固件外,其他部分均采用位置相关设计。

2.1.1 法制与非法制中断向量表

为保证法制固件运行不被电能表其他部分影响,MCU 的中断向量表应属于法制固件,其运行和存储不受非法制影响,因此中断向量表应分为法制向量表和非法制向量表。法制向量表为内核的原生向量表,引导区执行结束时将内核的中断向量重映射寄存器(VTOR)设置为法制向量表的地址,非法制中断向量表的执行必须通过法制向量表中转。MCU 的中断源被触发后,内核从法制中断向量表中获得对应中断服务程序地址,如果中断源为法制中断源,则执行相对应的服务程序;否则,内核调用中断中转服务程序,然后在中断中转服务程序中调用非法制中断服务程序。

CortexM0+内核的中断程序状态寄存器(IPSR)包含了当前中断服务程序的异常编号ISR NUMBER。根据ISR_NUMBER 可以经过简单运算获得非法制向量表的中断服务程序向量,其算法如下所示:

非法制中断服务程序向量地址 = 非法制中断向量基地址+(ISR_NUMBER<<2)

通过中断服务中转的方法,非法制固件未被注册启用或固件异常时,中断服务可以被法制固件接管,可以由法制固件进行异常处理或禁止。如果非法制固件未安装或异常运行时,法制固件可以接管非法制的中断处理,从而实现监控非法制固件或非法制固件异常回滚的。

2.1.2 法制固件运行机制

为减少非法制固件运行时对法制固件的影响,法制固件可以运行在低优先级中断服务程序中。通过中断服务程序中执行电能表的法制固件,可以最大限度减少非法制固件的干扰。为保证系统的实时性,中断服务程序一般不应过久占用CPU 资源,该方法会造成法制固件运行时间碎片化,且会包含大量状态机。因此,本方案为提高软件的模块化,降低软件开发的复杂度,引入contiki 操作系统。Contiki 操作系统是瑞典计算机科学研究院开发的一款由C 语言开发的轻量级协程和事件机制完美结合的微操作系统,该操作系统的协程共用系统栈空间,所需内存极小。该操作系统在物联网和无线传感器网络等小型、低耗场景中被广泛应用。

SC000 内核嵌套向量控制器(NVIC)最多支持32 个中断源,实际应用中一般并不会全部使用。因此,可以选择不常用的中断源作为法制固件的主任务。NVIC 允许通过使能对应中断源并设置中断挂起寄存器(ISPR)来实现可挂起的中断,其效果与PendSV 一致。因此,可以利用该特性,将法制固件的主任务部署在最低优先级的中断服务程序中。电能表法制部分主要包含计量、显示、通信、按键、存储等功能,以时间触发和事件触发两种模型为主。当时间触发或事件触发发生时,触发模块根据当前触发原因发送消息至主任务消息队列中,并设置ISPR 寄存器以启动固件主任务。

(1)时间触发模型的应用,可以使用周期定时中断服务实现。因此,对于电能表中需要定时处理的业务,可以在RTC 的中断服务中执行。以FM33A068E 芯片为例,可以选择该芯片的支持高精度调校的实时时钟RTC_B,该外设支持周期可调且最小周期为1/1024 秒的定时中断。由于电能表的瞬时能量累计主要由计量芯片完成,因此,法制部分对实时性要求不高,可以选择1/256 秒的中断源。

以计量采集为例,一方面,电能表应用为防止计量芯片运行中出现复位或计量参数异常等情况发生,每隔一段时间会进行参数检查;另一方面,每隔0.5秒需要获取计量芯片中记录的当前实时电压、电流、功率等瞬时工况数据。为实现该目标,电能表固件程序可以向回调定时器分别注册一个以一分钟和0.5 秒为周期的调用函数,在回调函数中发出一分钟周期消息或0.5 秒周期消息或至计量管理主任务的消息队列。主任务协程在接收到消息后,根据消息类型分别处理。如果收到的是一分钟周期消息,则执行计量芯片的运行状态和参数检查;否择,执行每0.5 秒的瞬时工况数据读取。

(2)事件触发模型的应用,在事件发生时将事件消息发送至对应任务的先进先出(FIFO)队列中并触发法制主任务,法制主任务获取队列中的事件消息后根据消息号分类执行。

例如,当电能表的工作电压检测组件发现电压低于设计门限值时,可以向法制主任务发送电压低消息,之后法制主任务接收到该消息后启动电源跌落处理流程。通过该方法不仅可以将电压检测与主流程解耦,而且可以降低软件处理复杂度。

因此,在中断服务程序中执行基于contikiOS 的法制固件,不仅减少非法制计量的干扰,而且减小了应用程序的耦合度及复杂度。

2.2 法制与非法制接口

对于一个完整的产品来说,不可避免的法制和非法制数据需要直接或间接的访问。然而IR46 对双方的接口部分提出必须明确定义,并且只能通过接口访问。

法制部分固件主要负责基础电能、电费、瞬时电参数的计算或采集,一方面该部分固件为非法制固件提供电能量、瞬时电力有效值、费控等数据的采集和计算以及数据安全的加解密等功能组件。法制固件对于非法制固件来说,其主要运行模式是数据生产者,一般被动访问。因此,为解决两部分固件的隔离以及遵守MPU 的规则,该方案采用CortexM 内核的SVC 中断来实现双方的数据访问或代码执行。

2.3 法制与非法制内存变量分离

法制与非法制固件运行过程中,均会使用内存存放堆、栈及变量等信息,两组固件在同一个芯片上运行,这些变量互相存在被访问的可能。为保证法制固件的变量等内存数据安全,本方案采用内核的MPU 进行法制和非法制数据的区分,如图4 所示。

操作系统的堆、栈、静态变量及非法制固件的中断向量表默认属于特权模式,其数据只允许特权状态进行访问;由于法制固件是运行于中断服务程序中,而且其数据对非法制固件来说属于保密数据,所以也归属于特权模式访问;非法制固件在系统中的安全等级并不高,可设置在用户态。根据MPU 的特性,将特权模式的RAM设置为用户模式不可访问,可以防止非法制数据的随意访问。

3 结束语

本文结合IR46 对于电能表固件的隔离要求以及电能表的应用需求,并结合ARM Cortex-M0+内核的特点,提出一种在单芯片实现法制和非法制分离的方案。下一代电能表将会逐渐成为配网自动化的“末梢”感知节点、多种能源结束的“网关”节点,其非法制固件随着业务变化而多变[3][4]。因此,该方案通过以法制计量运行在特权模式的中断服务程序与用户态的FreeRTOS 实时多任务相结合,既解决法制固件与非法制固件在运行模式下的隔离,且满足法制固件的应用响应实时性问题,又满足了业务多变及实时性的设计需求。同时,该方案与多芯片方案相比,更能节省成本,具有良好的经济价值。

猜你喜欢
服务程序固件内核
强化『高新』内核 打造农业『硅谷』
SylixOS系统的中断嵌套机制研究与实现
基于C#的进程守护程序的设计
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
基于固件的远程身份认证
水利工程施工监理服务程序及质量控制
一种通过USB接口的可靠固件升级技术
多路手机固件升级工具设计