李瑋+丁瑩亮
【摘 要】本款智能IC卡治療儀采用的讀寫模塊WM-11T6。讀寫模塊WM-11T6的軟件設計是智能IC卡治療儀設計中非常重要的一部分。本文章主要論述IC卡讀寫模塊WM-11T6的軟件編程及IC卡讀寫程序清單。
【關鍵詞】治療儀;軟件設計;軟件清單
【Abstract】This intelligent IC card therapeutic device adopts the read-write module WM-11T6.The software design of the read-write module WM-11T6 is a very important part in the design of the intelligent IC card therapeutic apparatus. This article mainly discusses the IC card read and write module WM-11T6 software programming and IC card reading and writing program list.
【Key words】Therapeutic apparatus;Software design;Software list
本款智能生物離子IC卡治療儀是為海南一家醫療設備生產廠商設計的,產品已經投入市場。本款治療儀使用的是非接觸式IC卡充值計費方式。本款治療儀在經營模式上進行了創新,改變傳統用戶(醫院或個人)購買整個產品的經營模式,變為用戶只購買產品的使用權的經營模式,也就是說用戶不再是醫療設備的擁有者只是使用者。本款治療儀采用一機一卡管理模式:每臺設備都只有一個唯一的ID號,治療儀的ID號與IC卡的ID號相統一,本機的IC卡對其他治療儀無效。使用治療儀時,用戶將購買的IC卡的全部金額一次性充入到設備中,IC卡被清空, 隨之失效。此款智能生物離子IC卡治療儀采用的讀寫模塊WM-11T6,讀寫模塊WM-11T6的軟件設計是智能IC卡治療儀設計中非常重要的一部分。
1 WM-11T6射頻讀寫模塊簡介
WM-11T6射頻讀寫模塊采用的是最新Mifare技術的微型嵌入式非接觸式IC卡讀寫模塊。內部嵌有ISO14443 Type A協議解釋器,并且具有接收和射頻驅動功能,還可實現簡單的對MifareOne等卡片的讀寫操作,最大讀寫距離可達100mm(具體距離與卡片及天線的設計有關)。
該模塊提供標準異步串行通訊接口和輸出TTL電平。用戶只需通過串行通訊發送相關指令,即可實現對卡片的所有操作,不必詳細了解非接觸IC卡讀寫模塊的協議標準和底層驅動。實物照片如圖1所示。
1.1 WM-11T6射頻讀寫模塊基本參數
工作電壓:DC5V
工作電流:<100mA
通訊接口:RS232接口,TTL電平,波特率為9600 BPS無校驗位,8位數據位,1位停止位)
適用卡型:Mifare One
數據通訊:106KBPS
射頻頻率:13.56MHz
操作距離:<100mm
工作溫度:-20℃ --- +65℃
存儲溫度:-40℃ --- +85℃
1.2 WM-11T6射頻讀寫模塊管腳定義
該模塊尺寸為標準DIP32封裝 (41mm×18mm) ,其管腳定義為:
VCC:+5V RX:天線接收
GND:地 TX1:天線發送1
TXD:模塊發送(接單片機) TX2:天線發送2
RXD:模塊接收(接單片機) GND:天線地
1.3 天線的接口定義
天線接口定義與WM-11T6射頻讀寫模塊一致:
RX:天線接收 TX1:天線發送1
TX2:天線發送2 GND:天線地
2 IC卡讀寫模塊WM-11T6的軟件設計
2.1 IC卡操作流程
IC卡的操作流程必須按以下順序執行:尋卡、密碼校驗、讀或寫卡、關閉卡片,如果執行過程中任何一個操作出現錯誤,應立即關閉對IC卡的操作。
2.2 尋卡模式
尋卡模式位有兩種: 00或01。如果采用“00”模式尋卡,執行完關閉指令后,卡片必須離開感應區后,從新再進入感應區才能尋卡成功;如果采用“01”模式尋卡,執行完關閉指令后,卡片不需要離開感應區也能尋卡成功。
2.3 通訊命令
電腦給WM-11T6模塊下傳命令需要通過RS232口,WM-11T6模塊收到命令后回傳結果給電腦。
通訊命令協議的內容(以下所有數據都為十六進制表示,其中BCC為命令字符串本字節之前的所有字節的異或校驗和):
通訊測試:
下傳命令:3C 04 00 60 00 00? BCC 0D
成功返回:3C 01 01 BCC 0D
錯誤返回:3C 01 00 BCC 0D
尋卡:
下傳命令:3C 04 01 70 00(尋卡模式00(IDLE)或01(ALL)) 00 BCC 0D
成功返回:3C 05 四字節卡號 00 BCC 0D
錯誤返回: 3C 01 FF(錯誤返回代碼) BCC 0D
其中:00尋卡模式要求操作的卡在讀寫完成后要離開感應區才能再讀寫。
01尋卡模式要求操作的卡在讀寫完成后卡片只需關閉后又可讀寫。
密碼驗證:endprint
下傳命令:3C 0E 01 6C 六字節密碼 認證模式(00-A/01-B) 絕對塊號 四字節卡號 校驗位 0D
成功返回:3C 02 00 00 BCC 0D
錯誤返回:3C 01 FF(錯誤代碼) BCC 0D
其中:0為A密碼,1為B密碼
讀卡:3C 04 01 66 00(絕對塊號) 00 BCC 0D
成功返回:3C 12 00 DATA0~DATA15 BCC 0D
錯誤返回:3C 01 FF(錯誤返回代碼) BCC 0D
寫卡:3C 13 01 67 00(絕對塊號) DATA0~DATA15 BCC 0D
成功返回:3C 02 00 00 BCC 0D
錯誤返回:3C 01 FF(錯誤返回代碼) BCC 0D
關閉卡片:3C 04 01 68 00 00 51 0D
正確返回:3C 02 00 00 3E 0D
錯誤返回:3C 01 FF(錯誤返回代碼)BCC 0D
2.4 操作注意事項
2.4.1 對IC卡控制區的讀寫與數據的讀寫相同,但是控制方式不同,需要注意在編程過程中不能寫錯,否則可能會出現無法再對該區進行操作的現象。
2.4.2 在每一個命令執行后,下一個命令執行前應該增加不少于15ms的延時。
3 IC卡讀寫程序清單
Read_Cd:
MOV CardStatus,#00H
MOV SendCdData + 0, #3CH
MOV SendCdData + 1, #04H
MOV SendCdData + 2, #01H
MOV SendCdData + 3, #66H
MOV SendCdData + 4, BLOCKNUMBER ;
MOV SendCdData + 5, #00H
MOV DataLength,#06H
LCALL XORCheck
MOV SendCdData + 6, A
MOV SendCdData + 7, #0DH
MOV CadDataCount,#8
MOV R1,#SendCdData
ReadCdLoop1:
MOV UARTData,@R1
INC R1
LCALL SoftUART_PutByte
DJNZ CdDataCount,ReadCdLoop1
MOV CdDataCount,#21
MOV R1,#ReciCdData
ReadCdLoop2:
LCALL SoftUART_GetByte
MOV @R1,UARTData
INC R1
DJNZ CdDataCount,ReadCdLoop2
MOV A,5AH
CJNE A,#12H,ReadCd_Err
MOV CdStatus,#01H
AJMP ReadCd_End
ReadCd_Err: MOV CdStatus,#00H
ReadCd_End: RET
Write_Cd:
MOV CdStatus,#00H
MOV SendCdData + 0, #3CH
MOV SendCdData + 1, #13H
MOV SendCdData + 2, #01H
MOV SendCdData + 3, #67H
MOV SendCdData + 4, BLOCKNUMBER
MOV SendCdData + 5, #00H
MOV SendCdData + 6, #00H
MOV SendCdData + 7, #00H
MOV SendCdData + 8, #00H
MOV SendCdData + 9, #00H
MOV SendCdData + 10, #00H
MOV SendCdData + 11, #0FFH
MOV SendCdData + 12, #00H
MOV SendCdData + 13, #00H
MOV SendCdData + 14, #00H
MOV SendCdData + 15, #00H
MOV SendCdData + 16, #00H
MOV SendCdData + 17, #00H
MOV SendCdData + 18, #00H
MOV SendCdData + 19, #00H
MOV SendCdData + 20, #00H
MOV DataLength,#21
LCALL XORCheck
MOV SendCdData + 21, A
MOV SendCdData + 22, #0DH
MOV CardDataCount,#23
MOV R1,#SendCdData
WriteCdLoop1:
MOV UARTData,@R1
INC R1
LCALL SoftUART_PutByte
DJNZ CdDataCount,WriteCdLoop1
MOV CadDataCount,#6
MOV R1,#ReciCdData
WriteCdLoop2:
LCALL SoftUART_GetByte
MOV @R1,UARTData
CJNE @R1,#0DH,WriteCdLoop3
AJMP WriteCdLoop4
WriteCdLoop3:
INC R1
DJNZ CdDataCount,WriteCdLoop2
WriteCdLoop4:
XCH A,CdDataCount
CJNE A,#01H,WriteCd_Err
MOV CdStatus,#01H
AJMP WriteCd_End
WriteCd_Err:
MOV CdStatus,#00H
WriteCd_End:
RET
[責任編輯:田吉捷]endprint