邏輯加密存儲卡芯片AT88SC1604卡的應用
文章出處:http://psychicreadingswithdeb.com 作者:北京長(cháng)空機械有限責任公司 秦嚴定 王麗霞 人氣: 發(fā)表時(shí)間:2011年09月15日
[文章內容簡(jiǎn)介]:本文介紹了目前應用較為廣泛的AT88SC1604邏輯加密卡的特點(diǎn)和工作原理,同時(shí)給出了通過(guò)單片機控制操作IC卡的的應用實(shí)例及程序。
前言
IC卡按結構劃分,可分為存儲器卡和微處理器卡(CPU card)兩大類(lèi)。邏輯加密卡與普通存儲卡相比,內部結構較復雜,其存儲區可以分成卡片設置區和應用區??ㄆO置區內存放與卡片廠(chǎng)商及發(fā)卡者相關(guān)代碼和卡片密碼;應用區又可以根據需要分為不同的分區。邏輯加密卡的安全性相對較高,體現在:卡片設立主密碼、每個(gè)應用分區具有各自獨立的操作密碼。邏輯加密卡主要控制作用是:對數據存儲區開(kāi)放/關(guān)閉的控制;對數據存儲區讀/寫(xiě)的控制;對數據存儲區擦除操作的控制以及對密碼校驗和錯誤次數計數及鎖閉功能控制。
AT88SC1604卡的工作原理
AT88SC1604是由美國ATMEL公司設計的邏輯加密存儲卡芯片。它具有15704位的存儲容量,是目前邏輯加密存儲卡中容量較大的一種產(chǎn)品芯片。
芯片特點(diǎn)
(1) AT88SC1604芯片屬于單存儲器多邏輯分區結構。主存儲器除劃分了特定的標志數據區和控制數據區之外,還將應用數據區分成四個(gè)完全隔離的子區,并在每個(gè)子區中配備了各自的讀、寫(xiě)控制標志和寫(xiě)入/擦除密碼以及密碼輸入錯誤計數器等邏輯控制。
(2) 芯片為串行傳輸方式,并滿(mǎn)足ISO7816-3同步傳輸協(xié)議。
(3)芯片采用低功耗的CMOS工藝制造,每字位的讀取時(shí)間為 s,寫(xiě)周期為5ms。
(4) 芯片內部的存儲單元具有至少10000次的擦除/改寫(xiě)循環(huán)次數。數據保存期為10年。
芯片存儲分區結構及定義
AT88SC1604芯片分為制造商代碼區、發(fā)行商代碼區、用戶(hù)安全密碼區、用戶(hù)密碼比較計數區、個(gè)人代碼區以及四個(gè)應用區。每個(gè)應用區都由密碼區,密碼比較計數區,擦除密碼區和擦除密碼比較計數區、應用數據區和存儲器測試區組成。
(1) 制造商代碼區(FZ)
該區里記錄的卡芯片生產(chǎn)商的特定信息(例如:生產(chǎn)批號、日期、以及特別制定的特征代碼),由制造商在芯片出廠(chǎng)前寫(xiě)入。在控制本區的熔絲(FUSHl)沒(méi)有熔斷時(shí),該區的存儲單元可以象普通的EEPROM存儲單元一樣進(jìn)行擦除和改寫(xiě)。一旦熔絲熔斷,所寫(xiě)入的制造商代碼就不可再更改。
(2) 發(fā)行商代碼區(IZ)
該區用于記錄卡片發(fā)行商的特定信息(例如:發(fā)行批號、日期、地區范圍編號以及特定用戶(hù)編號等特征代碼)。當控制本區的熔絲沒(méi)有熔斷時(shí),該區的存儲單元內容可以自由的擦除或改寫(xiě)。在個(gè)人化處理過(guò)程完成之后,控制該區的熔絲(FUSH2)熔斷,即可將注入的“發(fā)行商代碼”完全固化。這一代碼也是識別卡片的真偽,區分卡片應用類(lèi)別的重要標識。
(3) 個(gè)人代碼區(CPZ)
該區用于存放個(gè)人身份標識數據。該區使用上受芯片的“用戶(hù)密碼”的保護。當“用戶(hù)密碼”比較成功,該區可讀可寫(xiě)可擦除?!坝脩?hù)密碼”比較不成功,該區只能讀而不能寫(xiě)入和擦除。
(4) 用戶(hù)密碼區(SC)
這個(gè)密碼區是整個(gè)存儲器的“總控制開(kāi)關(guān)”。使用前,由授權持卡人預先輸入的一個(gè)安全代碼作為“參照字”儲存在這個(gè)存儲區里。使用時(shí),必須輸入一個(gè)“校驗密碼”。芯片將輸入的“校驗密碼”與內部存儲器的“參照字”一一比較。如果比較結果一致,IC卡將開(kāi)放整個(gè)芯片儲存器(包括各分區的控制密碼和各應用數據區)。各區的“安全密碼”區SCn(n=l,2,3,4)與SC的作用是完全類(lèi)似的。
對于各分區的密碼區SCn (n=1,2,3,4)來(lái)說(shuō),其比較操作要受到對應“應用區密碼”比較計數器(SnAC)的計數控制。當連續8次輸入密碼錯誤,SCn將被鎖死。
(5) 密碼比較計數區(SCAC)
該區對連續輸入的錯誤密碼的次數進(jìn)行累計。當連續8次不正確的比較操作之后,芯片將被鎖死。芯片被鎖死之后,將拒絕任何的擦除、寫(xiě)入和比較的操作命令。
該區是8位長(cháng),按位寫(xiě)入方式操作。在芯片初始化時(shí)是全“1”狀態(tài),即讀出值為“FFH”。在每次比較輸入的密碼時(shí),先按從高位到低位的順序找第一個(gè)為“1”的位,將此位寫(xiě)“0”,然后將新輸入的“校驗密碼”與原存儲在SC區的“參照字”進(jìn)行比較。比較操作本身由芯片內部自行完成,而比較結果則通過(guò)置SV標志來(lái)判別,即比較成功時(shí)SV被置“1”。比較不成功,SV保持原來(lái)的“0”狀態(tài)。在連續8次比較錯誤過(guò)程中每次比較操作之后計數器的計數值分別為“7FH”、“3FH”、“1FH”、“0FH”、“07H”、“03H”、“01H”、“00H”。當計數器為“00H”后,后續的比較操作命令由于無(wú)法在“SCAC”區中找到一個(gè)為“1”的位,因而芯片拒絕繼續執行比較操作。
SnAC(n=1,2,3,4)的作用與SCAC是類(lèi)似的。操作控制也完全一樣。只是SCAC是限制對SC區的比較操作。而SnAC則限制對SCn區的比較操作。SCAC的控制級別最高。當SCAC為“00H”后,芯片內部封鎖了對SC區的比較操作,從而使對SCn的比較也被禁止。如果SCAC為非“00H”值,在對SC區的比較密碼操作成功之后,SCn能否進(jìn)行比較操作就由SnAC區的狀態(tài)值來(lái)決定。SnAC區在連續8次比較輸入過(guò)程中,每次比較操作之后計數器的計數值與SCAC的8個(gè)值一樣。(即分別為“7FH”、“3FH”、“1FH”、“0FH”、“07H”、“03H”、“OlH”、“00H”)當SnAC為“00H”時(shí),則“應用n區”將被鎖死。
(6)擦除密碼區(EZn ,n=l.2,3,4)
該區用于存儲擦除應用區操作的控制密碼。這些密碼一般由發(fā)行商使用。在個(gè)人化處理時(shí)輸入的最后一組“擦除密碼”,在芯片熔絲FUSE2熔斷之后將使“擦除密碼”保存在該區內。該區不再能讀出、寫(xiě)入和擦除,只能進(jìn)行比較操作。在使用過(guò)程中如需對應用區進(jìn)行擦除操作,都必須首先對相應的EZ區輸送一個(gè)“擦除密碼”與之比較,在“擦除密碼比較計數器”不為“00H”的情況下,如果相比較的兩代碼完全一致,則相應的應用區的單元允許擦除,否則將禁止執行擦除操作。
(7) 擦除密碼比較計數區(EnAC ,n=l,2,3,4)
擦除密碼比較計數區的作用與SCAC的作用相類(lèi)似。它對各應用區擦除密碼連續輸入錯誤的次數進(jìn)行累計。最多連續8次不正確的密碼比較之后,該區所控制的應用區的擦除操作即被鎖死,從而導致該應用區有可能成為只讀和允許單次寫(xiě)入的狀態(tài)。
(8) 應用數據區(AZn ,n=1,2,3,4)
該區主要給用戶(hù)使用。用于存儲系統的相關(guān)數據記錄和卡片標識等信息。應用數據區的寫(xiě)入與讀出分別由該區的前兩位Pn和Rn以及SV標志的狀態(tài)控制,擦除操作則由該區的擦除密碼控制。AT88SC1604設計了四個(gè)完全隔離的分區,其中1至3分區的單元容量分別是4K位、第4分區的單元容量為3.6K位。
(9) 存儲區測試區(MTZ)
該區主要用于芯片生產(chǎn)后對EEPROM單元陣列進(jìn)行各項性能測試該區不受任何控制區狀態(tài)和標志狀態(tài)的保護,允許對這個(gè)區進(jìn)行讀出、寫(xiě)人和擦除操作,但不能進(jìn)行比較操作。
應用實(shí)例
基于上述1604芯片的特點(diǎn),在石化系統的加油電路設計中,我們利用單片機芯片89C2051與IC卡電路組成一個(gè)獨立系統,控制IC卡芯片的各項操作,該系統通過(guò)標準RS232通訊接口,與主控制板實(shí)現數據交換,這種電路設計在硬件方面兼容性較好,只要通過(guò)協(xié)調雙方的IC卡通訊協(xié)議,可與任何帶有RS232接口的控制板或微機相連接。
單片機芯片89C2051的6個(gè)端口通過(guò)IOC卡座與IC卡相連接,P1.2口控制IC卡5V電源的通斷,上電時(shí)單片機芯片處于復位狀態(tài), 6個(gè)端口均輸出“1”,IC卡電源處于斷開(kāi)狀態(tài),ICSW為IC卡的檢測端,當IC卡插入后,該端口與地相接,P1.3口檢測到IC 卡已插入卡座,即接通IC卡電源,IC卡操作完畢后,切斷IC卡電源,并提示用戶(hù)可以拔卡。單片機芯片其他4個(gè)端口在接通IC卡電源后,根據對卡操作的需要,對IC卡進(jìn)行復位、讀卡、校對密碼、擦卡、寫(xiě)卡等操作。
硬件電路
芯片的操作模式時(shí)序及設計程序
AT88SCl604芯片的操作模式有五種。它們是通過(guò)配PGM、RST、CLK等引腳信號及內部地址計數器(IAC)的狀態(tài)組合來(lái)實(shí)現。
(1) 芯片復位操作: AT88SCl604有兩種復位方式:上電復位和控制復位。
上電復位: 上電復位是當芯片加電時(shí)的最初狀態(tài)。上電復位屬于芯片
內部復位。它將使芯片內部所有的隱含標志復位到0狀態(tài)。并使地址計數器復位到0位。
控制復位: 當CLK為低時(shí),在RST腳上的一個(gè)下降沿將便芯片產(chǎn)生復位操作??刂茝臀皇菍⒌刂酚嫈灯鲝臀坏?位,而不影響任何內部標志的狀態(tài)。
注:1)RST為高時(shí)禁止計數
2)在CLK端降低之后,延遲一個(gè)復位維持時(shí)間Trh(min 0.1 s)RST端復位(下降沿),同時(shí)地址計數器清零。地址計數器清零后延遲一個(gè)“數據復位有效時(shí)間”Tdvr(max 2 s)第0位單元的數據被送上I/O線(xiàn)。
FWZCX: CLR ICPGM ;復位子程序
NOP
SETB ICREST
NOP
SETB ICSDA
NOP
CLR ICCLK ;時(shí)鐘端清0
NOP
CLR ICREST ;復位端清0
NOP
RET
?。?)讀出操作: 在進(jìn)行讀出操作時(shí),必須保證使RST腳和PGM腳同時(shí)保持為低。如果對芯片各密碼控制區進(jìn)行讀出操作,只能是在FUSE2未熔斷且SV標志“1”時(shí)才能進(jìn)行。
如果對芯片各標識數據區進(jìn)行讀出操作,除FZ和IZ區外,需要使SV標志置“1”后才能執行。
如果對芯片各應用數據區進(jìn)行讀出操作,需要在SV=1且Rn=1(n=1,2,3,4)狀態(tài)下才能執行。
注:在CLK的下降沿時(shí),地址計數器加1,地址計數器當前所指的地址單元的數據被輸出到I/O線(xiàn)上。因此,在整個(gè)時(shí)鐘周期Tdk期間,包含了地址加1(INC)和讀出(REA)兩項操作。
讀IC數據子程序(R2:需讀IC卡字節數,R0:數據區存放低位首地址)
RICDAZ: MOV A,#KXXDZ ;卡信息地址送A
LCALL SADR ;尋卡地址
RICDA: MOV R3,#08
RICDA1: SETB ICSDA
NOP
MOV C,ICSDA ;位讀到A
RLC A
SETB ICCLK
NOP
CLR ICCLK
NOP
DJNZ R3,RICDA1
MOV @R0,A ;8位數據送數據區
DEC R0
DJNZ R2,RICDA
RET
; 尋IC卡位地址子程序(調用前16進(jìn)制地址送ACC)
SADR: LCALL FWZCX
MOV B,#08
MUL AB ;計算位地址: 16進(jìn)制地址*8
MOV R4,A ;低位位地址送R4
MOV R5,B ;高位位地址送R5
JNZ SADR1 ;低位地址不為0轉
MOV A,R5
JZ SADR3
DEC R5
SADR1: SETB ICREST ;復位端置1
SETB ICSDA
CLR ICPGM
CLR ICCLK
CLR ICREST
SADR2: SETB ICCLK
SETB ICCLK
CLR ICCLK
CLR ICCLK
DJNZ R4,SADR2
MOV A,R5
JZ SADR3
DEC R5
SJMP SADR2
SADR3: RET
;
?。?)比較操作:在進(jìn)行比較操作時(shí),必須保證使RST腳和PGM腳同時(shí)保持為低。比較操作只能對芯片密碼控制區執行,且由芯片內部來(lái)判斷。在FUSE2未熔斷時(shí),只能在SV=0時(shí),對SC區進(jìn)行比較操作,對其它區的比較操作均為無(wú)效操作。SV=1時(shí),芯片不做任何比較操作。在FUSE2熔斷后,只能在SV=0時(shí),對SC區進(jìn)行比較操作,對其它區的比較操作均為無(wú)效操作。
注:上述芯片密碼比較時(shí)序圖中是假設密碼計數器中前兩位為0,第三位尋到1的處理時(shí)序。
有關(guān)芯片SC的時(shí)序關(guān)系如圖2~5圖所示:
從操作(B)到(F),地址計數器不變,密碼比較的過(guò)程是:
(A)比較安全密碼/擦除密碼序列
(B)在密碼輸入比較計數器中找出一位為“1”的位
(C)在這個(gè)為“1”的單元寫(xiě)“0”
(D)芯片輸出“0”
(E)如果比較成功,在PGM的上升沿安全密碼/擦除密碼的相應標志
(SV,Sn或En)被置“1”,同時(shí)安全密碼/擦除密碼輸入比較計數器
(SCAC,SnAC或EnAC)被擦除。
(F)如果擦除成功,相應安全密碼/擦除密碼標志被置“1”,芯片將輸出“1”,否則芯片輸出“0”。
(G)在CLK的下降沿,地址計數器加1,并輸出下一位的狀態(tài)。
比較用戶(hù)密碼子程序(地址0AH,0BH)
CPSC: MOV R0,#CMM+2
MOV R1,#06
MOV R2,#02
LCALL MVITI
MOV A,#0AH
LCALL SADR ;尋址
MOV R0,#06
LCALL BJMMRET
; 比較密碼程序
BJMM: CLR ICREST
CLR ICPGM
MOV R2,#02
BJMM1: MOV A,@R0
MOV R3,#08
BJMM2: RLC A
MOV ICSDA,C
NOP
SETB ICCLK
NOP
CLR ICCLK
NOP
DJNZ R3,BJMM2
INC R0
DJNZ R2,BJMM1
MOV R2,#08;查8位
BJMM4: SETB ICSDA
NOP
MOV C,ICSDA
JC BJMM5 ;是1轉
SETB ICCLK ;指向下一位
NOP
CLR ICCLK
NOP
DJNZ R2,BJMM4
LJMP BJMM8 ;計數器為00,卡鎖死轉
BJMM5: SETB ICPGM
NOP
CLR ICSDA ;寫(xiě)0
NOP
SETB ICCLK
NOP
CLR ICPGM
NOP
LCALL DELY5
CLR ICCLK
NOP
SETB ICSDA
NOP
MOV C,ICSDA
JNC BJMM6
LJMP BJMM7 ;未寫(xiě)入0,轉出錯
BJMM6: SETB ICPGM
NOP
SETB ICSDA ;寫(xiě)1(擦除)
NOP
SETB ICCLK
NOP
CLR ICPGM
NOP
LCALL DELY5
CLR ICCLK
NOP
SETB ICSDA
NOP
MOV C,ICSDA
NOP
SETB ICCLK
JNC BJMM7 ;擦除不成功(密碼錯)轉
SETB FGICG1 ;置已校對密碼標志
RET
BJMM7: CLR FGICG1 ;建密碼錯標記
RET
BJMM8: SETB FGICG2 ;置卡鎖死標志
RET
(4)寫(xiě)入操作:寫(xiě)入操作實(shí)際包含著(zhù)兩種:當寫(xiě)入的數據為“0”時(shí),本次操作稱(chēng)為“寫(xiě)入操作”。當寫(xiě)入的數據為“1”時(shí),本次操作稱(chēng)為“擦除操作”?!皩?xiě)入操作”可以按位進(jìn)行。但“擦除操作”只能按字節進(jìn)行。即使操作時(shí)只對單獨一位進(jìn)行擦除,但執行的結果將使這一位所在的字節的所有8位全部置成“1”。
對芯片的任何一個(gè)允許寫(xiě)入或擦除的區域,其執行寫(xiě)入和擦除的必要條件是芯片的SV標志為“1”狀態(tài)。
注:在CLK為低的狀態(tài)下,PGM端從“0”到“1”,并延時(shí)一段“編程建立時(shí)間”(Tspr)之后,CLK端從“0”到“1”(這時(shí)是寫(xiě)入/擦除操作的開(kāi)始),在此刻之前的Tds(數據建立時(shí)間)由外部向I/O線(xiàn)給出寫(xiě)入數據。CLK端在“1”狀態(tài)應至少保持5ms(Tchp)之后,CLK端從“1”到“0”(這時(shí)是寫(xiě)入/擦除操作的結束)。應特別注意結束寫(xiě)入操作的CLK端的下降沿并不會(huì )使地址計數器加1,而只是將剛寫(xiě)入的“數據”讀出, 以便外部驗證剛才的“寫(xiě)入操作”。
WICD: MOV A,#KDWDZ ;送擦除卡低位首地址
LCALL SADR ;尋位地址
MOV R2,#30 ;擦除30字節
LCALL CPESC3 ;擦除
MOV R0,#RAMDZ ;CPU的RAM中待寫(xiě)
入數據地址
MOV R2,#30 ;寫(xiě)入30字節
WICDA: MOV A,@R0
LCALL WICDAA
INC R0
DJNZ R2,WICDA
RET
; 向IC卡寫(xiě)入子程序
WICDAA: MOV R3,#08
WICDAB: RLC A
JC WICDAC ;該位為1,轉
SETB ICPGM ;打開(kāi)編程位
SETB ICPGM
MOV ICSDA,C
MOV ICSDA,C
SETB ICCLK
SETB ICCLK
CLR ICPGM ;關(guān)閉編程位
CLR ICPGM ;關(guān)閉編程位
LCALL DELY5 ;延時(shí)5MS
CLR ICCLK
CLR ICCLK
WICDAC: SETB ICCLK
SETB ICCLK
CLR ICCLK
DJNZ R3,WICDAB
RET
; 擦除應用區1
CPESC3: SETB ICPGM ;打開(kāi)編程位,擦除灰名
單入口
SETB ICPGM
SETB ICSDA
SETB ICSDA
SETB ICCLK
SETB ICCLK
CLR ICPGM ;關(guān)閉編程位
LCALL DELY5 ;延時(shí)5MS
CLR ICCLK
CLR ICCLK
SETB ICCLK
SETB ICCLK
CLR ICCLK
MOV R3,#07
CPESC4: SETB ICCLK
SETB ICCLK
CLR ICCLK
CLR ICCLK
DJNZ R3,CPESC4
DJNZ R2,CPESC3
RET
; 延時(shí)(R7)
DELY5: MOV R7,#0AH ;5毫秒延時(shí)
DELY: PUSH 07
DLY1: PUSH 07
DLY2: PUSH 07
DLY3: DJNZ R7,DLY3
POP 07
DJNZ R7,DLY2
POP 07
DJNZ R7,DLY1
POP 07
DJNZ R7,DELY
RET
結束語(yǔ)
隨著(zhù)IC卡技術(shù)的飛速發(fā)展,金融機構、國家機關(guān)、公司企業(yè)、教育部門(mén)等領(lǐng)域的需求越來(lái)越迫切,應用越來(lái)越廣泛。我們已在石化系統加氣站實(shí)現了使用IC卡進(jìn)行加氣的業(yè)務(wù),現將調試成功的部分實(shí)用子程序提供給大家,供同行朋友們參考。
本文關(guān)鍵詞:邏輯加密存儲卡,AT88SC1604
上一篇:雙界面卡的發(fā)展研究及其技術(shù)構架[ 09-15 ]
下一篇:使用32位MCU解決RFID智能標簽/智能卡系統設計難題[ 09-15 ]