李瑋+丁瑩亮
【摘 要】本款智能IC卡治療儀采用的讀寫(xiě)模塊WM-11T6。讀寫(xiě)模塊WM-11T6的軟件設(shè)計(jì)是智能IC卡治療儀設(shè)計(jì)中非常重要的一部分。本文章主要論述IC卡讀寫(xiě)模塊WM-11T6的軟件編程及IC卡讀寫(xiě)程序清單。
【關(guān)鍵詞】治療儀;軟件設(shè)計(jì);軟件清單
【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卡治療儀是為海南一家醫(yī)療設(shè)備生產(chǎn)廠商設(shè)計(jì)的,產(chǎn)品已經(jīng)投入市場(chǎng)。本款治療儀使用的是非接觸式IC卡充值計(jì)費(fèi)方式。本款治療儀在經(jīng)營(yíng)模式上進(jìn)行了創(chuàng)新,改變傳統(tǒng)用戶(hù)(醫(yī)院或個(gè)人)購(gòu)買(mǎi)整個(gè)產(chǎn)品的經(jīng)營(yíng)模式,變?yōu)橛脩?hù)只購(gòu)買(mǎi)產(chǎn)品的使用權(quán)的經(jīng)營(yíng)模式,也就是說(shuō)用戶(hù)不再是醫(yī)療設(shè)備的擁有者只是使用者。本款治療儀采用一機(jī)一卡管理模式:每臺(tái)設(shè)備都只有一個(gè)唯一的ID號(hào),治療儀的ID號(hào)與IC卡的ID號(hào)相統(tǒng)一,本機(jī)的IC卡對(duì)其他治療儀無(wú)效。使用治療儀時(shí),用戶(hù)將購(gòu)買(mǎi)的IC卡的全部金額一次性充入到設(shè)備中,IC卡被清空, 隨之失效。此款智能生物離子IC卡治療儀采用的讀寫(xiě)模塊WM-11T6,讀寫(xiě)模塊WM-11T6的軟件設(shè)計(jì)是智能IC卡治療儀設(shè)計(jì)中非常重要的一部分。
1 WM-11T6射頻讀寫(xiě)模塊簡(jiǎn)介
WM-11T6射頻讀寫(xiě)模塊采用的是最新Mifare技術(shù)的微型嵌入式非接觸式IC卡讀寫(xiě)模塊。內(nèi)部嵌有ISO14443 Type A協(xié)議解釋器,并且具有接收和射頻驅(qū)動(dòng)功能,還可實(shí)現(xiàn)簡(jiǎn)單的對(duì)MifareOne等卡片的讀寫(xiě)操作,最大讀寫(xiě)距離可達(dá)100mm(具體距離與卡片及天線的設(shè)計(jì)有關(guān))。
該模塊提供標(biāo)準(zhǔn)異步串行通訊接口和輸出TTL電平。用戶(hù)只需通過(guò)串行通訊發(fā)送相關(guān)指令,即可實(shí)現(xiàn)對(duì)卡片的所有操作,不必詳細(xì)了解非接觸IC卡讀寫(xiě)模塊的協(xié)議標(biāo)準(zhǔn)和底層驅(qū)動(dòng)。實(shí)物照片如圖1所示。
1.1 WM-11T6射頻讀寫(xiě)模塊基本參數(shù)
工作電壓:DC5V
工作電流:<100mA
通訊接口:RS232接口,TTL電平,波特率為9600 BPS無(wú)校驗(yàn)位,8位數(shù)據(jù)位,1位停止位)
適用卡型:Mifare One
數(shù)據(jù)通訊:106KBPS
射頻頻率:13.56MHz
操作距離:<100mm
工作溫度:-20℃ --- +65℃
存儲(chǔ)溫度:-40℃ --- +85℃
1.2 WM-11T6射頻讀寫(xiě)模塊管腳定義
該模塊尺寸為標(biāo)準(zhǔn)DIP32封裝 (41mm×18mm) ,其管腳定義為:
VCC:+5V RX:天線接收
GND:地 TX1:天線發(fā)送1
TXD:模塊發(fā)送(接單片機(jī)) TX2:天線發(fā)送2
RXD:模塊接收(接單片機(jī)) GND:天線地
1.3 天線的接口定義
天線接口定義與WM-11T6射頻讀寫(xiě)模塊一致:
RX:天線接收 TX1:天線發(fā)送1
TX2:天線發(fā)送2 GND:天線地
2 IC卡讀寫(xiě)模塊WM-11T6的軟件設(shè)計(jì)
2.1 IC卡操作流程
IC卡的操作流程必須按以下順序執(zhí)行:尋卡、密碼校驗(yàn)、讀或?qū)懣ā㈥P(guān)閉卡片,如果執(zhí)行過(guò)程中任何一個(gè)操作出現(xiàn)錯(cuò)誤,應(yīng)立即關(guān)閉對(duì)IC卡的操作。
2.2 尋卡模式
尋卡模式位有兩種: 00或01。如果采用“00”模式尋卡,執(zhí)行完關(guān)閉指令后,卡片必須離開(kāi)感應(yīng)區(qū)后,從新再進(jìn)入感應(yīng)區(qū)才能尋卡成功;如果采用“01”模式尋卡,執(zhí)行完關(guān)閉指令后,卡片不需要離開(kāi)感應(yīng)區(qū)也能尋卡成功。
2.3 通訊命令
電腦給WM-11T6模塊下傳命令需要通過(guò)RS232口,WM-11T6模塊收到命令后回傳結(jié)果給電腦。
通訊命令協(xié)議的內(nèi)容(以下所有數(shù)據(jù)都為十六進(jìn)制表示,其中BCC為命令字符串本字節(jié)之前的所有字節(jié)的異或校驗(yàn)和):
通訊測(cè)試:
下傳命令:3C 04 00 60 00 00? BCC 0D
成功返回:3C 01 01 BCC 0D
錯(cuò)誤返回:3C 01 00 BCC 0D
尋卡:
下傳命令:3C 04 01 70 00(尋卡模式00(IDLE)或01(ALL)) 00 BCC 0D
成功返回:3C 05 四字節(jié)卡號(hào) 00 BCC 0D
錯(cuò)誤返回: 3C 01 FF(錯(cuò)誤返回代碼) BCC 0D
其中:00尋卡模式要求操作的卡在讀寫(xiě)完成后要離開(kāi)感應(yīng)區(qū)才能再讀寫(xiě)。
01尋卡模式要求操作的卡在讀寫(xiě)完成后卡片只需關(guān)閉后又可讀寫(xiě)。
密碼驗(yàn)證:endprint
下傳命令:3C 0E 01 6C 六字節(jié)密碼 認(rèn)證模式(00-A/01-B) 絕對(duì)塊號(hào) 四字節(jié)卡號(hào) 校驗(yàn)位 0D
成功返回:3C 02 00 00 BCC 0D
錯(cuò)誤返回:3C 01 FF(錯(cuò)誤代碼) BCC 0D
其中:0為A密碼,1為B密碼
讀卡:3C 04 01 66 00(絕對(duì)塊號(hào)) 00 BCC 0D
成功返回:3C 12 00 DATA0~DATA15 BCC 0D
錯(cuò)誤返回:3C 01 FF(錯(cuò)誤返回代碼) BCC 0D
寫(xiě)卡:3C 13 01 67 00(絕對(duì)塊號(hào)) DATA0~DATA15 BCC 0D
成功返回:3C 02 00 00 BCC 0D
錯(cuò)誤返回:3C 01 FF(錯(cuò)誤返回代碼) BCC 0D
關(guān)閉卡片:3C 04 01 68 00 00 51 0D
正確返回:3C 02 00 00 3E 0D
錯(cuò)誤返回:3C 01 FF(錯(cuò)誤返回代碼)BCC 0D
2.4 操作注意事項(xiàng)
2.4.1 對(duì)IC卡控制區(qū)的讀寫(xiě)與數(shù)據(jù)的讀寫(xiě)相同,但是控制方式不同,需要注意在編程過(guò)程中不能寫(xiě)錯(cuò),否則可能會(huì)出現(xiàn)無(wú)法再對(duì)該區(qū)進(jìn)行操作的現(xiàn)象。
2.4.2 在每一個(gè)命令執(zhí)行后,下一個(gè)命令執(zhí)行前應(yīng)該增加不少于15ms的延時(shí)。
3 IC卡讀寫(xiě)程序清單
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
[責(zé)任編輯:田吉捷]endprint