0 引言
磁條卡是一種使用磁性物質(zhì)制成的標識卡。由于磁條卡具有攜帶方便,價格低廉,便于普及等優(yōu)點,已經(jīng)廣泛應(yīng)用于銀行卡、會員卡、醫(yī)療就診卡等應(yīng)用領(lǐng)域。本文設(shè)計了一種基于GPRS的手持無線磁條卡信息終端。手持無線磁條卡信息終端通過磁條卡接口讀取磁條卡上的用戶標識后,通過GPRS無線網(wǎng)絡(luò)把用戶標識信息和操作信息發(fā)送到中心服務(wù)器,中心服務(wù)器進行相應(yīng)的處理后,把響應(yīng)信息返回手持信息終端處理顯示。手持無線磁條卡信息終端可以不依賴PC獨立工作,成本低廉,功耗低,可以用于會員消費積分查詢、醫(yī)療就診查詢等應(yīng)用系統(tǒng)中。
1 系統(tǒng)設(shè)計
磁條卡信息終端基于ARM單片機和μC/OS-Ⅱ?qū)崟r操作系統(tǒng)。μC/OS-Ⅱ是由Jean J.Labrosse編寫的一種公開源代碼的實時操作系統(tǒng)。但是μC/OS-Ⅱ只提供了一個操作系統(tǒng)內(nèi)核,沒有提供網(wǎng)絡(luò)協(xié)議棧、文件系統(tǒng)等支持。在μC/OS-II操作系統(tǒng)上移植開源的嵌入式TCP/IP協(xié)議棧LwIP,利用西門子公司的GPRS模塊MC39i就可以實現(xiàn)無線Internet的接入。系統(tǒng)總體框圖如圖1所示。
2 硬件設(shè)計
系統(tǒng)硬件組成框圖如圖2所示。系統(tǒng)以ARM單片機為核心構(gòu)成,主要包括NXP公司的單片機LPC2106/01,GPRS無線MODEM MC39i,磁條卡接口芯片BS100E,鍵盤和LCD模塊等。
NXP的LPC2106/01微控制器是基于ARM7TDMI內(nèi)核的高性能32位RISC微處理器。LPC2106內(nèi)嵌了128 KB可在系統(tǒng)編程的FLASH和64 KB的SR-AM,同時集成了多個32位定時器、PWM輸出、2個UARTs接口和32個GPIO。LPC2106支持的最高CPU時鐘頻率為60 MHz。
GPRS MODEM選用西門子公司的MC39i。MC39i是雙頻GSM/GPRS模塊,支持標準的ITU-TAT命令集,支持GPRS Class 10功能,具有功耗低,接口簡單等優(yōu)點。MC39i模塊需要外接SIM卡座和天線。LPC2106的UART1接口與MC39i模塊的數(shù)據(jù)串口連接,并通過IGT信號啟動觸發(fā)MC39i模塊。
磁條卡上的數(shù)據(jù)記錄格式采用ISO7811國際標準,最多包含3個磁道。大部分應(yīng)用中只使用二磁道信息。系統(tǒng)的磁條卡接口由磁頭和接口芯片組成。磁條卡接口芯片選用了臺灣Vikintek公司的單磁道F2F解碼芯片BS100E,該芯片可以實現(xiàn)磁頭信號的放大和F2F編碼數(shù)據(jù)的恢復(fù)。 BS100E的MSIA+和MSIA-管腳接磁頭輸出;CLS(Card Load Signal)管腳為磁條卡的刷卡有效信號,信號低電平有效,接LPC2106的外部中斷IO口;RDPA和RCPA分別為解碼輸出的數(shù)據(jù)信號和時鐘信號,RDPA接LPC2106的GPIO口,RC-PA接LPC2106的外部中斷IO口。RCPA設(shè)置為上升沿觸發(fā)中斷。
3 軟件設(shè)計
3.1 磁條卡接口驅(qū)動的實現(xiàn)
。1)磁條卡數(shù)據(jù)幀格式。本應(yīng)用系統(tǒng)中只考慮磁條卡的二磁道信息。二磁道以5個比特組成一個字符數(shù)據(jù),最后一位表示奇偶校驗位,使用奇校驗,前面4位表示數(shù)據(jù)位,可以表示16種字符,包括10個阿拉伯數(shù)字和6個其他字符。
磁道上的數(shù)據(jù)幀包括前導(dǎo)冗余數(shù)據(jù)、起始標志、數(shù)據(jù)區(qū)、結(jié)束標志、縱向冗余校驗位(LRC),后沿冗余數(shù)據(jù)6個部分(見圖3),冗余數(shù)據(jù)區(qū)不含有效數(shù)據(jù),只用作磁道數(shù)據(jù)的同步,由若干的0組成。起始標志為11010;結(jié)束標志為11111;LRC為磁道上有效字符的異或和。正向刷卡時,數(shù)據(jù)將按圖3的數(shù)據(jù)幀格式輸出;反向刷卡時,數(shù)據(jù)幀將會被前后反轉(zhuǎn)輸出,即先檢測到LRC,再檢測到結(jié)束標志、數(shù)據(jù)區(qū)、起始標志,同時每個字符的位順序也是前后反轉(zhuǎn)輸出的。此外,BS100E解碼芯片輸出的數(shù)據(jù)采用負邏輯表示,即輸出為1的數(shù)據(jù),實際上表示的是數(shù)據(jù)0,必須取反后才能使用。
。2)讀卡程序的實現(xiàn)
磁條卡解碼輸出接口的時序圖如圖4所示。
當CLS為低電平時,表示磁卡已經(jīng)進入讀卡器,開始刷卡;當CLS由低變高時,表示磁卡已經(jīng)離開讀卡器,結(jié)束刷卡。在CLS為低的時候,每次RCPA下降沿出現(xiàn)時,RDPA送出一位數(shù)據(jù)。
在譯碼數(shù)據(jù)時,為了提高實時性,所有的數(shù)據(jù)處理都在中斷中進行。在每次RCPA上升沿觸發(fā)中斷時讀取RDPA的數(shù)據(jù)并處理。在解碼時,首先要確定字符的邊界,即確定一個字符的起始位。字符的邊界識別采用圖5所示的狀態(tài)機實現(xiàn)。
在搜索狀態(tài),每讀入一位數(shù)據(jù)就與之前讀入的4位數(shù)據(jù)一起進行奇校驗,當奇校驗正確時,認為識別出字符的邊界,轉(zhuǎn)移到預(yù)同步狀態(tài)。在預(yù)同步狀態(tài),連續(xù)讀入5位數(shù)據(jù)后,判斷這5位數(shù)據(jù)奇校驗是否正確。如果這五位數(shù)據(jù)奇校驗正確,認為字符的邊界判別正確,進入同步狀態(tài);否則返回到搜索狀態(tài)。在同步狀態(tài)中,按照圖3的數(shù)據(jù)幀格式進行數(shù)據(jù)譯碼。在數(shù)據(jù)譯碼的同時進行奇校驗檢查,當出現(xiàn)奇校驗錯誤時,認為字符的邊界不正確,重新返回搜索狀態(tài)。
譯碼成功后,中斷程序通過信號量通知應(yīng)用程序任務(wù)處理譯碼數(shù)據(jù)。