海南電網(wǎng)公司屯昌供電局 高 紅 北京智芯微電子科技有限公司 金學(xué)明 張 謙 南岳松 趙軍偉 杜 鵑 賀 朋
安全架構(gòu)包括主控芯片MCU、智能卡、安全模塊ESAM、終端設(shè)備、計(jì)量芯片五個(gè)組件。安全信息的邏輯通路有三條(圖1虛線路徑):計(jì)量芯片與ESAM 間的通路、智能卡與ESAM 間的通路、終端設(shè)備與ESAM 間的通路,三條邏輯通路由四個(gè)物理接口實(shí)現(xiàn):計(jì)量芯片與MCU 間的接口1、終端設(shè)備與MCU 間的接口2、智能卡與MCU 間的接口3、ESAM 與MCU 間的接口4。接口1的主要類型是I2C、UART、SPI 等通用接口;接口2的主要類型是RS485接口、電力線載波、EPON、3G 公網(wǎng)等;接口3的類型是ISO7816、ISO14443等標(biāo)準(zhǔn)的智能卡接口;接口4基本都是ISO7816接口。
接口4存在于所有的三條邏輯通路中,它的性能決定了智能電能表安全信息交互的整體性能。ISO7816接口是針對智能卡的標(biāo)準(zhǔn),之所以存在于ESAM 是因?yàn)樵缙诘腅SAM 與智能卡是一種芯片的兩種不同封裝形式,因此接口3與接口4選用相同的接口。隨著智能電網(wǎng)的發(fā)展,智能卡與ESAM在功能與接口方面的差異越來越大,必須要開發(fā)專門的與智能卡不兼容的ESAM 芯片。如果繼續(xù)在ESAM 上使用ISO7816接口將會(huì)存在著協(xié)議冗余、硬件代價(jià)大、接口不通用、速率過低的缺陷。
圖1 智能電能表安全架構(gòu)
ISO7816的最高速率可以達(dá)到5MHz,但實(shí)際中穩(wěn)定的速率是5MHz/372,而SPI 的穩(wěn)定速度可達(dá)到20MHz,因此可選用SPI 作為ESAM 的接口。SPI 接口相對于ISO7816接口具有通用、高速、硬件代價(jià)小的優(yōu)點(diǎn)[1],但它作為一種物理接口,為了能應(yīng)用于ESAM 需根據(jù)應(yīng)用場景開發(fā)協(xié)議層,本文描述了一種定制的SPI 接口,可以滿足上述需求。
SPI 接口有四種工作模式[2],我們選用其中兩種,其CPOL/CPHA、MSB 驅(qū)動(dòng)、其余bit 驅(qū)動(dòng)、采樣位置分別為:CPOL=0、CPHA=1,SCK 升沿,SCK 升沿,SCK 降沿;CPOL=1、CPHA=1,SCK降沿,SCK 降沿,SCK 升沿。棄選兩種分別為:CPOL=0、CPHA=0,SSN 降沿,SCK 降沿,SCK升沿;CPOL=1、CPHA=0,SSN 降沿,SCK 升沿,SCK 降沿。入選兩種模式優(yōu)勢有:傳輸速度快。棄選兩種模式的每個(gè)字節(jié)的MSB 都需要片選信號驅(qū)動(dòng),因此每個(gè)字節(jié)間都需要存在一定寬度的片選信號,這降低了傳輸速度;有利于實(shí)現(xiàn)低功耗;傳輸效率高。可使用片選信號作為傳輸結(jié)束標(biāo)志,因此不需要幀長信息,可以提高傳輸效率,同時(shí)也有利于提高從設(shè)備的接收速度;有利于硬件實(shí)現(xiàn)。棄選兩種模式的驅(qū)動(dòng)源不固定,MSB 的驅(qū)動(dòng)源與其它bit 不同,不利于硬件實(shí)現(xiàn)。
SPI 是一個(gè)全雙工的接口,收發(fā)同時(shí)進(jìn)行,從功耗與實(shí)際應(yīng)用場景出發(fā),我們僅實(shí)現(xiàn)半雙工的通訊[3],一次完整的交互過程被定義為一個(gè)下行幀+一個(gè)上行幀。SPI 設(shè)備分為主設(shè)備與從設(shè)備,智能電能表中主控MCU 為主設(shè)備,ESAM 為從設(shè)備。
下行幀。定義為主設(shè)備發(fā)送給從設(shè)備的字節(jié)序列,由0xE2、指令域、數(shù)據(jù)域、校驗(yàn)域組成,各部分定義如下:0xE2。下行幀頭、用于從設(shè)備幀同步,單字節(jié);指令。主設(shè)備發(fā)送給從設(shè)備的指令,固定長度;數(shù)據(jù)。主設(shè)備發(fā)送給從設(shè)備的數(shù)據(jù)、可以沒有,可變長度;校驗(yàn)。幀頭、指令域、數(shù)據(jù)域的校驗(yàn),固定長度。幀頭選用0xE2可起到降低幀頭檢錯(cuò)概率的目的,當(dāng)0xE2發(fā)生偏移后,無論后續(xù)字節(jié)是什么數(shù)據(jù)都不會(huì)錯(cuò)誤的檢測到0xE2。
上行幀。定義為從設(shè)備發(fā)送給主設(shè)備的字節(jié)序列,由0xE2、響應(yīng)域、數(shù)據(jù)域、校驗(yàn)域組成,各部分定義如下:0xE2。上行幀頭、用于主設(shè)備幀同步。單字節(jié);響應(yīng)。從設(shè)備發(fā)送給主設(shè)備的響應(yīng)分為三種類型(成功,表示從設(shè)備收到正確指令并成功生成上行數(shù)據(jù);校驗(yàn)錯(cuò),表示從設(shè)備收到的幀校驗(yàn)錯(cuò)誤;指令錯(cuò),表示從設(shè)備收到錯(cuò)誤或非法指令),固定長度;數(shù)據(jù)。從設(shè)備發(fā)送給主設(shè)備的數(shù)據(jù)、可以沒有,可變長度;校驗(yàn)。幀頭、指令域、數(shù)據(jù)域的校驗(yàn),固定長度。
安全芯片在完成一次接收+處理+發(fā)送的過程后應(yīng)當(dāng)進(jìn)入低功耗模式,此時(shí)整個(gè)數(shù)字電路和絕大部分模擬電路都將關(guān)閉,可極大地降低系統(tǒng)整體功耗。為保證喚醒過程不會(huì)導(dǎo)致通訊數(shù)據(jù)的丟失、同時(shí)兼容標(biāo)準(zhǔn)的SPI 接口,使用片選信號作為喚醒的標(biāo)志[4],低功耗模式的實(shí)現(xiàn)如圖2。發(fā)送完成后從設(shè)備檢測片選信號,當(dāng)檢測到高電平時(shí)表示主設(shè)備沒有發(fā)起下一次傳輸,此時(shí)可進(jìn)入低功耗模式。當(dāng)主設(shè)備發(fā)起下一次傳輸時(shí),首先拉低片選信號,等待一定時(shí)間Td 后再開始發(fā)送數(shù)據(jù),從設(shè)備檢測到片選信號的低電平后開始喚醒過程,Tw 時(shí)間后進(jìn)入接收狀態(tài),要求Td>Tw,保證從設(shè)備不會(huì)丟失有效數(shù)據(jù)。
圖2 低功耗模式
SPI 通訊過程中可能出現(xiàn)的錯(cuò)誤類型有5種:1從設(shè)備接收超時(shí)。從設(shè)備在設(shè)定時(shí)間內(nèi)沒有收到幀頭;2從設(shè)備接收錯(cuò)誤。從設(shè)備收到的幀校驗(yàn)錯(cuò)誤或接收到的幀非法;3主設(shè)備接收超時(shí)。主設(shè)備在設(shè)定時(shí)間內(nèi)沒有收到幀頭;4主設(shè)備接收錯(cuò)誤。主設(shè)備收到的幀校驗(yàn)錯(cuò)誤或接收到的幀非法;5主設(shè)備收到錯(cuò)誤響應(yīng)。主設(shè)備收到的幀響應(yīng)域不是成功。SPI 接口的所有通訊都是由主設(shè)備發(fā)起的,因此錯(cuò)誤處理只能由主設(shè)備發(fā)起,經(jīng)分析上述錯(cuò)誤類型可進(jìn)行合并處理:編號1的錯(cuò)誤必然導(dǎo)致編號3的錯(cuò)誤;編號2的錯(cuò)誤必然導(dǎo)致編號3、4、5中的一種;因此只需處理編號3、4、5的錯(cuò)誤類型,處理策略如下:主設(shè)備接收超時(shí)或主設(shè)備接收錯(cuò)誤。重發(fā),重發(fā)次數(shù)超過規(guī)定值后上報(bào);主設(shè)備收到錯(cuò)誤響應(yīng)。根據(jù)具體的錯(cuò)誤類型進(jìn)行處理。
使用SCK 作為時(shí)鐘。實(shí)現(xiàn)SPI 接口有兩種時(shí)鐘方案:使用內(nèi)部時(shí)鐘作為工作時(shí)鐘或直接使用SCK作為工作時(shí)鐘。使用內(nèi)部時(shí)鐘方案的時(shí)序如圖3,其中:Tc 是SCK 時(shí)鐘周期的一半;Tdi 是輸入信號的延遲,包括線延時(shí)和PAD 延時(shí);Tdo 是輸出信號的延遲,包括線延時(shí)和PAD 延時(shí);Ts 是內(nèi)部的同步延時(shí),包括兩拍同步延時(shí)和一拍采沿的延時(shí)。最好的情況下,假定Tdi+Tdo=Tclk,Tsetup=0,Ts=3Tclk,由Tc-Tdi-Tdo-Ts>Tsetup,可推導(dǎo)出Tc>3Tclk,因此SCK 的理論頻率上限是系統(tǒng)時(shí)鐘頻率的1/6,這對于系統(tǒng)頻率不高的安全芯片來說是不可接受的(以現(xiàn)在電表安全芯片通用的8MHz時(shí)鐘為例,所支持的最高SCK 僅為1.3MHz)。
圖3 內(nèi)部時(shí)鐘方式的時(shí)序圖
資源復(fù)用。模式1與模式3的區(qū)別僅在于SCK 的極性,所以只需要針對其中一種模式進(jìn)行實(shí)現(xiàn),再根據(jù)模式對SCK 進(jìn)行極性翻轉(zhuǎn)即可。
接收緩存和發(fā)送緩存。SPI 的接收和發(fā)送采用移位寄存器的方式實(shí)現(xiàn)[5],因此需在硬件上增加發(fā)送緩存和接收緩存,這可將軟件的響應(yīng)時(shí)間要求從傳輸1bit 的時(shí)間擴(kuò)展為傳輸1BYTE 的時(shí)間,降低軟件需求,提升通訊速率。緩存設(shè)置可動(dòng)態(tài)配置的門限以應(yīng)對不同的軟件特性:軟件響應(yīng)慢的情況下設(shè)置大門限平攤響應(yīng)時(shí)間保證處理速度,軟件響應(yīng)快的情況下設(shè)置小門限保證響應(yīng)速度同時(shí)可以防止緩存溢出。
片選信號的濾波。為最大程度抗干擾,建議對片選信號進(jìn)行濾波處理。需注意的是在低功耗模式下系統(tǒng)內(nèi)部沒有時(shí)鐘,所以如果選用數(shù)字濾波的話需要確保濾波電路在低功耗模式下被旁路。
從設(shè)備的軟件流程如圖4,軟件處理劃分為接收過程、處理過程、發(fā)送過程[6]。接收過程完成的功能如下:系統(tǒng)完成初始化和SPI 接口的配置后根據(jù)片選信號來決定是否需進(jìn)入低功耗模式;當(dāng)檢測到片選信號為低時(shí)系統(tǒng)通過喚醒過程退出低功耗模式,進(jìn)入接收loop;在接收loop 中根據(jù)接收緩存的空滿信息按字節(jié)讀取接收緩存中的數(shù)據(jù),當(dāng)檢測到片選信號為高時(shí)退出接收loop 并進(jìn)行最后一輪緩存的讀取操作,之后進(jìn)入處理過程。處理過程完成的功能如下:定位接收幀的幀頭;解析下行幀的數(shù)據(jù);根據(jù)不同的下行幀進(jìn)行處理并生成上行幀;當(dāng)檢測到片選信號為低時(shí)進(jìn)入發(fā)送過程。發(fā)送過程完成的功能如下:在發(fā)送loop 中根據(jù)發(fā)送緩存的空滿信息將上行幀按字節(jié)寫入發(fā)送緩存,當(dāng)檢測到片選信號為高時(shí)退出發(fā)送loop 并進(jìn)入接收過程。從軟件流程可以看出,接收loop 與發(fā)送loop 的速度決定了整體收發(fā)的速度,因此建議采用匯編語言進(jìn)行編寫。
圖4 軟件流程
本文提出了一種適用于智能電能表嵌入式安全控制模塊的SPI 接口,可以滿足智能電網(wǎng)的發(fā)展需求。文中從協(xié)議層、硬件實(shí)現(xiàn)、軟件實(shí)現(xiàn)等方面描述了實(shí)現(xiàn)該接口的關(guān)鍵技術(shù)。經(jīng)實(shí)際測試,當(dāng)系統(tǒng)時(shí)鐘頻率為8MHz、接收緩存與發(fā)送緩存門限設(shè)為4、處理器選用R8051XC2時(shí),SPI 穩(wěn)定通訊速率可以達(dá)到12MHz。