Cortex-M 智慧電表 微控制器 智慧電網 ARM7 ARM

新舊核心順暢轉換 微控制器提升智慧電表效能

2011-02-24
微控制器為智慧電表重要核心,欲提高智慧電表效能而選擇更換新的微控制器時,微控制器廠商將依客戶需求,協助業者順利移轉至更高效能的微控制器核心產品。由於提升微控制器的效能關鍵,在於替換原有的IP核心,因此新舊核心轉換時,須依照新核心的特性修改必要的部分,新產品才能順利運轉。
歐盟各國最近已經立法,將智慧電網(Smart Grid)計畫轉變為國家法律。而德國政府更決定在2014年全面採用智慧電表,更為能源供應商和電表製造商帶來巨大的壓力。德國的能源經濟法Energiewirtschaftsgesetz(EnWG)規定,從2010年1月開始,電表必須「反映出實際能源用量和實際使用時間」。能源供應商必須「列出每月、每季或每半年的用電總量」,此外,在2010年12月前還須提供「負荷可變或分時段電價」。然而,若沒有某種類型的資料傳輸設施,這些法律義務很難履行。在這種背景之下,德國VDE測試研究所針對電表設備推出兩個規範。EDL系列規範EDL21和EDL40覆蓋德國近四千三百萬個家庭電表;而同步模組化電表(Synchronous Modular Meter, SyM2)則針對商業和工業用戶。

這兩個規範都採用橢圓曲線密碼技術(Elliptic Curve Cryptography, ECC)在用電量上加上數位簽名。特別是橢圓曲線數位簽名演算法(Elliptic Curve Digital Signature Algorithm, ECDSA)可確保遠端電表讀數的真確性。相比RSA等其他演算法,ECC只需較短的金鑰就可提供同等的安全性,或者是金鑰長度相同的情況下提供更高的安全性,如192位元金鑰長度ECDSA簽名的安全性比1,024位元RSA簽名的還要高。對於嵌入式系統的內容,這一點尤其重要,因為金鑰越短,需要的記憶體和運算能力也越少,從而顯著提升性能和效率。這就是為什麼ANSI標準化曲線p192r1能成為SyM2和EDL電表上數位化標記測量(Digitally Signing Measurements)基本曲線的原因。不過,SyM2電表有嚴格的時序要求,因為其須每秒執行兩次用電測量,再加上標記然後傳送。相反地,EDL電表的時序要求則比較寬鬆,完成簽名可能只需要3分鐘,同時不產生任何問題。

因此,ubisys利用p192r1曲線的專有實現方案擴展其C++模組類庫CompactECC。這種特殊的實現方案可根據每個應用的要求對編碼容量、記憶體占用量和執行時間進行最佳組合。該模組庫一般可用於所有支援C++,或帶模組支援的嵌入式C++編譯器的8/16/32位元微控制器(MCU),另外還可以與純C語言專案整合。

MCU擔任智慧電表重要角色

德國一家大型電表製造商從2009年10月起就在其最新產品中採用ubisys CompactECC版本。由於愛特梅爾(Atmel)微控制器附帶嵌入式乙太網媒體存取控制(MAC),符合SyM2電表需求。因此,ubisys選擇該元件作為支援最佳化p192r1 ECC產品的初步平台。為滿足客戶要求,下一個被支援的平台是愛特梅爾8位元AVR,為超大批量及成本敏感的EDL電表提供高成本效益的方案。

此處列出幾個相關數字,SAM7上運行在48MHz主時脈頻率下的ECDSA簽名在140毫秒(ms)內可完成,並需要大約8KB唯讀儲存記憶體(ROM)和2.5KB隨機存取記憶體(RAM),可以執行SyM2電表的所有必要工作。在這個基準上,C++編譯器按照主要產生16位元Thumb指令(約99%)的方式進行配置,這樣一來,程式碼可從32位元的預取緩衝器得益。緩衝器的作用相當於一個極簡單的指令緩衝記憶體,可整合到微控制器中,以便在控制器的運行頻率超出快閃記憶體的最大存取頻率時,提高16位元Thumb指令的執行速度。

若沒有這種預取緩衝,當運行頻率超過30MHz時,要儲存在快閃記憶體中的指令和存取資料就必然會因強制性等待狀態帶來不良影響,而有預取緩衝的幫助,第二個16位元Thumb指令可從緩衝器中載出,並由核心執行,而下一個32位元字串則從快閃ROM搬移到緩衝器。在大多數情況下,這種方法可為安謀國際(ARM)核心的指令管道提供一個穩定的指令流程。

至於CompactECC,只有一個運算極為密集的乘法(192位元×192位元產生384位元結果)以採用32位元ARMv4指令並直接從靜態隨機存取記憶體(SRAM)執行的手工編寫的組合語言程式的形式達成,即使是在最大時脈速度之下,存取同步RAM的時間從來不超過一個時脈週期。

將原設計順利移植至Cortex-M3

SAM3S的移植到底會有多複雜和費時?以CompactECC庫本身來說,5分鐘之內就可以完成。至於專案設置,在C++編譯器選項下,程式碼產生目標已從ARM7TDMI變為Cortex-M3,這差不多就是全部。

有鑑於Cortex-M3不支援ARM模式(但毋須擔心,Thumb-2中包含有32位元ARM指令),必須得對上面提到,在組譯器程式碼內用於乘法操作的那一行進行修改,也就是表明使用中指令集的指示,而實際的指令則完全不須改動。由於SAM3提供一條比SAM7高四倍的快閃記憶體匯流排,因此不再須要讓該程式碼從以往的SRAM執行。

另外,還應該考慮到ARM7採用的是馮紐曼(Von-Neumann)架構,Cortex-M3卻是建基於資料和指令路徑互相獨立的Harvard架構,因此,若從快閃記憶體取得指令,而從SRAM讀取和存入資料,可獲得最高的吞吐量。由於沒有其他硬體依賴性須考慮,CompactECC移植的演算法部分就算完成。

除了模組庫之外,還必須移植樣本應用程式。在這種情況下,與底層硬體的互動顯然嚴格得多。微控制器廠商首先是對微控制器排針文件中的識別字語法略作修改,如AT91C_ID_...、AT91C_BASE_...等字首大多消失,且寄存器和常量的名字稍有不同。另外還須從啟動程式碼開始對函數進行改寫,因為不同世代的處理器有不同的異常向量表(Exception Vector Table),一個原因是Cortex-M3帶有一個整合式巢狀向量中斷控制器 (NVIC)。NVIC淘汰基於ARM7和ARM9的元件中的進階中斷控制器(AIC),NVIC具有各類型優勢,比如中斷延遲更短,沒有疑似岔斷(Spurious Interrupt)這類棘手的問題等。此外,該向量表在記憶體中的位置現在可變化,即不再固定在地址0x00000000,而是可位於位址空間的任何地方。因此,不再須透過把SRAM重新鏡射到位址鏡射的開始以完成對異常表的寫入存取,從而也就毋須重新配置指令。

而且,處理器模式也被簡化,隨之影響到硬體堆疊的數目和其初始化。ARM7TDMI支援七個工作模式(USR、FIQ、IRQ、SVC、ABT、SYS、UND),這顯示該核心最初是針對具有多工處理和分頁等功能的成熟作業系統而設計。相反,Cortex-M3是針對微控制器應用從頭開始量身定做,有兩種模式就足夠。正常的程式執行採用執行緒模式,中斷則採用處理模式。實際上,ARM7TDMI程式內通常設置有兩個或三個堆疊,一個用於應用程式,一般運行在管理模式(SVC)下;一個用於中斷(IRQ);另一個用於快速中斷(FIQ)。其餘的處理器模式一般對微控制器應用無用武之地。此外,Cortex-M3設計包含一個(主要)或兩個(主要和進程)堆疊。

當啟動順序運行時,在堆疊初始化後,底層硬體初始化很快便會執行。甚至在C/C++運行庫控制前,SAM7應用程式就從32kHz振盪器切換到晶振,並且將鎖相迴路(PLL)程式到其工作頻率。這項工作應盡早完成,以加速包含預先定義內容的記憶體分段的初始化。

設計流程修改幅度小

微控制器包括兩個獨立的PLL模組,對那些須提供48MHz通用序列匯流排(USB)時脈,卻又很難從主時脈頻率獲得的應用程式十分有利。除了32kHz RC振盪器外,元件還提供更快的內部RC振盪器,有4M、8M或12MHz的輸出頻率選項,該振盪器從一開始就啟動,提供初步4MHz主時脈頻率,其主要作用是根據系統時脈配置快閃的等待狀態。廠商已簡化嵌入式快閃控制器介面,使用前幾代產品時必須把主時脈頻率通知快閃控制器,至少當應用程式在快閃記憶體頁面執行寫操作時便應該作出通知,而新元件則不需要。

有些周邊模組,包括功率管理控制器都具有保護功能,幫助其避免對任務關鍵型寄存器,如時脈頻率設置的錯誤寫入存取。為把新數值寫入具有這種保護方式的寄存器,金鑰必須與預設配置一起寫入,若金鑰能匹配硬編碼參考值,則只有新數值會被接受。

NVIC的引進也帶來一個副作用,就是結合系統周邊如PIT、RTT、WDT和DBGU中斷請求線的共用系統中斷變得多餘。在前幾代成品中,系統中斷服務程式首先必須確定負責當前中斷請求的中斷來源,但在SAM3S的情況下,每個系統周邊都已接收到自己的中斷向量,而相關的服務程式能利用其內部關於中斷來源的知識,對正確的中斷提供服務,中斷控制器的配置也自然相應改變,在設置處理器的核心異常(IRQs 0-15)和初步堆疊後,周邊的中斷向量就被儲存。

啟動/禁用一個中斷、定義它們的優先順序、利用軟體觸發中斷等功能,都是由Cortex微控制器軟體介面標準(CMSIS)提供。另外,中斷服務程式不再需要專門的序言和結語(Prologues and Epilogues),因為服務程式作為普通函數被執行。中斷控制器與核心的整合還具有一個優勢,即不同於ARM7和ARM9元件,新的微控制器核心沒有疑似岔斷,當中斷線啟動時間很長,足以觸發一個中斷時,就有可能發生疑似岔斷;但若啟動時間過短,在中斷來源被確定前中斷就消失,中斷控制器就無法為核心提供正確的中斷向量。

週期性間隔定時器(PIT)也不再存在,因Cortex-M3將自己的SysTick定時器嵌入在核心中。只要PIT原來是經由其相關ISR用於增量計數器,移植到新元件就十分容易,完全能夠把ISR分配給適當的中斷向量,確保選擇正確的時脈來源,並選擇所期望的重載值,這將適用於99%的應用。

PIO控制器則須要進一步的修改,因為封裝接腳多工現在支援四個而不是兩個可發送到每個接腳的周邊訊號。另外,每個接腳可作為帶可程式極性的邊沿敏感或電壓敏感中斷來源。除錯單元(DBGU)也消失了。這個周邊整合幾個功能,一個用以消息追蹤的序列埠;一個晶片ID寄存器,用於經由軟體或JTAG識別確切的控制器特性;一個連接ARM7TDMI除錯資料通道,並存取廠商快閃程式解決方案的介面,這些功能現在都由一個包含CHIPID模組和一個通用異步收發器(UART)提供。

進行所有上述修改後,用於新微控制器核心的CompactECC樣本應用程式就算最終完成。能以相同的原始碼為基礎,為AT91SAM7S64-EK和AT91SAM3S-EK評測板建立可執行鏡射圖。樣本應用程式很容易經由任何終端程式控制,並可展示私有和公有ECC金鑰的產生,以及ECDSA簽名的建立和驗證,最後利用顯示出堆和疊的記憶體占用量,並列印出內部剖析測量結果的指令,就能完成樣本。

新核心效能再提升

由上所述,相比SAM7S版本,ubisys研發團隊在沒有進行任何特殊最佳化的情況下,達成30%的性能提升。在48MHz的相同時脈頻率下,p192r1曲線上的ECDSA簽名現在只需不到100毫秒的時間,一般約95毫秒。這種性能提升部分來自高效率的Thumb-2指令集,另一部分緣於四倍資料匯流排互聯快閃ROM和核心,由於Von-Neumann和Harvard方案之間的架構性差異,其利用率甚至更高。

可獲得的最大性能提升還可更高,因Cortex-M3微控制器的運行頻率可高達64MHz,而ARM7的最高運行頻率只有55MHz。這代表舊款微控制器上的簽名需要近122毫秒,而新元件上的相同操作僅需75毫秒,若考慮到能量平衡,這種比較絕對公平。在供電電壓均為3.3伏特(V)的情況下,舊核心微控制器在55MHZ下的總耗電量為33毫安培(mA),而新元件在64MHz下的耗電量不超過38毫安培。因此,舊款微控制器能量平衡為WSAM7=3.3V×0.033A×0.122s=13.3mJ。與這種良好性能相比,新元件的性能WSAM3=3.3V×0.038A×0.075s=9.4mJ仍更上一層樓,提高了30%。由於運算的執行速度很快,微控制器可進入省能狀態,直到須進行其他運算工作,或者將被標記的測量值通過電力線或ZigBee網路傳輸為止。此外,新元件的靜態功耗也較低,可進一步提高效率。

(本文作者為愛特梅爾銷售經理)

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!