引言
稅控收款機(jī)是指具有特定稅控功能的電子收款機(jī),它是集軟硬件為一體的嵌入式系統(tǒng),硬件設(shè)計考慮高性價比和高可靠性,軟件設(shè)計考慮系統(tǒng)的穩(wěn)定性和可靠性。根據(jù)這一原則,本文介紹了一種基于ARM控制器LPC2214的稅控收款機(jī)的設(shè)計方案。
稅控收款機(jī)硬件系統(tǒng)的設(shè)計與實現(xiàn)
稅控收款機(jī)的硬件組成框圖如圖1所示,其硬件系統(tǒng)由中央處理模塊、顯示模塊、打印模塊、電源模塊、時鐘模塊、IC卡接口、外部通訊接口(包括RS232串行接口、網(wǎng)絡(luò)接口、USB接口等)、蜂鳴器,以及輸入鍵盤、電子鎖、條碼掃描儀和手寫板等幾部分組成。
圖1 稅控收款機(jī)硬件框圖
中央處理模塊
中央處理模塊采用飛利浦公司基于32位ARM7TDMI-S內(nèi)核的低功耗ARM處理器LPC2214。該處理器是飛利浦公司為嵌入式應(yīng)用提供的高性價比微控制器解決方案,通過在ARM7TDMI-S內(nèi)容基礎(chǔ)上擴(kuò)展一系列的通用外圍器件,使系統(tǒng)費(fèi)用降至最低,增強(qiáng)了系統(tǒng)對外部設(shè)備的支持能力。由于LPC2114集成了豐富的片上資源,所以系統(tǒng)本身的擴(kuò)展大大減少,這不但減小了產(chǎn)品的體積,而且便于維護(hù)。
顯示模塊
作為人機(jī)交互的顯示模塊包括一個LCD主顯示屏和一個9位的VFD用戶顯示屏,其中LCD采用內(nèi)置KS0107/KS0108控制器的圖形點陣式液晶,顯示分辨率為192×64,可顯示16×5個11×12點陣的漢字;VFD通過具有SPI接口的芯片HT16512進(jìn)行驅(qū)動。
打印模塊
系統(tǒng)選用EPSON公司的MU110II打印機(jī)頭,供電電壓為DC24V。電機(jī)驅(qū)動采用MTD2003F,針驅(qū)動采用MTA001M,由LPC2214的通用I/O口進(jìn)行控制。
電源管理模塊
系統(tǒng)采用開關(guān)電源為LPC2214提供5V電源。由于稅控收款機(jī)對掉電保護(hù)有嚴(yán)格要求,所以在電源管理模塊中設(shè)計了掉電保護(hù)電路,可以在掉電時維持系統(tǒng)正常工作一定時間。掉電時該電路會發(fā)送給處理器一個中斷,使系統(tǒng)進(jìn)入掉電中斷處理程序,進(jìn)行相應(yīng)的掉電保護(hù)工作。
時鐘模塊
時鐘模塊采用I2C總線時鐘芯片P8563AP,在后備電池的支持下,能保證系統(tǒng)掉電后片內(nèi)時鐘繼續(xù)運(yùn)行。
稅控存儲器
稅控收款機(jī)需要記錄大量的數(shù)據(jù)信息,本系統(tǒng)采用了ATMEL公司具有SPI接口的Flash存儲器AT45DB321,由于LPC2214微控制器具有SPI的接口,所以能夠方便地同它相連接。設(shè)計上采用可插拔式模塊,將數(shù)據(jù)存儲模塊與系統(tǒng)主板分離。此設(shè)計的特點是當(dāng)系統(tǒng)出錯時,能夠?qū)⒅匾獢?shù)據(jù)及時轉(zhuǎn)移,降低了數(shù)據(jù)發(fā)生錯誤的幾率,提高了數(shù)據(jù)的完整性和可靠性。在稅控卡的配合下,可以將相關(guān)的數(shù)據(jù)信息轉(zhuǎn)移到另一正常工作的機(jī)器中繼續(xù)進(jìn)行工作,保證數(shù)據(jù)存儲的時效性。另外,也可以在維護(hù)和檢修時采用替換法,這體現(xiàn)出很強(qiáng)的實用性和可操作性。
IC卡接口
通常的設(shè)計中會使用專用IC卡讀寫芯片為系統(tǒng)提供ISO7816的接口,如CTS56I01、WatchCore、TDA8020等。本系統(tǒng)沒有進(jìn)行硬件擴(kuò)展,充分利用LPC2214的性能特性,實現(xiàn)了符合ISO7816標(biāo)準(zhǔn)的IC卡接口功能。
智能卡芯片的接口信號包括:電源電壓(VCC)、地(GND)、復(fù)位(RST)、時鐘(CLK)、編程電壓(VPP)、輸入輸出(I/O)。如圖2所示,I/O、RST由LPC2214微控制器的通用I/O口(GPIO)來控制,通過軟件模擬數(shù)據(jù)讀寫操作時序,實現(xiàn)數(shù)據(jù)的交換,其中I/O上信號的傳輸是雙向的,所以要利用軟件根據(jù)時序不斷轉(zhuǎn)換輸入輸出的狀態(tài)。此方法具有成本低、方便靈活等特點。
電源管理模塊
系統(tǒng)采用開關(guān)電源為LPC2214提供5V電源。由于稅控收款機(jī)對掉電保護(hù)有嚴(yán)格要求,所以在電源管理模塊中設(shè)計了掉電保護(hù)電路,可以在掉電時維持系統(tǒng)正常工作一定時間。掉電時該電路會發(fā)送給處理器一個中斷,使系統(tǒng)進(jìn)入掉電中斷處理程序,進(jìn)行相應(yīng)的掉電保護(hù)工作。
時鐘模塊
時鐘模塊采用I2C總線時鐘芯片P8563AP,在后備電池的支持下,能保證系統(tǒng)掉電后片內(nèi)時鐘繼續(xù)運(yùn)行。
稅控存儲器
稅控收款機(jī)需要記錄大量的數(shù)據(jù)信息,本系統(tǒng)采用了ATMEL公司具有SPI接口的Flash存儲器AT45DB321,由于LPC2214微控制器具有SPI的接口,所以能夠方便地同它相連接。設(shè)計上采用可插拔式模塊,將數(shù)據(jù)存儲模塊與系統(tǒng)主板分離。此設(shè)計的特點是當(dāng)系統(tǒng)出錯時,能夠?qū)⒅匾獢?shù)據(jù)及時轉(zhuǎn)移,降低了數(shù)據(jù)發(fā)生錯誤的幾率,提高了數(shù)據(jù)的完整性和可靠性。在稅控卡的配合下,可以將相關(guān)的數(shù)據(jù)信息轉(zhuǎn)移到另一正常工作的機(jī)器中繼續(xù)進(jìn)行工作,保證數(shù)據(jù)存儲的時效性。另外,也可以在維護(hù)和檢修時采用替換法,這體現(xiàn)出很強(qiáng)的實用性和可操作性。
IC卡接口
通常的設(shè)計中會使用專用IC卡讀寫芯片為系統(tǒng)提供ISO7816的接口,如CTS56I01、WatchCore、TDA8020等。本系統(tǒng)沒有進(jìn)行硬件擴(kuò)展,充分利用LPC2214的性能特性,實現(xiàn)了符合ISO7816標(biāo)準(zhǔn)的IC卡接口功能。
智能卡芯片的接口信號包括:電源電壓(VCC)、地(GND)、復(fù)位(RST)、時鐘(CLK)、編程電壓(VPP)、輸入輸出(I/O)。如圖2所示,I/O、RST由LPC2214微控制器的通用I/O口(GPIO)來控制,通過軟件模擬數(shù)據(jù)讀寫操作時序,實現(xiàn)數(shù)據(jù)的交換,其中I/O上信號的傳輸是雙向的,所以要利用軟件根據(jù)時序不斷轉(zhuǎn)換輸入輸出的狀態(tài)。此方法具有成本低、方便靈活等特點。
圖2 稅控收款機(jī)IC卡接口
業(yè)務(wù)處理層設(shè)計
業(yè)務(wù)處理層是稅控收款機(jī)軟件架構(gòu)中的最上層,與具體的硬件平臺無關(guān),作為一個應(yīng)用軟件可方便地移植到不同的硬件平臺上。該層用于實現(xiàn)商務(wù)和稅控兩大主要功能,由4個模塊組成。
主程序(主控模塊)進(jìn)行系統(tǒng)自檢、軟硬件的初始化、調(diào)度運(yùn)行業(yè)務(wù)處理層的其它模塊以及處理掉電數(shù)據(jù)恢復(fù)、數(shù)據(jù)整理,并控制整個軟件的流程;稅控功能模塊實現(xiàn)GB18240-2003國家標(biāo)準(zhǔn)中的稅控功能,負(fù)責(zé)機(jī)器初始化和注冊、發(fā)票的購買分發(fā)、開發(fā)票(包括退票、廢票處理)、稅控數(shù)據(jù)申報、監(jiān)控數(shù)據(jù)回送、稅務(wù)核查等;商務(wù)功能模塊由銷售子模塊、統(tǒng)計分析(報表)子模塊、設(shè)置管理子模塊以及其它一些功能子模塊組成;通訊模塊負(fù)責(zé)與運(yùn)行在上位機(jī)(PC)上的稅控收款機(jī)管理系統(tǒng)進(jìn)行數(shù)據(jù)通信。
接口層設(shè)計
接口層作為一個抽象層僅提供應(yīng)用程序接口,不對具體硬件操作,也不處理具體業(yè)務(wù),是針對復(fù)雜設(shè)備設(shè)計的管理程序,主要包括IC卡管理、存儲器管理、USB通訊管理等。以下詳細(xì)介紹存儲器管理中的發(fā)票存儲管理模塊。
稅控收款機(jī)要求能夠可靠存儲大量發(fā)票數(shù)據(jù),因此發(fā)票存儲管理模塊是本系統(tǒng)的一個關(guān)鍵模塊。為了節(jié)約存儲空間,本系統(tǒng)中發(fā)票存儲系統(tǒng)采用了變長滾動存儲方法。
變長即指發(fā)票長度因各發(fā)票頭部和其所含明細(xì)的不同,占用的存儲空間大小也不同。本系統(tǒng)中發(fā)票頭部分別可能占用32、64、96字節(jié),發(fā)票最大明細(xì)數(shù)為8,每筆明細(xì)占用32字節(jié)。這樣,每張發(fā)票所占存儲空間為1個~11個32字節(jié)。發(fā)票在存儲器中的存儲位置也是以32字節(jié)為單位對齊的,兩張發(fā)票之間位置首尾相連,沒有冗余空間。
滾動存儲即指在存儲空間固定的情況下,循環(huán)利用這部分存儲空間,當(dāng)所存儲的發(fā)票占用到了足夠大的空間時,新的發(fā)票可能會覆蓋掉最早存儲的發(fā)票位置。
由于發(fā)票變長存儲,所占空間大小不一,為了達(dá)到隨機(jī)訪問的目的,需要建立一張位置索引表,表中的每項指明發(fā)票的實際存儲位置,比如,位置索引表中的第n項就是第n張發(fā)票在存儲器中的位置。同時,為了加快通過發(fā)票號查找發(fā)票詳細(xì)信息的查找速度,要最大可能地減少對存儲器的訪問次數(shù),這是提高查找速度的關(guān)鍵。本系統(tǒng)采用Hash索引表來快速定位所要查找的發(fā)票,為了解決該算法的Hash值計算沖突,另外建立了一張Hash鏈接表,此表的長度和位置索引表相同,表中每個值代表Hash值沖突的下一張發(fā)票的位置。
設(shè)備驅(qū)動層設(shè)計
設(shè)備驅(qū)動層包括直接操作外設(shè)的驅(qū)動,如IC卡、Flash、LCD、VFD、打印機(jī)、USB、鍵盤、時鐘等外設(shè)的驅(qū)動;另外還包括LPC2214內(nèi)部配置驅(qū)動,如內(nèi)部寄存器配置、UART配置、GPIO設(shè)置、RTC讀寫、TIMER設(shè)置等。其中ISO7816標(biāo)準(zhǔn)IC卡驅(qū)動是一個關(guān)鍵部分,它包含插卡檢測、卡上下電、卡復(fù)位和卡命令等功能。
IC卡與LPC2214微控制器的數(shù)據(jù)傳輸方式為異步半雙工字符傳輸模式,本系統(tǒng)使用軟件實現(xiàn)該功能。利用LPC2214的GPIO來軟件模擬IC卡的讀寫操作時序,進(jìn)行數(shù)據(jù)交換:接收數(shù)據(jù)時將LPC2214的GPIO設(shè)置為輸入模式,使用中斷程序?qū)/O數(shù)據(jù)線進(jìn)行采樣;發(fā)送數(shù)據(jù)時將LPC2214的GPIO設(shè)置為輸出模式,在中斷程序中直接輸出需要發(fā)送的數(shù)據(jù)位。
異常情況處理
當(dāng)異常情況(如斷電、拔卡等)發(fā)生時,稅控收款機(jī)應(yīng)保證數(shù)據(jù)不丟失、無差錯。本系統(tǒng)從兩方面保證了數(shù)據(jù)的可靠性。一方面,在初始化、分發(fā)發(fā)票、錄入發(fā)票、開票、報稅及完稅等關(guān)鍵步驟前先檢測電源是否正常,如已經(jīng)發(fā)生掉電,系統(tǒng)停止工作;否則置標(biāo)志,開始正常的步驟操作,步驟完成后,清除標(biāo)志。如果步驟未完成前發(fā)生斷電或IC卡意外拔出等事件,則在下一次上電或重新操作該步驟時系統(tǒng)會檢測到標(biāo)志,軟件將自動調(diào)用恢復(fù)機(jī)制,完成剩余操作,恢復(fù)丟失的數(shù)據(jù)。
本網(wǎng)站部分內(nèi)容來源于網(wǎng)站會員、合作媒體、企業(yè)機(jī)構(gòu)、網(wǎng)友提供和互聯(lián)網(wǎng)的公開資料等,僅供參考。本網(wǎng)站對站內(nèi)所有資訊的內(nèi)容、觀點保持中立,不對內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。如果有侵權(quán)等問題,請及時聯(lián)系我們,我們將在收到通知后第一時間妥善處理該部分內(nèi)容。