摘 要: 介紹了一種基于ISP技術可遠程升級的集中抄表模塊的設計技術。對其軟硬件設計進行了詳細討論。
關鍵詞: 抄表模塊 ISP(In-System Programming)遠程升級 modem芯片 軟件UART
集中抄表模塊通過485接口可以用于抄取多功能電表、居民樓中的水(電、氣)表、工業(yè)現(xiàn)場的聯(lián)網(wǎng)智能儀器的數(shù)據(jù),并可通過擴充的I/O口,實現(xiàn)一定的數(shù)字量的輸入采集和輸出控制,其系統(tǒng)總體結構如圖1所示。集中抄表模塊通過Modem以公共電話網(wǎng)作為傳輸信道,將數(shù)據(jù)傳輸?shù)竭\行數(shù)據(jù)管理軟件的上位機系統(tǒng)中,完成數(shù)據(jù)的自動記錄、管理、分析,并執(zhí)行上位機的指令和實時監(jiān)控,具有經(jīng)濟、省時省力、使用維護靈活、技術成熟等優(yōu)點,具有很好的應用前景。目前這種技術在工業(yè)和民用方面都得到了越來越多的應用。

基于以下三個方面的原因,對集中抄表模塊進行遠程軟件升級是十分必要的:(1)所期望連接的儀表種類越多越好,使它變成一個相對通用的抄表模塊。而不同的儀表所運行的通信協(xié)議都不盡相同,甚至有些協(xié)議還在不斷的變化之中。(2)控制軟件的設計需要不斷修改完善,以消除bug、增加或刪除某些功能。即使是已通過測試并在現(xiàn)場運行的抄表模塊,其軟件也有版本不斷升級的需求。(3)遠程軟件升級給運行維護及開發(fā)人員可帶來極大的便利性:如不用去現(xiàn)場、不用停電、不要開機箱等。
隨著半導體技術的發(fā)展,內(nèi)置了Flash存儲器、Flash擦除及燒錄功能的單片機大量出現(xiàn),給單片機軟件的遠程升級提供了方便。本設計中使用了Philips的二款單片機,其中主控單片機P89C51RD2就具有這些特點,具體表現(xiàn)在它的可在系統(tǒng)編程(In-System Programming,ISP)和可在應用中編程(In-Application Programming,IAP)的能力中。
1 硬件設計
1.1 總體硬件結構
圖2展示了集中抄表模塊的整體硬件結構。圖中hUART是指單片機本身帶的UART口,sUART是指軟件模擬的UART。本電路主要包含有如下幾個部分:

(1)電話接口電路。由嵌入式Modem芯片TDK 73m2901-32及其外圍電路組成。
(2)CPU監(jiān)控電路。即max706看門狗芯片監(jiān)控Philips的低成本單片機P87LPC764;再由P87LPC764監(jiān)控主控單片機P89C51RD2,即前者可以看成是后者的看門狗芯片。max706及二個單片機形成了一個看門狗監(jiān)控鏈。同時,max706的/RESET輸出除了反相后復位P87LPC764外,還與邏輯電路一起在掉電和復位期間封鎖SRAM芯片的寫信號和片選信號,以實現(xiàn)對SRAM數(shù)據(jù)的有效保護。最后,max706還監(jiān)視電源電壓,當電源電壓降至4.8V時給主控單片機告警,禁止數(shù)據(jù)的不可靠寫入。
(3)遠程升級電路。主要由P87LPC764單片機和CD4053組成,前者從上位機接收數(shù)據(jù),對P89C51RD2主控單片機實施ISP編程。
(4)電池及法拉電容后備電路。掉電時維持SRAM中的數(shù)據(jù)和時鐘芯片的走時。
(5)數(shù)據(jù)存儲電路。由2片ISSI 62C1024L-70 共256KB的SARM和1片AT24C02共256B的E2PROM組成。SRAM主要存儲抄表模塊以一定間隔從485總線讀取的歷史數(shù)據(jù),以備上位機讀取查詢之用,每塊數(shù)據(jù)在后面都加有CRC校驗;E2PROM則存儲一些配置信息,如本模塊地址、所連接儀表的地址、上位和本模塊的電話號碼、采樣間隔等,每項數(shù)據(jù)雙備份,而且加CRC校驗。
(6)通信電路。包括Modem芯片、二個單片機之間的UART通信及切換電路以及與儀表的485總線的通信電路。
(7)擴展I/O口。采用了I2C接口的可配置串轉(zhuǎn)并芯片PCF8574,借此可以實現(xiàn)一些開關量的采集以及一些針對繼電器、閥門的控制輸出。
(8)時鐘電路。由時鐘芯片PCF8563完成走時,每次采集的數(shù)據(jù)都要加上時間標簽。
(9)其他電路。如電話接口、485接口的防雷防靜電保護電路等。
下面對Modem和ISP這二部分重要的電路進行討論。
1.2 Modem通信電路
Modem通信使得遠程讀數(shù)和軟件升級成為可能。集中抄表模塊選用了TDK公司功能強大的73m2901-32 嵌入式Modem芯片作為通信接口。它實際上是一個由8051核心和相應的模擬電路、控制軟件集成的一個SOC(System On Chip)產(chǎn)品。它支持ITU V.22bis、V.22、V.21、V.23等通信規(guī)范,帶DTMF和脈沖撥號功能;擁有一套完備的AT命令集,所有控制功能都可由AT命令完成,并可設置詳盡的參數(shù);與控制器的接口也和標準的Modem一樣,提供了RXD、TXD、RTS、CTS、DSR、DTR、RI 、DCD等信號,且串行通信可以自動識別波特率。
該芯片的高度集成性簡化了電路的設計。本設計中單片機只用到73m2901四個端子:RXD、TXD、/RI(振鈴)、/RESET,實現(xiàn)無流控的串行通信;只選用V.22bis通信規(guī)范(用AT命令設置),即收、發(fā)速率都是2 400bps。這里Modem的變壓器中沒有直流經(jīng)過(所謂“干”變壓器),可防止磁芯飽和,有利于變壓器縮小體積和提高耦合性能。
1.3 控制軟件的遠程升級電路
P87LPC764是一款低成本的、具有4KB OTP(一次性)ROM、128B的RAM與8051兼容的單片機。在升級過程中,它起啟動和實施軟件升級的主導作用。它具體完成如下功能:
(1)用sUART口以2 400bps的波特率監(jiān)視Modem通信數(shù)據(jù),接收上位要求升級的命令,并確認確實要進行遠程升級。
(2)切換CD4053模擬開關,使P89C51RD2的hUART口接P87LPC764的hUART口,禁止485口的發(fā)送使能。
(3)將P89C51RD2的/PSEN置低,并復位P89C51RD2,使之進入ISP狀態(tài)。
(4)向P89C51RD2發(fā)命令,擦除64KB 的Flash中的代碼。
(5)經(jīng)sUART口從遠方Modem獲取升級軟件代碼的密文,校驗解密后變成Intel HEX格式,再經(jīng)hUART口發(fā)給已經(jīng)進入ISP狀態(tài)的P89C51RD2,讓其自動編程實現(xiàn)升級。
(6)設置升級成功標志,方法是繼續(xù)在程序后面寫入16個0AAH和16個55H。
P89C51RD2是具有ISP和IAP功能的單片機,它具有如下的特點:與8051兼容,是8051的增強產(chǎn)品;1KB的RAM;64KB的Flash;時鐘頻率0~33MHz;雙DPTR指針;增強的定時器T2;5模塊PCA,支持上下沿捕捉PWM、軟件定時器、看門狗定時器;增強的UART;7個中斷源、4級中斷優(yōu)先級;ALE輸出可控;6/12時鐘方式;多種運行模式等。
P89C51RD2在最后1KB地址,即0FC00H~0FFFFH空間中除了存放軟件的Flash外,還提供了一塊BOOT ROM,在其中固化了Philips公司設計好的實現(xiàn)ISP功能的程序。這個程序可以實現(xiàn)串行通信,可自動發(fā)現(xiàn)波特率,可對Flash空間擦除、編程、讀出校驗、加密位編程等,亦即P89C51RD2進入ISP模式后能自主地從串口接收HEX格式的軟件代碼并寫入芯片中。這二塊地址的切換是由特殊功能寄存器AUXR1的ENBOOT位來實現(xiàn)的。當ENBOOT=1時,0FC00H~0FFFFH地址空間尋址到BOOT ROM,ENBOOT=0時,尋址到Flash。
有二種方法可以使P89C51RD2進入ISP狀態(tài)。第一種方法是設置特殊STATUS BYTE不為0,且BOOT VECTOR為0FCH,則復位時芯片就運行BOOT ROM的程序,進入ISP狀態(tài);第二種方法是將STATUS BYTE設為0,BOOT VECTOR為0FCH(默認情況),當用戶Flash中的軟件正常運行時,將P89C51RD2的管腳/PSEN由高變成低,保持ALE腳為高或浮空,經(jīng)復位芯片也進入ISP狀態(tài)。本設計中采用了第二種方法,如圖3所示。P89C51RD2在P87LPC764的控制下進入ISP狀態(tài),并經(jīng)串口從P87LPC764接收程序代碼進行程序燒錄。

2 軟件設計
2.1 軟件總體設計
主控軟件采用了模塊化層次化的設計方法,并采用了多線程、分時、事件驅(qū)動的思想。雖然沒有采用RTOS(Real-Time Operation System),但同樣實現(xiàn)了多任務操作。具體實現(xiàn)方法是:
(1)從功能上把系統(tǒng)劃分為多個任務,在主循環(huán)中調(diào)用每個任務程序。
(2)每個任務又按照執(zhí)行順序、消耗時間分成多個子模塊。子模塊的軟件中不能出現(xiàn)耗時的循環(huán)等待現(xiàn)象,且每個任務有一個指針可指向其中的任意子模塊。
(3)主循環(huán)每次調(diào)用任務程序,實際上只執(zhí)行了每個任務的一部分,即指針指向的子模塊。完成后返回主循環(huán),主循環(huán)再調(diào)用下一個任務程序。如此實現(xiàn)了多任務操作。
(4)子模塊指針的修改,或者說任務狀態(tài)的遷移,一般是由計時器滿標志、接收緩沖區(qū)滿標志、發(fā)送緩沖器空標志及另一個任務設置的標志等事件驅(qū)動的。子模塊需要自己去檢查所關心的事件并修改指針,實現(xiàn)任務狀態(tài)的遷移。
(5)與實時有關的工作放在中斷中進行,以保證實時性。
集中抄表模塊中有軟件自我監(jiān)控、Modem通信、485通信、I/O操作等模塊。
2.2 通信軟件設計
(1)Modem芯片設置
本設計中Modem芯片73m2901處于被叫位置。當復位后,對它發(fā)送了初始化串(ATE0S0=2S30=4S99=0S7=32S18=150S51=7S52=80S53=7S54=160),之后,Modem芯片就可自動完成摘機、握手、進入數(shù)據(jù)模式等操作。從邏輯上講相當于實現(xiàn)透明化。
通信中,當收到掛斷電話命令,或收到“NO CARRIER”字符串,或30秒無正確格式的數(shù)據(jù)接收時,采用先復位再初始化73m2901芯片的方法掛斷模塊側的電話。
因為沒有使用硬件流控功能,所以上位機所帶的標準Modem也要取消硬件流控,并須支持V.22bis標準。
(2)按照通信規(guī)約實現(xiàn)讀數(shù)
此集中抄表模塊最早用于電力行業(yè),所以采用了DL/T 645-1997的多功能電表通信規(guī)約。目前此規(guī)約應用較廣,且被不同的產(chǎn)品進行了擴充。按照規(guī)約,集中抄表模塊一方面從485總線以一定時間間隔讀取歷史數(shù)據(jù)存入SRAM,一方面可同時向上位機通過Modem返回歷史數(shù)據(jù),另一方面還通過“Modem通信、485通信”二個軟件模塊提供的軟通道,讓上位軟件與485總線上設備直接通信,達到實時監(jiān)控的目的。
(3)通信規(guī)約的擴充
歷史數(shù)據(jù)信息、升級軟件的數(shù)據(jù)信息、軟件版本信息、掛斷電話命令、擴充I/O口數(shù)據(jù)讀寫等都是原規(guī)約中所沒有定義的,軟件設計中對規(guī)約作了相應的擴充。
(4)軟件UART(sUART)
P87LPC764和P89C51RD2在集中抄表模塊中都使用到了二個UART口(參見圖2),而原單片機都只有一個硬件UART。所以在本設計中,二個單片機中各模擬了一個2 400bps速率的軟件UART。因為二個單片機都基于51內(nèi)核,指令執(zhí)行速度比普通51快,所以sUART程序不僅可以共享,而且運行時并不占用太多的系統(tǒng)時間。
2.3 遠程升級軟件的設計
在集中抄表模塊正常運行時,數(shù)據(jù)流如圖4(a)所示。通信從上位機發(fā)起,通過73m2901向P89C51RD2和485總線獲取數(shù)據(jù)。P87LPC764監(jiān)視上位命令,并過濾出升級命令。

在ISP升級時,數(shù)據(jù)流如圖4(b)所示。CD4053被切換,通信從P87LPC764發(fā)起。它從上位機獲取加密的軟件代碼(①~④),解密后發(fā)給P89C51RD2燒錄并等待燒錄結果(⑤~⑥)。
P87LPC764上電后,先復位P89C51RD2,隨后切換CD4053,再與P89C51RD2通信,詢問其程序版本、編程后的校驗值,以確定程序的完好性,以發(fā)現(xiàn)升級過程中因掉電等情況造成的程序破壞。參考文中1.3節(jié)的說明,P87LPC764軟件的整個流程繪制如圖5所示。

3 結束語
在集中抄表模塊的設計中,采用了一些有特色的芯片,如TDK 73m2901的SOC芯片和具有ISP功能的單片機,并借此實現(xiàn)了一些復雜、靈活的功能。本設計中對一些軟硬件的設計方法,如雙CPU協(xié)同工作、看門狗鏈、軟件的遠程升級、軟件分時分模塊的多任務思想等作了一些有益的嘗試,經(jīng)實踐證明是可行的。在下一步的工作中,需要提高Modem速率,加強軟件升級中的安全認證和代碼的安全傳輸,使通信和軟件升級的功能更趨完善。
參考文獻
1 馬家辰,孫玉德.MCS-51單片機原理及接口技術.哈爾濱:哈爾濱工業(yè)大學出版社,2001
2 馬洪連,楊波,姚建偉.內(nèi)置MODEM通信模塊在遠程監(jiān)測系統(tǒng)中的應用.電測與儀表,2002;(9)
3 中華人民共和國電力行業(yè)標準 DL/T645-1997.多功能電能表通信規(guī)約,1998
