0 引言
磁條卡是一種使用磁性物質制成的標識卡。由于磁條卡具有攜帶方便,價格低廉,便于普及等優點,已經廣泛應用于銀行卡、會員卡、醫療就診卡等應用領域。本文設計了一種基于GPRS的手持無線磁條卡信息終端。手持無線磁條卡信息終端通過磁條卡接口讀取磁條卡上的用戶標識后,通過GPRS無線網絡把用戶標識信息和操作信息發送到中心服務器,中心服務器進行相應的處理后,把響應信息返回手持信息終端處理顯示。手持無線磁條卡信息終端可以不依賴PC獨立工作,成本低廉,功耗低,可以用于會員消費積分查詢、醫療就診查詢等應用系統中。
1 系統設計
磁條卡信息終端基于ARM單片機和μC/OS-Ⅱ實時操作系統。μC/OS-Ⅱ是由Jean J.Labrosse編寫的一種公開源代碼的實時操作系統。但是μC/OS-Ⅱ只提供了一個操作系統內核,沒有提供網絡協議棧、文件系統等支持。在μC/OS-II操作系統上移植開源的嵌入式TCP/IP協議棧LwIP,利用西門子公司的GPRS模塊MC39i就可以實現無線Internet的接入。系統總體框圖如圖1所示。
2 硬件設計
系統硬件組成框圖如圖2所示。系統以ARM單片機為核心構成,主要包括NXP公司的單片機LPC2106/01,GPRS無線MODEM MC39i,磁條卡接口芯片BS100E,鍵盤和LCD模塊等。
NXP的LPC2106/01微控制器是基于ARM7TDMI內核的高性能32位RISC微處理器。LPC2106內嵌了128 KB可在系統編程的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功能,具有功耗低,接口簡單等優點。MC39i模塊需要外接SIM卡座和天線。LPC2106的UART1接口與MC39i模塊的數據串口連接,并通過IGT信號啟動觸發MC39i模塊。
磁條卡上的數據記錄格式采用ISO7811國際標準,最多包含3個磁道。大部分應用中只使用二磁道信息。系統的磁條卡接口由磁頭和接口芯片組成。磁條卡接口芯片選用了***Vikintek公司的單磁道F2F解碼芯片BS100E,該芯片可以實現磁頭信號的放大和F2F編碼數據的恢復。 BS100E的MSIA+和MSIA-管腳接磁頭輸出;CLS(Card Load Signal)管腳為磁條卡的刷卡有效信號,信號低電平有效,接LPC2106的外部中斷IO口;RDPA和RCPA分別為解碼輸出的數據信號和時鐘信號,RDPA接LPC2106的GPIO口,RC-PA接LPC2106的外部中斷IO口。RCPA設置為上升沿觸發中斷。
3 軟件設計
3.1 磁條卡接口驅動的實現
(1)磁條卡數據幀格式。本應用系統中只考慮磁條卡的二磁道信息。二磁道以5個比特組成一個字符數據,最后一位表示奇偶校驗位,使用奇校驗,前面4位表示數據位,可以表示16種字符,包括10個阿拉伯數字和6個其他字符。
磁道上的數據幀包括前導冗余數據、起始標志、數據區、結束標志、縱向冗余校驗位(LRC),后沿冗余數據6個部分(見圖3),冗余數據區不含有效數據,只用作磁道數據的同步,由若干的0組成。起始標志為11010;結束標志為11111;LRC為磁道上有效字符的異或和。正向刷卡時,數據將按圖3的數據幀格式輸出;反向刷卡時,數據幀將會被前后反轉輸出,即先檢測到LRC,再檢測到結束標志、數據區、起始標志,同時每個字符的位順序也是前后反轉輸出的。此外,BS100E解碼芯片輸出的數據采用負邏輯表示,即輸出為1的數據,實際上表示的是數據0,必須取反后才能使用。
(2)讀卡程序的實現
磁條卡解碼輸出接口的時序圖如圖4所示。
當CLS為低電平時,表示磁卡已經進入讀卡器,開始刷卡;當CLS由低變高時,表示磁卡已經離開讀卡器,結束刷卡。在CLS為低的時候,每次RCPA下降沿出現時,RDPA送出一位數據。
在譯碼數據時,為了提高實時性,所有的數據處理都在中斷中進行。在每次RCPA上升沿觸發中斷時讀取RDPA的數據并處理。在解碼時,首先要確定字符的邊界,即確定一個字符的起始位。字符的邊界識別采用圖5所示的狀態機實現。
在搜索狀態,每讀入一位數據就與之前讀入的4位數據一起進行奇校驗,當奇校驗正確時,認為識別出字符的邊界,轉移到預同步狀態。在預同步狀態,連續讀入5位數據后,判斷這5位數據奇校驗是否正確。如果這五位數據奇校驗正確,認為字符的邊界判別正確,進入同步狀態;否則返回到搜索狀態。在同步狀態中,按照圖3的數據幀格式進行數據譯碼。在數據譯碼的同時進行奇校驗檢查,當出現奇校驗錯誤時,認為字符的邊界不正確,重新返回搜索狀態。
譯碼成功后,中斷程序通過信號量通知應用程序任務處理譯碼數據。
3.2 LwIP在μC/OS-Ⅱ上的移植
LwIP是瑞士計算機科學院的Adam Dunkels等開發的一套用于嵌入式系統的開放源代碼TCP/IP協議棧。它占用較少的RAM和ROM,這使LwIP協議棧適合在低端嵌入式系統中使用。LwIP還支持點對點協議(PPP),可以通過PPP連接GPRS網絡,實現無線上網。
LwIP在設計時就考慮到移植問題,把所有與硬件、編譯器和操作系統相關的部分獨立出來,放在LwIP-1.3.0\include\arch和LwIP-1.3.0\arch目錄下。因此LwIP在μC/OS-Ⅱ上的移植,主要工作就是編寫這兩個目錄下的相關文件。要編寫的文件主要包括cc.h、sys_ arch.h和sys_arch.c三個文件。移植LwIP協議棧,主要是針對具體硬件、編譯器和μC/OS-Ⅱ系統重新設計以上3個文件。除此之外,還有一個配置文件lwipopt.h,主要對LwIP進行功能配置。cc.h,sys_arch.h和sys_arch.c三個文件和lwipopt.h文件的修改內容如下:
3.2.1 cc.h
主要定義與編譯器有關的宏,主要包括LwIP數據類型、調試輸出宏、臨界保護的宏、錯誤編碼、字的高低位順序等等。
3.2.2 sys_arch.h
主要定義與操作系統相關的一些結構體與宏,包括郵箱、信號量、線程ID等。
3.2.3 sys_arch.c
主要實現與操作系統封裝層相關的一些函數,包括郵箱操作函數、信號量操作函數等等,主要實現以下幾個函數:
(1)LwIP系統的初始化函數。LwIP提供了系統初始化函數void sys_init(void),用來給用戶初始化一些必要的數據結構。在本系統當中,sys_init()函數主要使用μC/OS-Ⅱ的內存管理函數,分配LwIP郵箱所需的內存和初始化LwIP的定時事件表。
(2)LwIP信號量操作函數。由于μC/OS-Ⅱ中已經實現了信號量的各種操作,只需使用μC/OS-Ⅱ中的信號量處理函數對LwIP的信號量操作函數重新進行封裝就可以了。
(3)LwIP郵箱操作函數。LwIP中的郵箱對應μC/OS-Ⅱ中的消息隊列。根據sys_arch.h文件里面定義的郵箱數據結構,使用μC/OS-Ⅱ的消息隊列函數封裝成以下幾個函數就可以實現LwIP的郵箱操作:
(4)LwIP的sys_arch_timeouts函數。在LwIP當中,每一個線程都有一個定時器鏈表來保存相關的定時信息,移植時要做的事情是為每一個定時器鏈表提供一個用來保存鏈表表頭指針的結構變量sys_timeouts,并通過sys_arch_timeouts函數返回每個線程對應的sys_timeouts變量,并且保證在出錯時也能返回一個可用的sys_timeouts變量。相關的數據結構和函數定義如下:
(5)LwIP線程的創建函數。LwIP需要實現線程的創建函數,但是由于μC/OS-Ⅱ中沒有線程的概念,只有任務,所以LwIP中線程創建可以通過調用μC/OS-Ⅱ中的任務創建函數實現。
(6)LwIP獲取系統時間函數。當LwIP使用PPP作為數據鏈路層協議時,必須通過sys_jifties()函數獲得以ms為單位的系統時間。因此要使用LwIP的PPP協議時,一定要實現這個函數;沒有使用PPP協議時,無需理會。由于在μC/OS-Ⅱ,無論時鐘節拍何時發生,μC/OS-Ⅱ都會對一個32位的計數器加1。可以通過調用μC/OS-Ⅱ的系統函數OSTimeGet()來獲得該計數器的當前值,再根據系統的時鐘節拍頻率就可以實現sys_jifties()函數。
3.2.4 修改配置文件lwipopt.h
LwIP提供了配置文件lwipopt.h,可以通過定義一系列宏來剪裁LwIP功能,適應不同的應用需要。例如可以設置是否支持PPP協議,是否支持ICMP協議,是否支持自動獲取IP等等。由于本應用系統使用GPRS上網,所以設置支持PPP協議。
3.3 GPRS無線Modem驅動
無線Modem驅動完成MC39i的初始化、發送和接收PPP協議幀數據。
3.3.1 AT命令
驅動Modem是基于A T命令集實現的,微控斜器通過串行接口將AT命令發送給MC39i,從而完成對MC39i的控制。主要AT命令如下:
(1)設置錯誤返回信息。使用at+cmee=1命令,執行錯誤時,錯誤報告的格式均為ERROR。
(2)設置接入網關。使用at+cgdcont=1,“IP”,“CMNET”命令設置GPRS接入網關為移動夢網。
(3)激活GPRS功能。使用AT+CGACT=1,使GPRS模塊附著到網絡。如果命令返回O K,則GPRS連接成功;如果返回ERROR,則意味著GPRS連接失敗。
(4)撥號。ATD * 99 * * * 1#。撥號成功后,微控制器通過串口傳送PPP協議幀,與Modem進行數據通信。
3.3.2 LwIP與Modem接口函數
無線Modem使用串行接口與微控制器進行通信。而LwIP提供了幾個標準的串行設備接口函數,在LwIP中的創建sio.c文件實現GPRS無線Modem驅動。該文件中主要實現下面幾個函數:
4 結語
本文設計的無線手持磁條卡信息終端系統實現了輕量級TCP/IP協議棧LwIP在μC/OS-Ⅱ上的移植,并利用運營商的GPRS網絡實現了與后臺服務器的無線互聯,其終端具有成本低,體積小和功耗低等優點,可應用于多種應用場合。
評論
查看更多