接觸式IC卡讀寫實(shí)驗(yàn)
一. 實(shí)驗(yàn)?zāi)康?br>了解接觸式IC 卡的知識(shí),學(xué)會(huì)如何根據(jù)時(shí)序邏輯圖編寫實(shí)用程序。
二. 實(shí)驗(yàn)設(shè)備及器件
IBM PC 機(jī) 一臺(tái)
DP-51PROC 單片機(jī)綜合仿真實(shí)驗(yàn)儀 一臺(tái)
三. 實(shí)驗(yàn)內(nèi)容
根據(jù)IC 卡的讀寫時(shí)序圖編寫程序,實(shí)現(xiàn)IC 卡(SLE4442)的讀寫。
四. 實(shí)驗(yàn)要求
根據(jù)IC 卡的時(shí)序圖編寫51 單片機(jī)程序讀寫邏輯加密IC 卡(SLE4442)讀寫程序。
五、實(shí)驗(yàn)線路與實(shí)驗(yàn)原理
接觸式IC 卡的觸點(diǎn)定義遵循ISO7816規(guī)定, IC 卡8 個(gè)觸點(diǎn)分布位置如圖3.23
所示,對(duì)應(yīng)著DP-51PROC 單片機(jī)綜合仿真實(shí)驗(yàn)儀“D8IC 卡” 區(qū)IC 卡座上方的引線。
本實(shí)驗(yàn)使用的是SLE4442卡, SLE4442 的觸點(diǎn)安排見(jiàn)圖3.24。
圖3.24 IC 卡觸點(diǎn)分布圖 圖3.25 SLE4442 的觸點(diǎn)安排
本實(shí)驗(yàn)SLE4442 卡與單片機(jī)的引腳連線關(guān)系見(jiàn)表3.4。
表3.4 SLE4442 與單片機(jī)引腳連線
單片機(jī) 實(shí)驗(yàn)儀板上對(duì)應(yīng)引線 SLE4442 引腳
P1.0 TP1 I/O
P1.1 TP4 CLK
P1.2 TP3 RST
下面介紹SLE4442 的有關(guān)知識(shí)
5.1 概述
SLE4442 是德國(guó)西門子(SIMENS)公司設(shè)計(jì)的邏輯加密存儲(chǔ)卡。它具有2K 位的存儲(chǔ)
容量和完全獨(dú)立的可編程代碼存儲(chǔ)器(PSC)。內(nèi)部電壓提升電路保證了芯片能夠以單+5V
電壓供電,較大的存儲(chǔ)容量能夠滿足通常應(yīng)用領(lǐng)域的各種需要。因此是目前國(guó)內(nèi)應(yīng)用較多的一種IC 卡芯片。芯片采用多存儲(chǔ)器結(jié)構(gòu),2 線連接協(xié)議(串行接口滿足ISO7816 同步傳送
協(xié)議),NMOS 工藝技術(shù),每字節(jié)的擦除/寫入編程時(shí)間為2.5ms。存儲(chǔ)器具有至少10000
次的擦寫周期,數(shù)據(jù)保持時(shí)間至少10 年。
SLE4442 IC 卡主要包括三個(gè)存儲(chǔ)器 :
(1)256x8 位EEPROM 型主存儲(chǔ)器。地址0~31 為保護(hù)數(shù)據(jù)區(qū),該區(qū)數(shù)據(jù)讀出不受
限制,寫入受保護(hù)存儲(chǔ)內(nèi)部數(shù)據(jù)狀態(tài)的限制。當(dāng)保護(hù)存儲(chǔ)器中第N 位(N=0~31)為1 時(shí),
對(duì)應(yīng)主存儲(chǔ)器中第N 個(gè)字節(jié)允許進(jìn)行擦除和寫入操作。地址32~255 后223 字節(jié)為應(yīng)用
數(shù)據(jù)區(qū),數(shù)據(jù)讀出不受限制,擦除和寫入受加密存儲(chǔ)器數(shù)據(jù)校驗(yàn)結(jié)果的影響。這種加密校驗(yàn)
的控制是對(duì)整個(gè)主存儲(chǔ)器實(shí)施的(即包括保護(hù)數(shù)據(jù)區(qū)和應(yīng)用數(shù)據(jù)區(qū))。
(2)32 x1 位PROM 型保護(hù)存儲(chǔ)器。一次性編程以保護(hù)主存儲(chǔ)器保護(hù)數(shù)據(jù)區(qū),防止
一些固定的標(biāo)識(shí)參數(shù)被改動(dòng)。保護(hù)存儲(chǔ)器同樣受加密存儲(chǔ)器數(shù)據(jù)校驗(yàn)結(jié)果的影響。
(3)4x8 位EEPROM 型加密存儲(chǔ)器。第0 字節(jié)為密碼輸入錯(cuò)誤計(jì)數(shù)器(EC)。EC 的
有效位 是低三位,芯片初始化時(shí)設(shè)置成“111”。這一字節(jié)是可讀的。EC 的1,2,3 字節(jié)
為參照字存儲(chǔ)區(qū)。這3 個(gè)字節(jié)的內(nèi)容作為一個(gè)整體被稱為可編程加密代碼(PSC)。其讀出,
寫入和擦除均受自身“比較”操作結(jié)果的控制。
圖3.26 SLE4442卡的內(nèi)部結(jié)構(gòu)圖
5.2 傳送協(xié)議
(1) 復(fù)位和復(fù)位響應(yīng)
圖3.27 復(fù)位時(shí)序圖
復(fù)位和復(fù)位響應(yīng)是根據(jù)ISO7816-3 標(biāo)準(zhǔn)來(lái)進(jìn)行的。在操作期間的任意時(shí)候都可以復(fù)
位。開始,地址計(jì)數(shù)器隨一個(gè)時(shí)鐘脈沖而被設(shè)置為零。當(dāng)RST 線從高狀態(tài)(H)置到低狀態(tài)
(L)時(shí),第一個(gè)數(shù)據(jù)位(LSB)的內(nèi)容被送到I/O 上。若連續(xù)輸入32 個(gè)時(shí)鐘脈沖,主存儲(chǔ)器中
的前四個(gè)字節(jié)單元中的內(nèi)容被讀出。在第33 個(gè)脈沖的下降沿,I/O 線被置成高狀態(tài)而關(guān)閉。
(2)命令模式
復(fù)位響應(yīng)以后,芯片等待著命令。每條命令都以一個(gè)“啟動(dòng)狀態(tài)”開始。整個(gè)命令包括
3 個(gè)字節(jié)。隨后緊跟著一個(gè)附加脈沖并用一個(gè)“停止?fàn)顟B(tài)”來(lái)結(jié)束操作。
啟動(dòng)狀態(tài):在CLK 為高狀態(tài)(H 狀態(tài))期間,I/O 為下降沿時(shí)為啟動(dòng)狀態(tài)。
停止?fàn)顟B(tài):在CLK 為高狀態(tài)(H 狀態(tài))期間,I/O 為上升沿時(shí)為停止?fàn)顟B(tài)。
在接受一個(gè)命令之后,有兩種可能的模式:輸出數(shù)據(jù)模式(即讀數(shù)據(jù))和處理數(shù)據(jù)模式。
圖3.28 命令模式的時(shí)序圖
(3) 輸出數(shù)據(jù)模式
這種模式是將IC 卡芯片中的數(shù)據(jù)傳送個(gè)外部設(shè)備接口(IFD)的一種操作。
圖3.29 輸出數(shù)據(jù)模式的時(shí)序圖
在第一個(gè)CLK 脈沖的下降沿之后,I/O 線上的第一位數(shù)據(jù)變?yōu)橛行?。隨后每增加一個(gè)
時(shí)鐘脈沖,芯片內(nèi)部的一位數(shù)據(jù)被送到I/O 線上。 數(shù)據(jù)的發(fā)送從每個(gè)字節(jié)的最低位(LSB)
開始。當(dāng)所需要的最后一個(gè)數(shù)據(jù)送出以后,需要在附加一個(gè)時(shí)鐘脈沖來(lái)把I/O 置成高狀態(tài),
以便接受新的命令。在輸出數(shù)據(jù)期間,任何“啟動(dòng)狀態(tài)”和“停止?fàn)顟B(tài)”均被屏蔽掉。
(4)處理數(shù)據(jù)模式
這種模式是對(duì)IC 芯片作內(nèi)部處理。
圖3.30 處理模式的時(shí)序圖
芯片在第一個(gè)脈沖的下降沿將I/O 線從高狀態(tài)拉到低狀態(tài)并開始處理。此后芯片在內(nèi)
部連續(xù)計(jì)時(shí)計(jì)數(shù),直到低n 個(gè)時(shí)鐘脈沖之后的附加一個(gè)時(shí)鐘脈沖的下降沿I/O 線再次置高,
完成芯片的處理過(guò)程。在整個(gè)處理過(guò)程中I/O 線被鎖定成低狀態(tài)。
5.3 SLE4442 卡的應(yīng)用
1. 芯片的復(fù)位方式
(1) 外部復(fù)位:SLE4442 時(shí)基于同步復(fù)位響應(yīng)的傳送協(xié)議。芯片的復(fù)位時(shí)序如前述。
(2) 加電復(fù)位:在把操作電壓連接到Vcc 段之后,芯片內(nèi)部進(jìn)行復(fù)位操作。I/O 線被
置為高狀態(tài)。必須在對(duì)任意地址進(jìn)行讀操作或做一個(gè)復(fù)位響應(yīng)操作之后才可以進(jìn)行數(shù)據(jù)交
換。
(3) 中止:在CLK 為低狀態(tài)期間,如果RST 置為高狀態(tài),則任何操作均無(wú)效。I/O 線
被鎖定到高狀態(tài)。需要一個(gè)最小維持時(shí)間tres=5Us 之后,芯片才能接受新的復(fù)位,中止
狀態(tài)的時(shí)序關(guān)系如圖3.31。中止?fàn)顟B(tài)之后,芯片又準(zhǔn)備下一個(gè)操作。
圖3.31 中止時(shí)序圖
芯片的操作命令
命令格式:
(1) 每條命令包含三個(gè)字節(jié),其排列順序如下:
表3.5 命令格式
(2) SLE4442 芯片具有七種命令,其格式和功能見(jiàn)表3.6。
注意: 每個(gè)字節(jié)來(lái)說(shuō)總是從最低LSB 開始讀出。寫入時(shí)首先傳送的也是字節(jié)的最低為
(LSB)。對(duì)保護(hù)存儲(chǔ)器進(jìn)行修改時(shí),輸入數(shù)據(jù)必須與原有數(shù)據(jù)相等,才能正確保護(hù)。
比較校驗(yàn)數(shù)據(jù)流程如下。
圖3.32 比較校驗(yàn)數(shù)據(jù)的程序流程圖
六 實(shí)驗(yàn)步驟
1. 在DP-51PROC 單片機(jī)綜合仿真實(shí)驗(yàn)儀上按表3.4(SLE4442 與單片機(jī)引腳連線)
在A2 區(qū)和D6 區(qū)之間連接好IC 卡與單片機(jī)之間的連線。
2. 將SLE4442 卡觸點(diǎn)朝下插入IC 卡座中。
3. 運(yùn)行 ” SLE4442 實(shí)驗(yàn)程序”(實(shí)驗(yàn)程序一)。
4. 運(yùn)行C51 開發(fā)環(huán)境觀察程序運(yùn)行結(jié)果。
實(shí)驗(yàn)程序一、從主存儲(chǔ)區(qū)的0 地址讀8 個(gè)字節(jié)
ORG 8000H
AJMP MAIN
ORG 8100H
MAIN:
MOV SP,#60H ;設(shè)置棧底
Read_Insert_Card:
MOV ByteNum, #08H
MOV StartAdr, #00H ;從主存儲(chǔ)區(qū)的0 地址讀8 個(gè)字節(jié)
LCALL ReadCard
JMP Read_Insert_Card
$INCLUDE(SLE4442.INC) ;包含SLE4442 驅(qū)動(dòng)程序
;
END
在JMP Read_Insert_Card 處設(shè)置斷點(diǎn),觀察RecBuf 的內(nèi)容, RecBuf 的定義見(jiàn)
SLE4442.INC 文件。LE4442.INC 的源碼及注釋請(qǐng)見(jiàn)SLE4442. INC 文件.
實(shí)驗(yàn)程序二、 從0x20 地址開始寫入2 個(gè)數(shù)據(jù)0x55 和0x66, 再讀出來(lái), 由于
SLE4442 寫主存儲(chǔ)器時(shí)需要驗(yàn)證密碼, 所以執(zhí)行下面的程序時(shí)請(qǐng)確保你SLE4442 卡的
密碼的正確性, 如果密鑰錯(cuò)誤,你的SLE4442 校驗(yàn)三次便會(huì)鎖死報(bào)廢。
ORG 8000H
AJMP MAIN
ORG 8100H
MAIN:
MOV SP,#60H ;設(shè)置棧底
Write_Read_Card:
MOV R0,#PSWD ;密碼緩沖區(qū)首址
MOV @R0,#0x11
INC R0
MOV @R0,#0x22
INC R0
MOV @R0,#0x33 ;輸入密碼:填充密碼緩沖區(qū)
LCALL CheckPassword ;校驗(yàn)密碼
JNZ WRExit ;如果校驗(yàn)不成功,退出
;密碼校驗(yàn)成功,進(jìn)入寫卡程序
MOV R0,#WriteBuf ;WriteBuf 為寫卡緩沖區(qū)首址
MOV @R0,#0x55
INC R0;
MOV @R0,#0x66 ;填充寫緩沖區(qū)
MOV ByteNum,#0x02
MOV StartAdr,#0x20
LCALL WriteCard ;調(diào)用寫卡子程序
JNZ WRExit ;如果寫不成功,退出
MOV ByteNum,#0x02 ;下面讀出剛剛寫入的數(shù)據(jù)
MOV StartAdr,#0x20
LCALL ReadCard
;如果讀成功,才可以執(zhí)行這個(gè)循環(huán),在此設(shè)置斷點(diǎn),
JZ Write_Read_Card
;觀察讀緩沖區(qū)內(nèi)容
WRExit:
MOV A,#00H ;在此設(shè)置斷點(diǎn)
$INCLUDE(SLE4442.INC) ;包含SLE4442 驅(qū)動(dòng)程序
;
END
請(qǐng)?jiān)贘Z Write_Read_Card 語(yǔ)句處設(shè)置斷點(diǎn),在讀成功時(shí)可以觀察讀緩沖區(qū)的數(shù)
據(jù)。在MOV A, #00H 語(yǔ)句處設(shè)置斷點(diǎn),這樣當(dāng)發(fā)生錯(cuò)誤時(shí)程序不亂跑。
七、實(shí)驗(yàn)思考題
(1) 如果單片機(jī)的晶振頻率選用24MHz,程序應(yīng)該做那些修改,才能正確讀寫
SLE4442 卡。
(2) 編程序,根據(jù)SLE4442 的時(shí)序圖用C 語(yǔ)言編寫讀寫程序。
評(píng)論