電話:13691762133
手機(jī):13691762133
郵件:andy@ownlikes.cn
QQ:317779813
地址:深圳市龍華新區(qū)觀瀾大道35號(hào)1棟3樓
網(wǎng)址 : greezubamboo.cn
1.RFID高頻標(biāo)簽存儲(chǔ)結(jié)構(gòu)
S50卡分為16個(gè)扇區(qū),每個(gè)扇區(qū)由4塊(塊0、塊1、塊2、塊3)組成,我們也將16個(gè)扇區(qū)的64個(gè)塊按絕對地址編號(hào)為0~63,
說明:
● 第0扇區(qū)的塊0(即絕對地址0塊),它用于存放廠商代碼,已經(jīng)固化,不可更改。
● 每個(gè)扇區(qū)的塊0、塊1、塊2為數(shù)據(jù)塊,可用于存儲(chǔ)數(shù)據(jù)。
● 每個(gè)扇區(qū)的塊 3 為控制塊,包括了密碼 A、存取控制、密碼 B,對該數(shù)據(jù)塊操作要謹(jǐn)慎。
通信原理。命令由讀寫器發(fā)出,根據(jù)相應(yīng)區(qū)讀寫條件受數(shù)字控制單元的控制。
該實(shí)驗(yàn)平臺(tái)配備的RFID高頻模塊設(shè)有UART通信接口,波特率默認(rèn)為19200,1位起始位,8位數(shù)據(jù)位,1位停止位。UART工作在半雙工方式,即模塊接收指令后才會(huì)做出應(yīng)答。
通信命令格式如下:
前導(dǎo)頭:0xAABB,共兩個(gè)字節(jié),若數(shù)據(jù)域中也包含0xAA,那么模塊會(huì)自動(dòng)在它后面插入一個(gè)字節(jié)數(shù)據(jù)0,但是通信長度的值不變。
通信長度:去掉前導(dǎo)頭之外的通訊幀所有字節(jié)數(shù)(含通信長度字節(jié)本身)。
命令字:各種用戶可用命令
說明:錢包操作涉及的值都是低字節(jié)在前,值為四字節(jié)有符號(hào)數(shù);密鑰標(biāo)志設(shè)為0。
校驗(yàn)碼:去掉前導(dǎo)頭和校驗(yàn)碼字節(jié)之外,所有通信幀所含字節(jié)的異或值。
CPU發(fā)送命令幀之后,需要等待讀取返回值,返回值的格式如下:
正確:前導(dǎo)頭+通信長度+上次所發(fā)送的命令字+數(shù)據(jù)域+校驗(yàn)碼
錯(cuò)誤:前導(dǎo)頭+通信長度+上次所發(fā)送的命令字的取反+校驗(yàn)碼
實(shí)踐內(nèi)容及步驟
1.讀卡器連接
(1)用USB線將RFID高頻讀卡器連接到PC上,讀卡器的紅色電源指示燈亮。若PC彈出“發(fā)現(xiàn)新硬件”對話框,說明該P(yáng)C未安裝過PL2303驅(qū)動(dòng)(USB轉(zhuǎn)串口),驅(qū)動(dòng)文件位于“資料/usb_driver.rar”。
(2)運(yùn)行“RFID測試”軟件,右擊“我的電腦”,在“設(shè)備管理器”中查看PL2303驅(qū)動(dòng)對應(yīng)的串口號(hào)
(3)然后在“RFID測試”軟件的操作區(qū)對串口參數(shù)進(jìn)行設(shè)置:波特率—19200、數(shù)據(jù)位—8位、停止位—1奇偶校驗(yàn)—無,并打開串口。
2.讀卡(標(biāo)簽)類型
(1)將一張高頻標(biāo)簽放到RFID高頻讀卡器上面,綠色信號(hào)指示燈亮。打開“RFID測試”軟件的“RFID”界面,單擊“讀卡類型”命令,執(zhí)行結(jié)果如圖4-40所示。
(2)根據(jù)RFID高頻模塊通信協(xié)議和指令系統(tǒng)可知,在“發(fā)送區(qū)”的數(shù)據(jù)串中,“AA BB”為前導(dǎo)頭,“02”為通信長度,“19”為命令字(讀卡的類型),“1B”為“02 19 1B”這3個(gè)字節(jié)的校驗(yàn)碼。
(3)在“接收區(qū)”中收到的數(shù)據(jù)串中“AA BB”為前導(dǎo)頭,“04”為通信長度,“19”為命令字(與“發(fā)送區(qū)”中的命令字相同,說明剛才的指令執(zhí)行成功),“04 00”為數(shù)字域,即S50卡的編號(hào),“19”為“04 19 04 00”這4個(gè)字節(jié)的校驗(yàn)碼。
3.讀卡序列號(hào)
4.初始化錢包
(1)在“輸入?yún)^(qū)”選擇塊8作為“錢包”(除了進(jìn)行修改密碼操作以外不要選擇控制塊),“密碼”設(shè)為6個(gè)字節(jié)的0xFF,數(shù)據(jù)編輯框輸入100,然后發(fā)送“初始化錢包”命令,
(2)單擊“查看錢包”命令,返回的數(shù)據(jù)為“64 00 00 00”。錢包操作涉及的值是低字節(jié)在前,因此返回的數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制數(shù)為100,說明錢包初始化成功。
5.錢包充值
(1)在“輸入?yún)^(qū)”的“數(shù)據(jù)”第1個(gè)編輯框中輸入“300”,然后單擊“錢包充值”命令。
(2)單擊“查看錢包”命令,返回的數(shù)據(jù)為“90 01 00 00”,轉(zhuǎn)換成十進(jìn)制數(shù)為400,說明錢包充值成功。
6.錢包扣款
(1)在“輸入?yún)^(qū)”的“數(shù)據(jù)”第1個(gè)編輯框中輸入“50”,然后點(diǎn)擊“錢包扣款”命令。
7.讀數(shù)據(jù)塊
“輸入?yún)^(qū)”的塊號(hào)不變,“密碼”不變,單擊“讀數(shù)據(jù)塊”命令,返回的數(shù)據(jù)為“5E 01 00 00 A1 FE FF FF 5E 01 00 00 00 FF 00 FF”,共16個(gè)字節(jié)。如
8.寫數(shù)據(jù)塊
(1)“輸入?yún)^(qū)”的塊號(hào)不變,“密碼”不變,“數(shù)據(jù)”段的 4 個(gè)編輯框中輸入 0,然后單擊“寫數(shù)據(jù)塊”命令。
(2)單擊“讀數(shù)據(jù)塊”命令,返回的數(shù)據(jù)為0,說明數(shù)據(jù)寫操作成功。
9.修改密碼
S50卡的存儲(chǔ)空間是通過扇區(qū)進(jìn)行管理的,密碼存放在每個(gè)扇區(qū)的控制塊。因此我們修改密碼是相對扇區(qū)而言,不是針對某個(gè)塊。
(1)在“輸入?yún)^(qū)”中選擇扇區(qū)的控制塊塊號(hào)。塊號(hào)8所在的扇區(qū)編號(hào)為2,因此該扇區(qū)的控制塊塊號(hào)為11。密碼為默認(rèn)的6個(gè)字節(jié)FF。單擊“讀數(shù)據(jù)塊”命令
(2)假設(shè)密碼要修改為“01 02 03 04 05 06”,用這6個(gè)字節(jié)值將上一步讀出的數(shù)據(jù)串中前6個(gè)字節(jié)替換掉,組合成新的16字節(jié)數(shù)據(jù)串“01 02 03 04 05 06 FF 07 80 69 FF FF FF FF FF FF”。然后把這個(gè)數(shù)據(jù)串填入“輸入?yún)^(qū)”的數(shù)據(jù)編輯框中,最后單擊“修改密碼”命令。
(2)假設(shè)密碼要修改為“01 02 03 04 05 06”,用這6個(gè)字節(jié)值將上一步讀出的數(shù)據(jù)串中前6個(gè)字節(jié)替換掉,組合成新的16字節(jié)數(shù)據(jù)串“01 02 03 04 05 06 FF 07 80 69 FF FF FF FF FF FF”。然后把這個(gè)數(shù)據(jù)串填入“輸入?yún)^(qū)”的數(shù)據(jù)編輯框中,最后單擊“修改密碼”命令。
(3)在“輸入?yún)^(qū)”中選擇塊8,密碼改為舊密碼“FF FF FF FF FF FF”,然后單擊“讀數(shù)據(jù)塊”命令,如圖4-51所示。模塊返回的數(shù)據(jù)為“AA BB 02 DE DC”,命令字變?yōu)?xDE,即“讀數(shù)據(jù)塊”命令(0x21)的反碼,說明用以前舊的密碼進(jìn)行讀數(shù)據(jù)塊操作失敗。
(4)將“輸入?yún)^(qū)”中密碼改為新密碼“01 02 03 04 05 06”,然后再單擊“讀數(shù)據(jù)塊”命令,如圖4-52所示。數(shù)據(jù)塊8的16個(gè)字節(jié)數(shù)據(jù)被讀取出來,說明用新的密碼進(jìn)行讀數(shù)據(jù)塊操作成功。