劉培頂,陳榮武,王黎敏,陳 忱
(西南交通大學 信息科學與技術(shù)學院,成都 610031)
計算機與通信信號
計算機聯(lián)鎖中安全編碼編程器的設(shè)計與實現(xiàn)
劉培頂,陳榮武,王黎敏,陳 忱
(西南交通大學 信息科學與技術(shù)學院,成都 610031)
在部分計算機聯(lián)鎖系統(tǒng)中,輸入和輸出采用安全編碼的方式來保證采集和驅(qū)動的安全性。安全編碼需事先固化到安全輸入/輸出板的Flash存儲器中,輸入/輸出板通過讀取安全編碼的狀態(tài)來判斷系統(tǒng)是否正常工作。為此設(shè)計了使用C8051F020單片機作為控制器的編程器,并基于Qt設(shè)計了上位機程序來實現(xiàn)對輸入/輸出板上28F128J3F75 Nor Flash的操作,包括自動識別輸入/輸出板、讀/寫安全編碼等。在文中詳細介紹了系統(tǒng)結(jié)構(gòu)、硬件連接、軟件設(shè)計以及上位機讀/寫安全編碼的數(shù)據(jù)格式定義。
計算機聯(lián)鎖;安全編碼;C8051F020;28F128J3F75;Qt
計算機聯(lián)鎖系統(tǒng)在保障行車安全上起著至關(guān)重要的作用,必須符合“故障—安全”原則。為確保聯(lián)鎖機與監(jiān)控對象之間信息的傳送安全,在通道設(shè)計上須采用安全輸入/輸出接口,通常采用光電隔離技術(shù)、安全編碼以及表決來實現(xiàn)。在光耦輸入端施加特定的安全編碼信號,在另一光耦輸出端對信號進行回采,若輸出與預(yù)期不符,則表明有故障,由安全電源控制板控制安全重力繼電器切斷輸出電源,實現(xiàn)故障導向安全。每一路對應(yīng)的安全編碼應(yīng)事先固化到安全輸入/輸出板的板載Flash存儲器中,出于安全考慮,系統(tǒng)在啟動后只能在線讀取Flash中的編碼,而不能擦寫Flash,即不支持在線編程,這就需要一個離線編程器專門給安全輸入/輸出板進行編碼。該編程器設(shè)計的好壞,直接關(guān)乎聯(lián)鎖系統(tǒng)安全編碼的正確率和以后的工程配置效率。
為了提高計算機聯(lián)鎖系統(tǒng)可靠性和隨機讀取速度,安全地輸入/輸出板上的Flash存儲器采用Intel公司的28F128J3F75 Nor Flash。為了減少系統(tǒng)功耗并縮短開發(fā)周期,設(shè)計了一種以C8051F020高性能單片機為主控制器的編程器,并基于Qt設(shè)計了上位機程序,通過RS232串口通信來控制編程板對Flash存儲器實現(xiàn)讀、寫、擦除等操作。
1.1 Flash芯片28F128J3F75
根據(jù)編碼理論,利用n位二值碼元可生成2n種狀態(tài)的碼字或代碼的集合。在這2n種狀態(tài)的代碼組合中,僅有一種狀態(tài)代表危險側(cè)碼字,其余均為安全側(cè)碼字。在鐵標《TB/T 3027-2002計算機聯(lián)鎖技術(shù)條件》中規(guī)定:
(1)有相同意義的與行車安全有關(guān)的變量及其同一變量不同取值的信息編碼的漢明碼距應(yīng)不小于4;
(2)與行車安全有關(guān)的信息編碼,在其碼集中合法碼字、非法碼字或安全側(cè)碼字和非安全側(cè)碼字的不對稱比率必須不小于255:1[1]。故在設(shè)計安全編碼時,碼位至少為8,從安全冗余以及方便軟件編程的角度出發(fā),通常設(shè)計為16 bit或32 bit。經(jīng)過正確的合理編碼,完全可以保證編碼的漢明距大于4[2]。
基于以上原因,聯(lián)鎖系統(tǒng)中,安全輸入/輸出板上的Flash存儲器一般采用16 bit I/O 口的Flash芯片。安全編碼從16 bit變?yōu)?2 bit時,使用2片F(xiàn)lash,增加片選信號線,分時對Flash進行操作。本設(shè)計針對的安全輸入/輸出板上,F(xiàn)lash存儲器為28F128J3F75 Nor Flash芯片,芯片采用分塊結(jié)構(gòu),非常適合于要求高密度的代碼或者數(shù)據(jù)存儲的低功耗系統(tǒng)。它具有以下特點:
(1)速度快:異步頁模式讀取25 ns/8 word;在256 byte緩沖器寫模式下有效編程時間為1.41 us。
(2)低功耗:其供電電壓為2.7 V~3.6 V,根據(jù)手冊擦寫功耗最大為80 mA×3.3 V。
(3)具有通用Flash接口,用戶可根據(jù)需要配置為x8或者x16模式;具有128個128 kbyte/64 kWord的可擦除塊,該特性允許用戶對其中任意一個塊數(shù)據(jù)進行擦除或者編程。
(4)可靠性高:工作溫度為–40℃~+85℃;Vpp=GND時可實現(xiàn)完全寫保護,具有靈活的塊上鎖,電壓跳變時可中止擦除/寫入操作;每塊循環(huán)擦寫次數(shù)為10萬次以上。
1.2 編程器主控制器C8051F020
編程板設(shè)計時采用5 V的USB接口供電,考慮到一般計算機USB口供電能力為300 mA左右,所以元器件選擇以及設(shè)計時需要考慮降低功耗。安全輸入/輸出板編程時主要功耗為FLASH,根據(jù)28F128J3F75數(shù)據(jù)手冊,3.3 V供電電壓下,其擦寫功耗最大為80 mA。其它板載電路如CPCI和邏輯控制電路等都處于待機狀態(tài),功耗可以估計為10 mA左右,即在編程時安全輸入/輸出板最大電流為90 mA,功耗約為300 mW,在設(shè)計編程板上電路時總功耗盡量保持在1.2 W以內(nèi)??紤]到以上原因,同時為了方便系統(tǒng)開發(fā),在設(shè)計時采用C8051F020芯片作為編程器主控制器。
C8051F020是完全集成的混合信號系統(tǒng)級芯片(SoC),具有功能全面、應(yīng)用廣泛、性價比高等優(yōu)點。它具有與8051兼容的CIP-51微控制器內(nèi)核,指令系統(tǒng)完全相同,熟悉MCS-51系列單片機的工程技術(shù)人員可以很容易地掌握C8051F[3]。與Flash安全編碼相關(guān)的特性如下:
(1)采用流水線結(jié)構(gòu),與標準的8051結(jié)構(gòu)相比指令執(zhí)行速度提高了大約10倍;最大系統(tǒng)時鐘頻率為25 MHz,峰值速度達到25 MIPS。
(2)擁有8個8 bit的I/O端口,大量地減少了外部連線和器件擴展,有利于提高可靠性和抗干擾能力。
(3)工作電壓為2.7 V ~3.6 V,與Flash工作電壓兼容;支持多種節(jié)點休眠和停機方式,每個端口I/O引腳都可以被配置為推挽或漏極開路輸出,在標準8051中固定的“弱上拉”可以被總體禁止,這為低功耗應(yīng)用提供了進一步節(jié)電的能力。
(4)自帶4 K XRAM,讀/寫Flash時可提供足夠大的數(shù)據(jù)緩沖區(qū)。
(5)支持JTAG調(diào)試和邊界掃描,可以進行非侵入式、全速的在系統(tǒng)調(diào)試[4]。
近年來新開發(fā)的計算機聯(lián)鎖硬件平臺均采用CPCI總線,因此設(shè)計編程板時要加入CPCI接口。編程板由5 V USB供電,通過CPCI接口與安全輸入/輸出板的J2口相連,上位機通過RS232接口與編程板進行串口通信,發(fā)送讀、寫、擦除等命令,控制編程板上的主控制器C8051F020單片機對安全輸入/輸出板上的Flash芯片執(zhí)行相應(yīng)的操作。JTAG接口用于燒寫程序至單片機,并提供在線調(diào)試。在編程板上設(shè)計有狀態(tài)燈,用于顯示電源和工作狀態(tài)。系統(tǒng)結(jié)構(gòu)如圖1所示。
C8051F020有8個8 bit的I/O端口,低端口(P0、P1、P2 和 P3)既可以按位尋址也可以按字節(jié)尋址,除作通用I/O口外,可作為其他功能模塊的輸入輸出引腳,通過交叉開關(guān)配置器選擇并控制。高端口(P4、P5、P6和 P7)只能按字節(jié)尋址[4]。根據(jù)交叉開關(guān)譯碼表,P0.0和P0.1腳分別作為串口通信的TX0和RX0,并且位置不能互換。在硬件電路設(shè)計時,為充分利用單片機I/O口,P0.2~P0.7作為Flash芯片的控制線,控制片選信號(P0.2、P0.3分別控制兩塊Flash芯片的CE0片選信號,實現(xiàn)32 bit編碼)、寫保護、復(fù)位信號、讀使能、寫使能,P1預(yù)留,P3、P2作為數(shù)據(jù)線,與 Flash的DQ15~DQ0相連,P6、P5、P4作為地址線,與Flash的A24~A1相連,P7接狀態(tài)燈。由于采用16 bit數(shù)據(jù)位,因此Flash芯片上的BYTE接VCC,硬件置1,A0接地。在此,給出C8051F020與28F128J3F75相關(guān)部分連接圖,如圖2所示。
圖1 安全編碼編程器的系統(tǒng)結(jié)構(gòu)
圖2 C8051F020與28F128J3F75硬件接口電路
軟件設(shè)計時,為了程序的可移植性和易用性,將程序分為3個層次。第1層是硬件抽象層,第2層是實現(xiàn)訪問Flash的命令層,第3層是應(yīng)用層,提供給用戶或文件系統(tǒng)的接口函數(shù)。
3.1 硬件抽象層
硬件抽象層包括訪問Flash的硬件環(huán)境配置以及單片機與Flash接口實現(xiàn)通訊的基本函數(shù)。硬件環(huán)境配置包括C8051F020系統(tǒng)時鐘初始化、I/O端口配置、串口初始化、Flash芯片初始化。與Flash接口實現(xiàn)通信的基本函數(shù)即為Flash的讀/寫函數(shù):從給定的24 bit地址,讀取一個字的數(shù)據(jù),或往該地址寫一個字的數(shù)據(jù)或命令。對Flash芯片的所有操作均基于這兩個函數(shù)。C8051F020是8 bit的系統(tǒng),而讀/寫Flash時數(shù)據(jù)線為16 bit,地址線為24 bit。為了提高程序運行效率,避免地址操作時的溢出和進位判斷,定義了一個unsigned long型變量F_Addr表示地址(C8015中為32 bit),設(shè)置宏定義,通過指針和取地址的方式,取其低24 bit分成3個8 bit分別賦值給C8051F020的P6~P4口,如下所示:
#define h_long(x) (*((unsigned char *)&x+1)) #define m_long(x) (*((unsigned char *)&x+2)) #define l_long(x) (*((unsigned char *)&x+3))經(jīng)測試,使用該方式讀取Flash數(shù)據(jù)的效率高于定義全局變量或使用移位操作符賦值的方式。通過研究28F128J3F75芯片數(shù)據(jù)手冊中的單字異步讀時序圖和異步寫時序圖,使用_nop_()指令延時及控制讀/寫信號、片選信號電平高低來模擬Flash的讀/寫時序,即可封裝成最基本的讀/寫函數(shù)void Flash_WR(unsigned long F_Addr, unsigned int Data_h, unsigned int Data_l)、int Flash_RD (unsigned long F_ Addr)供命令層函數(shù)使用。其中,Data_h、Data_l分別表示數(shù)據(jù)的高8 bit和低8 bit賦給單片機的P3口和P2口。
3.2 命令層
調(diào)用硬件抽象層的基本讀/寫函數(shù)生成Flash的命令函數(shù),包括讀取狀態(tài)寄存器狀態(tài)、清除狀態(tài)寄存器狀態(tài)、CFI查詢、讀Flash芯片ID號和設(shè)備號、按塊擦除、按字寫、緩沖器寫、讀陣列等。在Flash芯片數(shù)據(jù)手冊中,每一個命令操作均有詳細的流程圖供開發(fā)者參考使用。
3.3 應(yīng)用層
提供用戶程序訪問Flash的高級接口函數(shù),包括寫安全編碼、讀安全編碼、自動識別安全輸入/輸出板、擦除整塊Flash芯片等函數(shù)。用戶不需要知道Flash的內(nèi)部結(jié)構(gòu)和接口協(xié)議,單片機所有初始化完畢后即進入while(1)循環(huán),等待用戶程序發(fā)來的命令,進而執(zhí)行相應(yīng)的操作。
在工程應(yīng)用中,安全編碼一般以十六進制存放于.dat文件中,為了方便讀/寫安全編碼,基于Qt軟件設(shè)計了上位機程序,其界面如圖3所示。除具有串口助手的基本功能外,增加了許多安全編碼編程器相關(guān)的功能,包括加載.dat文件、讀Flash信息、擦除Flash芯片、燒寫安全編碼數(shù)據(jù)、讀安全編碼數(shù)據(jù)、數(shù)據(jù)管理等。
圖3 編程器上位機程序界面
上位機與編程器之間使用RS232串口通信,C8051F020單片機使用UART0的方式一,即異步工作,8 bit數(shù)據(jù)位,一個起始位,一個停止位。
安全編碼使用大端存儲方式,即數(shù)據(jù)的低字節(jié)存放在內(nèi)存的高地址,數(shù)據(jù)的高字節(jié)存放在內(nèi)存的低地址。讀/寫安全編碼時均按此種方式。
讀/寫安全編碼時,以1 kbyte數(shù)據(jù)為單位進行讀/寫,為保障安全性,數(shù)據(jù)格式定義如表1所示。
表1 讀/寫安全編碼數(shù)據(jù)格式
Flash芯片基地址定義為0x000000,上位機寫數(shù)據(jù)時,編程板根據(jù)編號值來確定安全編碼數(shù)據(jù)的存儲位置;上位機讀數(shù)據(jù)時,編程板根據(jù)地址計算編號值。安全編碼為16 bit時,F(xiàn)_addr=512 N,安全編碼為32 bit時,F(xiàn)_addr=256 N。校驗值采用最簡單實用的方式,即將編號N與安全編碼數(shù)據(jù)共1 002 byte的數(shù)據(jù)累加。上位機與編程板均需要計算校驗值,將收到的校驗值與計算的校驗值進行比較,若相等則表明收到的數(shù)據(jù)是正確的,執(zhí)行相應(yīng)的讀/寫操作;若不相等,則顯示警告信息,并在編程板上以流水燈的形式表現(xiàn),提示用戶數(shù)據(jù)有誤,中斷讀/寫操作。
在輸入/輸出采用安全編碼的聯(lián)鎖系統(tǒng)中,安全編碼編程器的設(shè)計必須要有非常高的安全性和可靠性。通過認真分析功能需求及電氣技術(shù)要求,設(shè)計了以C8051F020為主控制器的編程器及上位機程序。編程器設(shè)計緊湊,輕便小巧,使用一臺筆記本即可進行測試與調(diào)試。在115 200波特率下,安全編碼讀、寫速度分別為7 kbyte/s、3 kbyte/s,完全滿足工程應(yīng)用需求。目前整套系統(tǒng)已應(yīng)用于國內(nèi)某自主研發(fā)的計算機聯(lián)鎖系統(tǒng)硬件平臺中。
[1]中華人民共和國鐵道部. TB/T 3027-2002.計算機聯(lián)鎖技術(shù)條件 [S].北京:中國鐵道出版社,2002.
[2]陳學侄, 陳洪亮.數(shù)據(jù)庫原理與工程應(yīng)用[M].合肥:中國科學技術(shù)大學出版社,1996.
[3]孫立香,趙不賄,劉星橋. C8051F020與80C51單片機的異同點[J]. 國外電子元器件,2007(5):31-35.
[4]潘琢金,施國君. C8051Fxxx高速SoC單片機原理及應(yīng)用[M].北京:北京航空航天大學出版社,2002.
[5]李長有,武學東,孫步勝,馬齊爽. 基于C8051F020的SD卡主控制器設(shè)計[J]. 微計算機信息,2007(26):120-122.
責任編輯 徐侃春
Secure coding programmer for Computer-based Interlocking System
LIU Peiding, CHEN Rongwu, WANG Limin, CHEN Chen
( School of Information Science and Technology, Southwest Jiaotong University, Chengdu 610031, China )
In some kinds of Computer-based Interlocking System, secure coding was used for input and output to guarantee the safety of acquisition and driving. Secure coding should be programmed into the safety input/output board’s Flash memory previously. According to the state of security coding, the input/output board determined whether the system worked properly. The paper designed a programmer which used 80C51F020 single-chip microcomputer as its controller, and also designed the PC program based on Qt to implement the operation of 28F128J3F75 Nor Flash chip, including input / output board of automatic identif i cation, read / write secure coding, etc. It was described the system architecture, hardware connections, software design and the data format def i nition of PC program reading or writing secure coding in detail.
computer-based interlocking; secure coding; C8051F020; 28F128J3F75; Qt
U284.3∶TP39
A
1005-8451(2015)10-0047-04
2015-01-24
劉培頂,在讀碩士研究生;陳榮武,高級工程師。