<strike id="tpvd9"><dfn id="tpvd9"></dfn></strike>

        <em id="tpvd9"></em>

          <address id="tpvd9"></address>
            <dfn id="tpvd9"><sub id="tpvd9"></sub></dfn>

            <thead id="tpvd9"><noframes id="tpvd9">
            <ruby id="tpvd9"></ruby>

                  <thead id="tpvd9"></thead>
                  歡迎您訪(fǎng)問(wèn)鄭州興邦電子股份有限公司官方網(wǎng)站!
                  阿里巴巴誠信通企業(yè)
                  全國咨詢(xún)熱線(xiàn):40000-63966
                  興邦電子,中國水控機第一品牌

                  聯(lián)系興邦電子

                  全國咨詢(xún)熱線(xiàn):40000-63966

                  售后:0371-55132951/55132952

                  工廠(chǎng):河南省 鄭州市 高新區蓮花街電子電器產(chǎn)業(yè)園

                  ATMEL接觸式IC卡及開(kāi)發(fā)實(shí)例

                  文章出處:http://psychicreadingswithdeb.com 作者:?jiǎn)纹瑱C技術(shù)網(wǎng)&nbsp;&nbsp; 人氣: 發(fā)表時(shí)間:2011年09月17日

                  [文章內容簡(jiǎn)介]:ATMEL接觸式IC卡及開(kāi)發(fā)實(shí)例

                  目 錄

                  第一章 幾種常見(jiàn)的ATMEL接觸式IC卡的存儲結構及其保密特性 2
                  一、AT24C01A、AT24C02、AT24C04、AT24C08、AT24C16、AT24C32、AT24C64 2
                  二、AT88SC102、AT88SC1604、AT88SC1608、AT88SC153 3
                  1.AT88SC102加密卡 3
                  2.AT88SC1604加密卡 5
                  3.AT88SC1608加密卡 8
                  4.AT88SC153加密卡 12
                  三、AT45D041 16
                  第二章 接觸式IC卡的接口函數 19
                  一、函數列表(函數名, 簡(jiǎn)單說(shuō)明) 19
                  1.通用函數 19
                  2.ATMEL AT88SC102/AT88SC1604加密卡專(zhuān)用函數 19
                  3.ATMEL AT88SC1608及AT88SC153加密卡專(zhuān)用函數 20
                  4.ATMEL AT45D041 Flash存儲卡專(zhuān)用函數 20
                  二、函數說(shuō)明 21
                  附錄一:卡類(lèi)型預定義 29
                  附錄二:ICFOX.PLB測試例程 30
                  第三章 接觸式IC卡底層軟件開(kāi)發(fā)實(shí)例 31
                  一、IC卡操作底層函數 31
                  1.IC卡操作底層函數說(shuō)明: 31
                  2.IC卡低層通訊頭文件(Base.h) 32
                  二、AT24C64卡應用實(shí)例 32
                  1.AT24C64卡函數頭文件(AT24C64.h) 32
                  2.AT24C64卡函數 33
                  3.AT24C64卡應用例程(App24C64.c) 35

                  第一章 幾種常見(jiàn)的ATMEL接觸式IC卡的存儲結構及其保密特性
                  為了能夠使IC卡應用到自已的系統中,系統開(kāi)發(fā)公司的工程師應了解一些卡的基本技術(shù)資料,下面就ATMEL公司生產(chǎn)的接觸式IC卡在應用中常見(jiàn)的和性能比較好的型號做一簡(jiǎn)單介紹,希望能對IC卡的選型及開(kāi)發(fā)有所幫助。
                  ??1 AT24C01A、AT24C02、AT24C04、AT24C08、AT24C16、AT24C32、AT24C64
                  這幾個(gè)型號的IC卡為ATMEL存儲卡,是一種不具備加密功能的EEPROM卡,AT24C為系列號,數字部分為K位容量,分別為1K、2K、4K、8K、16K、32K、64K位。它的使用方法與EEPROM完全相同,存儲結構簡(jiǎn)單,只有讀寫(xiě)兩種操作功能,主要用于存放一些保密性要求不高的數據。
                  AT24C系列的工作頻率為1MHz(5V),1MHz(2.7V),400KHz(1.8V);工作電壓為5V±10%,根據要求最低可至1.8V;Icc電流讀最大為1mA,寫(xiě)最大為3mA;寫(xiě)/擦除次數為100萬(wàn)次;數據保持100年;工作溫度為0—70℃,根據要求可超過(guò)指定工作溫度;通訊協(xié)議符合ISO/IEC 7816-3同步協(xié)議,雙線(xiàn)串行接口。

                  存儲結構:

                  AT24C系列型號的后兩位數字為該型號的最大K位數(1K=1024),8位為1字節,最大字節存儲容量的算法為K位數×1024÷8。如:AT24C01A的最大存儲容量的1×1024÷8=128,其字節地址空間為0—127(16進(jìn)制為0x00—0x7F)。

                  下面的偽碼程序在A(yíng)T24C系列卡的ADDR地址開(kāi)始寫(xiě)LEN個(gè)字節,并且讀出校對。
                  Open(AT24Cxxx)
                  Write(ADDR,LEN,WDATA)
                  RDATA = Read(ADDR,LEN)
                  Close()
                  IF WDATA = RDATA THEN 寫(xiě)成功 ELSE 寫(xiě)失敗

                  下面的偽碼程序在A(yíng)T24C系列卡的ADDR地址開(kāi)始讀LEN個(gè)字節。
                  Open(AT24Cxxx)
                  RDATA = Read(ADDR,LEN)
                  Close()
                  二、AT88SC102、AT88SC1604、AT88SC1608、AT88SC153
                  這幾個(gè)型號的IC卡為ATMEL加密卡,采用CMOS低功耗技術(shù),具有傳輸代碼、生產(chǎn)代碼,密碼及錯誤計數器、熔絲保護等安全保護功能。存儲空間分成設置區和應用區兩大功能區,應用區又可分為不同的分區,每個(gè)區具有各自獨立的保密功能。從型號上看,AT88SC為系列號,最后一位數字為應用區分區數,分別為2、4、8、3個(gè)分區,中間的數字10、160、15為K位容量,分別為1K、16K、16K、1.5K位。其中不同應用分區另有自已的分區密碼。AT88SC1604又可分為等分區卡和不等分區卡兩種。
                  1.AT88SC102加密卡
                  AT88SC102加密卡的訪(fǎng)問(wèn)時(shí)間讀為2us/位,寫(xiě)為5ms/位;工作電壓為5V±10%;寫(xiě)/擦除次數為10萬(wàn)次;數據保持100年;工作溫度為-25—70℃;通訊協(xié)議符合ISO/IEC 7816-3同步協(xié)議。

                  存儲結構:
                  存儲分區 位地址 位數 字節地址 字節數
                  FZ 廠(chǎng)商代碼區 0-15 16 0-1 2
                  IZ 發(fā)行者區 16-79 64 2-9 8
                  SC 主密碼區 80-95 16 10-11 2
                  SCAC 主密碼錯誤計數區 96-111 16 12-13 2
                  CPZ 代碼保護區 112-175 64 14-21 8
                  AZ1 應用區一 176-687 512 22-85 64
                  EZ1 一區擦除密碼 688-735 48 86-91 6
                  AZ2 應用區二 736-1247 512 92-155 64
                  EZ2 二區擦除密碼 1248-1279 32 156-159 4
                  EAC2 二區擦除密碼錯誤計數 1280-1407 128 160-175 16
                  MTZ 測試區 1408-1423 16 176-177 2
                  注:擦、寫(xiě)是兩種不同的操作,擦是位寫(xiě)1操作,寫(xiě)是位寫(xiě)0操作。修改數據時(shí),只有先擦除才能再寫(xiě)數據。
                  在熔絲熔斷(FUSE2)前與熔絲熔斷后它的保密特性是不同的。

                  熔絲熔斷前的保密特性:
                  FZ:由ATMEL公司出廠(chǎng)時(shí)設置(FUSE1),只讀不可更改。ATMEL公司可以為批量用戶(hù)定制此代碼,以保證卡片的唯一性。
                  IZ:可讀。SC核對正確,IZ可以反復擦寫(xiě)。
                  SC:SC核對正確時(shí),SC可讀和擦寫(xiě),SC核對不正確時(shí),SC不能讀和擦寫(xiě)。
                  SCAC:初始值為4,SC核對每錯1次SCAC減1,SCAC等于0時(shí),卡自毀,如果SC核對正確SCAC恢復為初始值4。SCAC永遠可讀。
                  CPZ:為用戶(hù)標注,用于對卡中信息操作過(guò)程的標注,永遠可讀,SC核對正確后可擦寫(xiě)。
                  AZ1,AZ2;前2位為寫(xiě)讀保護位,即176位為AZ1寫(xiě)保護位(1PR),177位為AZ1讀保護位(1RD),736位為AZ2寫(xiě)保護位(2PR),737位為AZ2讀保護位(2RD)。 SC核對正確時(shí),AZn可讀(n代表1或者2,下同),如果SC核對不正確時(shí),nRD控制著(zhù)AZn的可讀性,即如果nRD=1時(shí),AZn可讀;如果nRD=0時(shí),AZn不可讀。
                  在熔絲熔斷(FUSE2)前,nPR不起作用,只要SC核對正確,AZn就可擦寫(xiě),
                  EZ1,EZ2:SC核對不正確時(shí),EZn不能讀和擦寫(xiě)。SC核對正確時(shí),EZn可讀和擦寫(xiě)。在熔絲熔斷(FUSE2)前,EZn不起什么作用。
                  EAC2:熔絲熔斷(FUSE2)前,EAC2不起什么作用。
                  MTZ:用于測試卡的擦寫(xiě)性能。任意條件下均可測試。

                  熔絲熔斷后的保密特性:
                  FZ:由ATMEL公司出廠(chǎng)時(shí)設置(FUSE1),只讀不可更改。ATMEL公司可以為批量用戶(hù)定制此代碼,以保證卡片的唯一性。
                  IZ:永遠可讀。但熔絲熔斷(FUSE2)后IZ內容被固化,IZ將永遠不能再改。
                  SC:不可讀,SC核對正確時(shí),SC可擦寫(xiě),SC核對不正確時(shí),SC不能擦寫(xiě)。
                  SCAC:初始值為4,SC核對每錯1次SCAC減1,SCAC等于0時(shí),卡自毀,如果SC核對正確SCAC恢復為初始值4。SCAC永遠可讀。
                  CPZ:為用戶(hù)標注,用于對卡中信息操作過(guò)程的標注,永遠可讀,SC核對正確后可擦寫(xiě)。
                  AZ1,AZ2;前2位為寫(xiě)讀保護位,即176位為AZ1寫(xiě)保護位(1PR),177位為AZ1讀保護位(1RD),736位為AZ2寫(xiě)保護位(2PR),737位為AZ2讀保護位(2RD)。 SC核對正確時(shí), AZn可讀(n代表1或者2,下同),如果SC核對不正確時(shí),nRD保護著(zhù)AZn的可讀性,即如果nRD=1時(shí),AZn可讀;如果nRD=0時(shí),AZn不可讀。
                  在熔絲熔斷(FUSE2)后,即使SC核對正確,也要看nPR是否為1,如果是0,AZn被寫(xiě)保護永遠不能寫(xiě)。
                  EZ1,EZ2:SC核對不正確時(shí),EZn不能讀和擦寫(xiě)。SC核對正確時(shí),EZn可讀和擦寫(xiě)。在熔絲熔絲熔斷(FUSE2)后,只有EZn核對正確,才能對AZn進(jìn)行擦除操作,同時(shí)不可能再對EZn進(jìn)行讀和擦寫(xiě)操作。
                  EAC2:熔絲熔斷(FUSE2)后,AZ2只有128次擦除機會(huì ),每擦1次計數減1。
                  MTZ:用于測試卡的擦寫(xiě)性能。任意條件下均可測試。

                  下面的偽碼程序在A(yíng)T88SC102卡完成初始化操作和在一應用區ADDR地址開(kāi)始寫(xiě)LEN個(gè)字節,并讀出校對。
                  Open(AT88SC102)
                  IF CheckSC(Pwd) = OK THEN 繼續 ELSE 非法卡
                  WriteCPZ(CPZ) ;可以寫(xiě)一些系統標識
                  UpdateSC(NewPwd)
                  SetZone(1)
                  UpdateEZ(NewEZ)
                  Erase(ADDR,LEN)
                  Write(ADDR,LEN,WDATA)
                  RDATA = Read(ADDR,LEN)
                  IF WDATA = RDATA THEN 寫(xiě)成功 ELSE 寫(xiě)失敗
                  Fuse()
                  Close()

                  下面的偽碼程序判斷AT88SC102卡是否是本系統支持的卡和對一應用區ADDR地址開(kāi)始的LEN個(gè)字節完成某種操作。
                  Open(AT88SC102)
                  ReadCPZ(CPZ) ;讀出系統標識
                  if CPZ = 系統標識 THEN 繼續 ELSE 非法卡
                  IF CheckSC(Pwd) = OK THEN 繼續 ELSE 非法卡
                  SetZone(1)
                  RDATA = Read(ADDR,LEN)
                  <一些其它操作>
                  IF CheckEZ(Pwd) = OK THEN 繼續 ELSE 非法卡
                  Erase(ADDR,LEN)
                  Write(ADDR,LEN,WDATA)
                  RDATA = Read(ADDR,LEN)
                  IF WDATA = RDATA THEN 寫(xiě)成功 ELSE 寫(xiě)失敗
                  Close()
                  2.AT88SC1604加密卡
                  AT88SC1604加密卡的訪(fǎng)問(wèn)時(shí)間讀為2us/位,寫(xiě)為5ms/位;工作電壓為5V±10%;寫(xiě)/擦除次數為10萬(wàn)次;數據保持10年;工作溫度為0—70℃;通訊協(xié)議符合ISO/IEC 7816-3同步協(xié)議。
                  AT88SC1604又可分為等分區卡和不等分區卡兩種,它們各區和熔絲地址不一樣。二、三、四應用區不等分區卡沒(méi)有區密碼錯誤計數,而等分區卡有,不等分區卡在性能上比較明顯地偏重第一區。在選擇AT88SC1604卡時(shí)應注意它是不等分區卡還是等分區卡。

                  不等分區卡的存儲結構:(二、三、四應用區沒(méi)有區密碼錯誤計數)
                  存儲分區 位地址 位數 字節地址 字節數
                  FZ 廠(chǎng)商代碼區 0-15 16 0-1 2
                  IZ 發(fā)行者區 16-79 64 2-9 8
                  SC 主密碼區 80-95 16 10-11 2
                  SCAC 主密碼錯誤計數區 96-103 8 12 1
                  CPZ 代碼保護區 104-167 64 13-20 8
                  SC1 一區密碼 168-183 16 21-22 2
                  S1AC 一區密碼錯誤計數 184-191 8 23 1
                  EZ1 一區擦除密碼 192-207 16 24-25 2
                  E1AC 一區擦除密碼錯誤計數 208-215 8 26 1
                  AZ1 應用區一 216-9775 9560 27-1221 1195
                  SC2 二區密碼 9776-9791 16 1222-1223 2
                  EZ2 二區擦除密碼 9792-9807 16 1224-1225 2
                  E2AC 二區擦除密碼錯誤計數 9808-9815 8 1226 1
                  AZ2 應用區二 9816-11863 2048 1227-1482 256
                  SC3 三區密碼 11864-11879 16 1483-1484 2
                  EZ3 三區擦除密碼 11880-11895 16 1485-1486 2
                  E3AC 三區擦除密碼錯誤計數 11896-11903 8 1487 1
                  AZ3 應用區三 11904-13951 2048 1488-1743 256
                  SC4 四區密碼 13952-13967 16 1744-1745 2
                  EZ4 四區擦除密碼 13968-13983 16 1746-1747 2
                  E4AC 四區擦除密碼錯誤計數 13984-13991 8 1748 1
                  AZ4 應用區四 13992-16039 2048 1749-2004 256
                  MTZ 測試區 16040-16055 16 2005-2006 2
                  FUSE 熔絲 16288-16303
                  最后地址 16383 2047
                  等分區卡的存儲結構:(二、三、四應用區有區密碼錯誤計數)
                  存儲分區 位地址 位數 字節地址 字節數
                  FZ 廠(chǎng)商代碼區 0-15 16 0-1 2
                  IZ 發(fā)行者區 16-79 64 2-9 8
                  SC 主密碼區 80-95 16 10-11 2
                  SCAC 主密碼錯誤計數區 96-103 8 12 1
                  CPZ 代碼保護區 104-167 64 13-20 8
                  SC1 一區密碼 168-183 16 21-22 2
                  S1AC 一區密碼錯誤計數 184-191 8 23 1
                  EZ1 一區擦除密碼 192-207 16 24-25 2
                  E1AC 一區擦除密碼錯誤計數 208-215 8 26 1
                  AZ1 應用區一 216-4311 4096 27-538 512
                  SC2 二區密碼 4312-4327 16 539-540 2
                  S2AC 二區密碼錯誤計數 4328-4335 8 541 1
                  EZ2 二區擦除密碼 4336-4351 16 542-543 2
                  E2AC 二區擦除密碼錯誤計數 4352-4359 8 544 1
                  AZ2 應用區二 4360-8455 4096 545-1056 512
                  SC3 三區密碼 8456-8471 16 1057-1058 2
                  S3AC 三區密碼錯誤計數 8472-8479 8 1059 1
                  EZ3 三區擦除密碼 8480-8495 16 1060-1061 2
                  E3AC 三區擦除密碼錯誤計數 8496-8503 8 1062 1
                  AZ3 應用區三 8504-12599 4096 1063-1574 512
                  SC4 四區密碼 12600-12615 16 1575-1576 2
                  S4AC 四區密碼錯誤計數 12616-12623 8 1577 1
                  EZ4 四區擦除密碼 12624-12639 16 1578-1579 2
                  E4AC 四區擦除密碼錯誤計數 12640-12647 8 1580 1
                  AZ4 應用區四 12648-16303 3656 1581-2037 457
                  MTZ 測試區 16304-16319 16 2038-2039 2
                  FUSE 熔絲 16352-16367
                  最后地址 16383 2047
                  注:擦、寫(xiě)是兩種不同的操作,擦是位寫(xiě)1操作,寫(xiě)是位寫(xiě)0操作。修改數據時(shí),只有先擦除才能再寫(xiě)數據。
                  在熔絲熔斷(FUSE2)前與熔絲熔斷后它的保密特性是不同的。

                  熔絲熔斷前的保密特性:
                  FZ:由ATMEL公司出廠(chǎng)時(shí)設置(FUSE1),只讀不可更改,不等分卡一般為0F0F,等分卡一般為7156。ATMEL公司可以為批量用戶(hù)定制此代碼,以保證卡片的唯一性。
                  IZ:可讀。SC核對正確,IZ可以反復擦寫(xiě)。
                  SC:SC核對正確時(shí),SC可讀和擦寫(xiě),SC核對不正確時(shí),SC不能讀和擦寫(xiě)。
                  SCAC:初始值為8,SC核對每錯1次SCAC減1,SCAC等于0時(shí),卡自毀,如果SC核對正確SCAC恢復為初始值8。SCAC永遠可讀。
                  CPZ:為用戶(hù)標注,用于對卡中信息操作過(guò)程的標注,永遠可讀,SC核對正確后可擦寫(xiě)。
                  SC1,SC2,SC3,SC4,EZ1,EZ2,EZ3,EZ4:熔絲熔斷(FUSE2)前,不起什么作用。SC核對正確時(shí),SCn、EZn可讀和擦寫(xiě)(n代表1或2或3或4,下同),
                  S1AC,S2AC,S3AC,S4AC,E1AC,E2AC,E3AC,E4AC:永遠可讀,熔絲熔斷(FUSE2)前,不起什么作用。SC核對正確時(shí),SnAC、EnAC可擦寫(xiě),
                  AZ1,AZ2,AZ3,AZ4;前2位為AZn的寫(xiě)讀保護位,即寫(xiě)保護位(nPR),讀保護位(nRD)。 SC核對正確時(shí),AZn可讀,如果SC核對不正確時(shí),nRD控制著(zhù)AZn的可讀性,即如果nRD=1時(shí),AZn可讀;如果nRD=0時(shí),AZn不可讀。
                  在熔絲熔斷(FUSE2)前,nPR不起作用,只要SC核對正確,AZn就可擦寫(xiě),
                  MTZ:用于測試卡的擦寫(xiě)性能。任意條件下均可測試。 熔絲熔斷后的保密特性:
                  FZ:由ATMEL公司出廠(chǎng)時(shí)設置(FUSE1),只讀不可更改,不等分卡一般為0F0F,等分卡一般為7156。ATMEL公司可以為批量用戶(hù)定制此代碼,以保證卡片的唯一性。
                  IZ:永遠可讀。但熔絲熔斷(FUSE2)后IZ內容被固化,IZ將永遠不能再改。
                  SC:不可讀,SC核對正確時(shí),SC可擦寫(xiě),SC核對不正確時(shí),SC不能擦寫(xiě)。
                  SCAC:初始值為8,SC核對每錯1次SCAC減1,SCAC等于0時(shí),卡自毀,如果SC核對正確SCAC恢復為初始值8。SCAC永遠可讀。
                  CPZ:為用戶(hù)標注,用于對卡中信息操作過(guò)程的標注,永遠可讀,SC核對正確后可擦寫(xiě)。
                  SC1,SC2,SC3,SC4:不可讀,SC核對正確時(shí),SCn可校對,SC核對不正確時(shí),SCn不能校對。SCn核對正確時(shí),SCn可擦寫(xiě)。
                  S1AC,S2AC,S3AC,S4AC:初始值為8,SCn核對每錯1次SnAC減1,SnAC等于0時(shí),n區自毀,如果SCn核對正確SnAC恢復為初始值8。SnAC永遠可讀。
                  EZ1,EZ2,EZ3,EZ4:不可讀,SCn核對正確時(shí),EZn可校對,SCn核對不正確時(shí),EZn不能校對。EZn核對正確時(shí),EZn可擦寫(xiě)。
                  E1AC,E2AC,E3AC,E4AC:初始值為8,EZn核對每錯1次EnAC減1,EnAC等于0時(shí),n區自毀,如果EZn核對正確EnAC恢復為初始值8。EnAC永遠可讀。
                  AZ1,AZ2,AZ3,AZ4;前2位為AZn的寫(xiě)讀保護位,即寫(xiě)保護位(nPR),讀保護位(nRD)。 SCn核對正確時(shí),AZn可讀,如果SCn核對不正確時(shí),nRD控制著(zhù)AZn的可讀性,即如果nRD=1時(shí),AZn可讀;如果nRD=0時(shí),AZn不可讀。
                  EZn核對正確時(shí),AZn可擦, EZn核對不正確時(shí),Azn不可擦。
                  在熔絲熔斷(FUSE2)后,即使SCn核對正確,也要看nPR是否為1,如果是0,AZ被寫(xiě)保護永遠不能寫(xiě)。同時(shí)不可能再對EZ1進(jìn)行讀和擦寫(xiě)操作。
                  MTZ:用于測試卡的擦寫(xiě)性能。任意條件下均可測試。

                  下面的偽碼程序在A(yíng)T88SC1604卡完成初始化操作和在一應用區ADDR地址開(kāi)始寫(xiě)LEN個(gè)字節,并讀出校對。
                  Open(AT88SC1604)
                  IF CheckSC(Pwd) = OK THEN 繼續 ELSE 非法卡
                  WriteCPZ(CPZ) ;可以寫(xiě)一些系統標識
                  UpdateSC(NewPwd)
                  SetZone(1)
                  UpdateSC(NewPwd)
                  UpdateEZ(NewEZ)
                  Erase(ADDR,LEN)
                  Write(ADDR,LEN,WDATA)
                  RDATA = Read(ADDR,LEN)
                  IF WDATA = RDATA THEN 寫(xiě)成功 ELSE 寫(xiě)失敗
                  Fuse()
                  Close()
                  下面的偽碼程序判斷AT88SC1604卡是否是本系統支持的卡和對一應用區ADDR地址開(kāi)始的LEN個(gè)字節完成某種操作。
                  Open(AT88SC1604)
                  ReadCPZ(CPZ) ;讀出系統標識
                  if CPZ = 系統標識 THEN 繼續 ELSE 非法卡
                  IF CheckSC(Pwd) = OK THEN 繼續 ELSE 非法卡
                  SetZone(1)
                  RDATA = Read(ADDR,LEN)
                  <一些其它操作>
                  IF CheckSC(Pwd) = OK THEN 繼續 ELSE 非法卡
                  IF CheckEZ(Pwd) = OK THEN 繼續 ELSE 非法卡
                  Erase(ADDR,LEN)
                  Write(ADDR,LEN,WDATA)
                  RDATA = Read(ADDR,LEN)
                  IF WDATA = RDATA THEN 寫(xiě)成功 ELSE 寫(xiě)失敗
                  Close()
                  3.AT88SC1608加密卡
                  如果說(shuō)AT88SC1064是在A(yíng)T88SC102、AT24C16的基礎上作了一些改進(jìn)的話(huà),那么AT88SC1608則是接觸式IC卡的一次成熟穩定的飛躍,在一卡多用上更能體現它的長(cháng)處,它的保密性能強,讀寫(xiě)速度快,無(wú)需先擦除就可以進(jìn)行寫(xiě)操作。
                  AT88SC1608加密卡時(shí)鐘頻率為1MHz,支持頁(yè)寫(xiě)方式(16字節/頁(yè)),如果以頁(yè)寫(xiě)方式訪(fǎng)問(wèn)的話(huà),訪(fǎng)問(wèn)時(shí)間為10ms(最大)/頁(yè);工作電壓為2.7V—5.5V;寫(xiě)/擦除次數為10萬(wàn)次;數據保持100年;工作溫度為0—70℃;通訊協(xié)議符合ISO/IEC 7816-3同步協(xié)議。
                  尤其是AT88SC1608加密卡的高保密性能十分突出,除了帶加密邏輯,還具有高保密認證及反截取跟蹤技術(shù),64位相互認證及認證錯誤計數器,錯誤計數8次。
                  AT88SC1608具有1個(gè)128字節設置區和8個(gè)256字節應用分區,8個(gè)區可以自由合并,分別受讀密碼、寫(xiě)密碼(16套密碼、各3個(gè)字節)控制,錯誤計數8次。
                  AT88SC1608共有17408位(2176字節)存儲空間,其中前16K位(2K字節)為應用區,后1K位(128字節)為設置區。

                  存儲結構:(字節地址以16進(jìn)制表示)
                  存儲分區 $0 $1 $2 $3 $4 $5 $6 $7 地址
                  應用分區0(User0) 256字節 $000
                  應用分區1(User1) 256字節 $100
                  應用分區2(User2) 256字節 $200
                  應用分區3(User3) 256字節 $300
                  應用分區4(User4) 256字節 $400
                  應用分區5(User5) 256字節 $500
                  應用分區6(User6) 256字節 $600
                  應用分區7(User7) 256字節 $700
                  設置區 128字節 $800

                  其中設置區存儲結構:(字節地址以16進(jìn)制表示)
                  $0 $1 $2 $3 $4 $5 $6 $7 地址
                  廠(chǎng)商信息 復位應答(ATR) 歷史代碼(HC) $00
                  廠(chǎng)商代碼(FZ) 保留 卡商代碼(CMC) $08
                  訪(fǎng)問(wèn)權限 AR0 AR1 AR2 AR3 AR4 AR5 AR6 AR7 $10
                  保留 $18
                  認證區 AAC 識別碼(Nc) $20
                  密文(Ci) $28
                  密鑰 密鑰(Gc) $30
                  測試區 測試區(MTZ) $38
                  密碼區 PAC 寫(xiě)密碼0(WP0) PAC 讀密碼0(RP0) $40
                  PAC 寫(xiě)密碼1(WP1) PAC 讀密碼1(RP1) $48
                  PAC 寫(xiě)密碼2(WP2) PAC 讀密碼2(RP2) $50
                  PAC 寫(xiě)密碼3(WP3) PAC 讀密碼3(RP3) $58
                  PAC 寫(xiě)密碼4(WP4) PAC 讀密碼4(RP4) $60
                  PAC 寫(xiě)密碼5(WP5) PAC 讀密碼5(RP5) $68
                  PAC 寫(xiě)密碼6(WP6) PAC 讀密碼6(RP6) $70
                  PAC 寫(xiě)密碼7(WP7/SC) PAC 讀密碼7(RP7) $78
                  注:哪個(gè)區用哪套密碼或是否要認證要由訪(fǎng)問(wèn)權限AR0-AR7 來(lái)決定。

                  ATR:復位應答,由ATMEL定義,不可改。
                  HC:歷史代碼,由ATMEL定義,不可改。
                  FZ:廠(chǎng)商代碼,由ATMEL定義,不可改。
                  CMC:卡商代碼,由卡廠(chǎng)定義,不可改。
                  AR0-7:訪(fǎng)問(wèn)權限。個(gè)人化前定義。(詳細用法參見(jiàn)訪(fǎng)問(wèn)權限)
                  Nc:識別碼,通常用作卡的唯一標識--卡號。個(gè)人化前定義。
                  Ci:密文,個(gè)人化前可寫(xiě)一隨機數,認證卡時(shí)使用,每次認證會(huì )被自動(dòng)改寫(xiě)。
                  Gc:密鑰,64位的保密種子,由Nc通過(guò)F1公式推算出來(lái),在個(gè)人化前,寫(xiě)入卡中。個(gè)人化后不可訪(fǎng)問(wèn),認證時(shí)作為該卡的F2公式的參數。(詳細用法參見(jiàn)認證協(xié)議)
                  AAC:為認證錯誤計數器。初始值為8。
                  MTZ:用于測試卡的讀寫(xiě)性能。任意條件下均可測試。
                  WP0-WP7,RP0-RP7:8套讀寫(xiě)密碼集, 每個(gè)分區可以分別指向唯一的密碼集,也可以指向同一套密碼集,這樣就可以只核對一套密碼而進(jìn)入多個(gè)分區,使多個(gè)分區合成為一個(gè)大的分區。默認WP7、RP7為讀寫(xiě)密碼。寫(xiě)密碼7(WP7)還作為傳輸密碼(SC)。另外,如果需要修改讀寫(xiě)密碼時(shí),也必須核對同一套密碼集的寫(xiě)密碼。
                  SC:傳輸密碼。初始值由ATMEL定認,發(fā)到每個(gè)卡廠(chǎng)都不同??梢孕薷?,在個(gè)人化前一直使用SC,個(gè)人化后其它密碼才會(huì )被用到。
                  PAC:為分區密碼錯誤計數器。初始值為8。

                  熔絲標志(FUSE)
                  熔絲標志位于設置區的$80地址,存儲結構:(地址以16進(jìn)制表示)
                  位7 位6 位5 位4 位3 位2 位1 位0 地址
                  0 0 0 0 0 PER CMA FAB $80
                  注:FAB、CMA、FAB為AT88SC1608的EEPROM的三級熔絲保護標志,“0”表示已熔斷。在熔絲標志全為“1”時(shí),所有的存儲空間都可讀。每一步熔斷操作都不能返回。
                  FAB為ATMEL的芯片出廠(chǎng)時(shí)的熔斷標志。
                  CMA為卡廠(chǎng)的卡片出廠(chǎng)時(shí)的熔斷標志。
                  PER為應用系統啟動(dòng)前個(gè)人化時(shí)的熔斷標志。

                  當我們把 AT88SC1608卡交付使用之前,卡內信息應已作完以下的操作:
                  ATMEL寫(xiě)完廠(chǎng)商信息(除卡商代碼)、傳輸密碼(SC),把其余的存儲空間都寫(xiě)成“1”,做FAB熔斷操作,使FAB=0。
                  卡廠(chǎng)寫(xiě)入自已的卡商代碼后,做CMA熔斷操作,使CMA=0。
                  系統商對卡做初始化,或卡在發(fā)行之前由系統做初始化,然后做PER熔斷操作,使CMA=0。

                  訪(fǎng)問(wèn)權限
                  熔絲熔斷前后的訪(fǎng)問(wèn)權限表:
                  區 訪(fǎng)問(wèn) FAB=0 CMA=0 Per=0
                  廠(chǎng)商信息 (除卡商代碼) 讀 可以 可以 可以
                  寫(xiě) 禁止 禁止 禁止
                  卡商代碼 讀 可以 可以 可以
                  寫(xiě) 傳輸密碼(SC) 禁止 禁止
                  訪(fǎng)問(wèn)權限 讀 可以 可以 可以
                  寫(xiě) 傳輸密碼(SC) 傳輸密碼(SC) 禁止
                  認證區 讀 可以 可以 可以
                  寫(xiě) 傳輸密碼(SC) 傳輸密碼(SC) 禁止
                  密鑰 讀 傳輸密碼(SC) 傳輸密碼(SC) 禁止
                  寫(xiě) 傳輸密碼(SC) 傳輸密碼(SC) 禁止
                  測試區 讀 可以 可以 可以
                  寫(xiě) 可以 可以 可以
                  密碼 讀 傳輸密碼(SC) 傳輸密碼(SC) 寫(xiě)密碼(WP)
                  寫(xiě) 傳輸密碼(SC) 傳輸密碼(SC) 寫(xiě)密碼(WP)
                  PAC(計數器) 讀 可以 可以 可以
                  寫(xiě) 傳輸密碼(SC) 傳輸密碼(SC) 寫(xiě)密碼(WP)
                  應用區 讀 訪(fǎng)問(wèn)權限(AR) 訪(fǎng)問(wèn)權限(AR) 訪(fǎng)問(wèn)權限(AR)
                  寫(xiě) 訪(fǎng)問(wèn)權限(AR) 訪(fǎng)問(wèn)權限(AR) 訪(fǎng)問(wèn)權限(AR)

                  訪(fǎng)問(wèn)權限AR0-AR7的存儲結構:(使能為“0”,默認為“1”)
                  位7 位6 位5 位4 位3 位2 位1 位0
                  WPE RPE ATE PW2 PW1 PW0 MDF PGO
                  WPE:為寫(xiě)密碼使能標志。值為0時(shí),對應用分區進(jìn)行寫(xiě)操作時(shí),必須通過(guò)寫(xiě)密碼。在個(gè)人化后,核對寫(xiě)密碼,也決定著(zhù)是否能改變讀密碼和寫(xiě)密碼。
                  RPE:為讀密碼使能標志。值為0時(shí),通過(guò)讀密碼或寫(xiě)密碼,才能讀某應用分區。如果密碼核對錯誤將返回熔絲狀態(tài)位。
                  ATE:認證使能標志。為0時(shí),認證必須通過(guò)才能操作當前應用分區。
                  PW2,PW1,PW0:這3位指定當前應用分區使用哪一套密碼集。每個(gè)分區可以分別指向唯一的密碼集,也可以指向同一套密碼集,這樣就可以只核對一套密碼而進(jìn)入多個(gè)分區,使多個(gè)分區合成為一個(gè)大的分區。
                  MDF:為禁止修改操作標志。值為0時(shí),當前應用分區被寫(xiě)保護,被寫(xiě)保護區的內容必須在個(gè)人化之前寫(xiě)入。
                  PGO:只寫(xiě)標志。如果為0,當前應用分區的每一位只能從“1”寫(xiě)成“0”,而不能從“0”改回為“1”。

                  認證協(xié)議
                  產(chǎn)出隨機數Nc(往往當作卡號)和Ci,計算出Gc=F1(Ks,Nc),把Nc、Ci、Gc寫(xiě)入卡中
                  卡 Nc Gc Ci 認證協(xié)議 讀寫(xiě)器 Ks Q0(隨機數)
                  識別碼: Nc Ci Ci+1=F2(Gc,Ci,Q0); if(Ci+1==Q1) Ci+2=F2(Gc,C1+1); Ci=Ci+2; //修改Ci 認證正確; else Ci=Ci; 認證錯誤; Ci (使用讀命令) (初始化認證命令) (校驗認證命令) (讀命令) Gc=F1(Ks,Nc); Q0 Q1=F2(Gc,Ci,Q0); Q1 Q2=F2(Gc,Q1); if(Q2=Ci) 認證正確; else 認證錯誤;
                  F1算法:64BIT 用戶(hù)自定義算法。
                  F2算法:卡內64BIT 算法(Des 算法的變種,提供C語(yǔ)言和51匯編語(yǔ)言程序)
                  該協(xié)議包括卡和讀寫(xiě)器CPU的互相認證(ELVA專(zhuān)利),而且認證數據加密傳送,可以防止通訊數據被竊取。

                  下面的偽碼程序在A(yíng)T88SC1608卡完成初始化操作和在一應用區ADDR地址開(kāi)始寫(xiě)LEN個(gè)字節,并讀出校對。
                  Open(AT88SC1608)
                  IF CheckSC(Pwd) = OK THEN 繼續 ELSE 非法卡
                  InitAuth(Nc,Ci,Gc)
                  SetZone(1)
                  SetAR(AR)
                  UpdateWP(NewWP)
                  UpdateRP(NewRP)
                  Write(ADDR,LEN,WDATA)
                  RDATA = Read(ADDR,LEN)
                  IF WDATA = RDATA THEN 寫(xiě)成功 ELSE 寫(xiě)失敗
                  Fuse()
                  Close()
                  下面的偽碼程序判斷AT88SC1608卡是否是本系統支持的卡和對一應用區ADDR地址開(kāi)始的LEN個(gè)字節完成某種操作。
                  Open(AT88SC1608)
                  CheckAuth(Gc)
                  SetZone(1)
                  IF CheckRP(Pwd) = OK THEN 繼續 ELSE 非法卡
                  RDATA = Read(ADDR,LEN)
                  <一些其它操作>
                  IF CheckWP(Pwd) = OK THEN 繼續 ELSE 非法卡
                  Write(ADDR,LEN,WDATA)
                  RDATA = Read(ADDR,LEN)
                  IF WDATA = RDATA THEN 寫(xiě)成功 ELSE 寫(xiě)失敗
                  Close()
                  4.AT88SC153加密卡
                  AT88SC153是ATMEL繼AT88SC1068之后新推出的一種卡型,它繼承了AT88SC1608的全部?jì)?yōu)點(diǎn),只是存儲容量及分區數有所改變,基本上可以理解為小容量的AT88SC1608。
                  AT88SC153加密卡時(shí)鐘頻率為1MHz,支持頁(yè)寫(xiě)方式(8字節/頁(yè)),如果以頁(yè)寫(xiě)方式訪(fǎng)問(wèn)的話(huà),訪(fǎng)問(wèn)時(shí)間為10ms(最大)/頁(yè);工作電壓為2.7V—5.5V;寫(xiě)/擦除次數為10萬(wàn)次;數據保持100年;工作溫度為0—70℃;通訊協(xié)議符合ISO/IEC 7816-3同步協(xié)議。
                  與AT88SC1608一樣,AT88SC153加密卡的高保密性能十分突出,除了帶加密邏輯,還具有高保密認證及反截取跟蹤技術(shù),64位相互認證及認證錯誤計數器,錯誤計數8次。
                  AT88SC153具有1個(gè)64字節設置區和3個(gè)64字節應用分區,3個(gè)區可以自由合并,分別受讀密碼、寫(xiě)密碼(4套密碼、各3個(gè)字節)控制,錯誤計數4/8次。
                  AT88SC153共有2048位(256字節)存儲空間,其中前1536位(192字節)為應用區,后512位(64字節)為設置區。

                  存儲結構:(字節地址以16進(jìn)制表示)
                  存儲分區 $0 $1 $2 $3 $4 $5 $6 $7 地址
                  應用分區0(User0) 64字節 $00
                  應用分區1(User1) 64字節 $40
                  應用分區2(User2) 64字節 $80
                  設置區 64字節 $C0

                  其中設置區存儲結構:(字節地址以16進(jìn)制表示)
                  $0 $1 $2 $3 $4 $5 $6 $7 地址
                  廠(chǎng)商信息 復位應答(ATR) 歷史代碼(HC) $00
                  廠(chǎng)商代碼(FZ) 卡商碼(CMC) AR0 AR1 AR2 MTZ $08
                  識別區 發(fā)布號(IC) $10
                  DCR 識別碼(Nc) $18
                  AAC 密文(Ci) $20
                  密鑰 密鑰(Gc) $28
                  密碼區 PAC 寫(xiě)密碼0(WP0) PAC 讀密碼0(RP0) $30
                  PAC 寫(xiě)密碼1(WP1/SC) PAC 讀密碼1(RP1) $38
                  注:哪個(gè)區用哪套密碼或是否要認證要由訪(fǎng)問(wèn)權限AR0-AR2 來(lái)決定。
                  在采用校驗和認證方式時(shí),地址$20也可以用作校驗和認證寄存器(CAR)。

                  ATR:復位應答,由ATMEL定義,不可改。
                  HC:歷史代碼,由ATMEL定義,不可改。
                  FZ:廠(chǎng)商代碼,由ATMEL定義,不可改。
                  CMC:卡商代碼,由卡廠(chǎng)定義,不可改。
                  AR0-2:訪(fǎng)問(wèn)權限。個(gè)人化前定義。(詳細用法參見(jiàn)訪(fǎng)問(wèn)權限)
                  MTZ:用于測試卡的讀寫(xiě)性能。任意條件下均可測試。
                  IC:發(fā)布號。個(gè)人化前定義。。
                  DCR:設備設置寄存器。
                  Nc:識別碼,通常用作卡的唯一標識--卡號。個(gè)人化前定義。
                  Ci:密文,個(gè)人化前可寫(xiě)一隨機數,認證卡時(shí)使用,每次認證會(huì )被自動(dòng)改寫(xiě)。
                  Gc:密鑰,64位的保密種子,由Nc通過(guò)F1公式推算出來(lái),在個(gè)人化前,寫(xiě)入卡中。個(gè)人化后不可訪(fǎng)問(wèn),認證時(shí)作為該卡的F2公式的參數。(詳細用法參見(jiàn)認證協(xié)議)
                  AAC:為認證錯誤計數器。初始值為8,但每次校驗出錯減2,所以共有4次連續校驗出錯的機會(huì ),可擴展為8次(見(jiàn)DCR的設置方法)。也用作Ci的一部分,注意如果修改了AAC,會(huì )影響下一次認證的Ci值。
                  CAR:校驗和認證寄存器。只有認證完成時(shí)才有用,每次寫(xiě)操作都會(huì )激活校驗和方式,并把寫(xiě)或連續寫(xiě)的校驗和自動(dòng)寫(xiě)入CAR,此時(shí)可以讀出校驗和,以確定寫(xiě)操作是否完成。任何讀操作都會(huì )結束校驗和方式。
                  WP0,WP1,RP0,RP1:2套讀寫(xiě)密碼集, 每個(gè)分區可以分別指向唯一的密碼集,也可以指向同一套密碼集,這樣就可以只核對一套密碼而進(jìn)入多個(gè)分區,使多個(gè)分區合成為一個(gè)大的分區。默認WP1、RP1為讀寫(xiě)密碼。寫(xiě)密碼1(WP1)還作為傳輸密碼(SC)。另外,如果需要修改讀寫(xiě)密碼時(shí),也必須核對同一套密碼集的寫(xiě)密碼。
                  SC:傳輸密碼。初始值由ATMEL定認,發(fā)到每個(gè)卡廠(chǎng)都不同??梢孕薷?,在個(gè)人化前一直使用SC,個(gè)人化后其它密碼才會(huì )被用到。
                  PAC:為分區密碼錯誤計數器。初始值為8,但每次校驗出錯減2,所以共有4次連續校驗出錯的機會(huì )??蓴U展為8次。(見(jiàn)DCR的設置方法)

                  熔絲標志(FUSE)
                  熔絲標志位于設置區的$40地址,存儲結構:(地址以16進(jìn)制表示)
                  位7 位6 位5 位4 位3 位2 位1 位0 地址
                  0 0 0 0 0 PER CMA FAB $40
                  注:FAB、CMA、FAB為AT88SC153的EEPROM的三級熔絲保護標志,“0”表示已熔斷。在熔絲標志全為“1”時(shí),所有的存儲空間都可讀。每一步熔斷操作都不能返回。
                  FAB為ATMEL的芯片出廠(chǎng)時(shí)的熔斷標志。
                  CMA為卡廠(chǎng)的卡片出廠(chǎng)時(shí)的熔斷標志。
                  PER為應用系統啟動(dòng)前個(gè)人化時(shí)的熔斷標志。

                  當我們把 AT88SC153卡交付使用之前,卡內信息應已作完以下的操作:
                  ATMEL寫(xiě)完廠(chǎng)商信息(除卡商代碼、訪(fǎng)問(wèn)權限和測試區)、傳輸密碼(SC),把其余的存儲空間都寫(xiě)成“1”,做FAB熔斷操作,使FAB=0。
                  卡廠(chǎng)寫(xiě)入自已的卡商代碼后,做CMA熔斷操作,使CMA=0。
                  系統商對卡做初始化,或卡在發(fā)行之前由系統做初始化,然后做PER熔斷操作,使CMA=0。

                  訪(fǎng)問(wèn)權限
                  熔絲熔斷前后的訪(fǎng)問(wèn)權限表:
                  區 訪(fǎng)問(wèn) FAB=0 CMA=0 Per=0
                  廠(chǎng)商信息 (除CMC,AR,MTZ) 讀 可以 可以 可以
                  寫(xiě) 禁止 禁止 禁止
                  卡商代碼 讀 可以 可以 可以
                  寫(xiě) 傳輸密碼(SC) 禁止 禁止
                  訪(fǎng)問(wèn)權限 讀 可以 可以 可以
                  寫(xiě) 傳輸密碼(SC) 傳輸密碼(SC) 禁止
                  測試區 讀 可以 可以 可以
                  寫(xiě) 可以 可以 可以
                  識別區 讀 可以 可以 可以
                  寫(xiě) 傳輸密碼(SC) 傳輸密碼(SC) 禁止
                  密鑰 讀 傳輸密碼(SC) 傳輸密碼(SC) 禁止
                  寫(xiě) 傳輸密碼(SC) 傳輸密碼(SC) 禁止
                  密碼 讀 傳輸密碼(SC) 傳輸密碼(SC) 寫(xiě)密碼(WP)
                  寫(xiě) 傳輸密碼(SC) 傳輸密碼(SC) 寫(xiě)密碼(WP)
                  PAC(計數器) 讀 可以 可以 可以
                  寫(xiě) 傳輸密碼(SC) 傳輸密碼(SC) 寫(xiě)密碼(WP)
                  應用區 讀 訪(fǎng)問(wèn)權限(AR) 訪(fǎng)問(wèn)權限(AR) 訪(fǎng)問(wèn)權限(AR)
                  寫(xiě) 訪(fǎng)問(wèn)權限(AR) 訪(fǎng)問(wèn)權限(AR) 訪(fǎng)問(wèn)權限(AR)

                  訪(fǎng)問(wèn)權限AR0-AR2的存儲結構:(使能為“0” ,默認為“1”)
                  位7 位6 位5 位4 位3 位2 位1 位0
                  WPE RPE ATE AOW PWS WLM MDF PGO
                  WPE:為寫(xiě)密碼使能標志。值為0時(shí),對應用分區進(jìn)行寫(xiě)操作時(shí),必須通過(guò)寫(xiě)密碼。在個(gè)人化后,核對寫(xiě)密碼,也決定著(zhù)是否能改變讀密碼和寫(xiě)密碼。
                  RPE:為讀密碼使能標志。值為0時(shí),通過(guò)讀密碼或寫(xiě)密碼,才能讀某應用分區。如果密碼核對錯誤將返回熔絲狀態(tài)位。
                  ATE:認證使能標志。為0時(shí),認證必須通過(guò)才能操作當前應用分區。
                  AOW:只有寫(xiě)時(shí)才需要認證標志。只有寫(xiě)操作時(shí)才需要進(jìn)行認證,讀不需要進(jìn)行認證操作,如果ATE=0,則AOW被忽略。
                  PWS:指定當前應用分區使用哪一套密碼集。每個(gè)分區可以分別指向唯一的密碼集,也可以指向同一套密碼集,這樣就可以只核對一套密碼而進(jìn)入多個(gè)分區,使多個(gè)分區合成為一個(gè)大的分區。
                  WLM:寫(xiě)鎖模式使能。每個(gè)區的8個(gè)字節為一頁(yè)。如果WLM=0,使每頁(yè)的第一個(gè)字節(byte0)的每一位分別為該頁(yè)8個(gè)字節的寫(xiě)鎖標志,0為寫(xiě)鎖(即只能從“1”寫(xiě)成“0”,而不能從“0”改回為“1”),1為解鎖。
                  MDF:為禁止修改操作標志。值為0時(shí),當前應用分區被寫(xiě)保護,被寫(xiě)保護區的內容必須在個(gè)人化之前寫(xiě)入。
                  PGO:只寫(xiě)標志。如果為0,當前應用分區的每一位只能從“1”寫(xiě)成“0”,而不能從“0”改回為“1”。


                  設備設置寄存器(DCR)
                  設備設置寄存器位于設置區的$18地址,存儲結構:(使能為“0”,默認為“1”)
                  位7 位6 位5 位4 位3 位2 位1 位0
                  SME UCR UAT ETA CS3 CS2 CS1 CS0
                  CS0-CS3:可編程片選。ATMEL出廠(chǎng)時(shí)寫(xiě)為$B(即1011)。它為訪(fǎng)問(wèn)卡的所有命令字的高4位。
                  ETA:8次計數使能。ETA=0,可以使AAC和PAC的計數次數為8,否則為4。
                  UAT:使認證錯誤計數無(wú)校標志。UAT=0,AAC無(wú)校,否則AAC有校。
                  UCR:不限制讀校驗和次數標志。UCR=1時(shí),每次認證只能讀校驗和方式一次(默認),UCR=0時(shí),沒(méi)有次數限制。
                  SME:超級管理方式。SME=0時(shí),通過(guò)1WP校驗,就可以讀寫(xiě)全部的讀寫(xiě)密碼及密碼錯誤計數器。

                  認證協(xié)議
                  產(chǎn)出隨機數Nc(往往當作卡號)和Ci,計算出Gc=F1(Ks,Nc),把Nc、Ci、Gc寫(xiě)入卡中
                  卡 Nc Gc Ci 認證協(xié)議 讀寫(xiě)器 Ks Q0(隨機數)
                  識別碼: Nc Ci Ci+1=F2(Gc,Ci,Q0); if(Ci+1==Q1) Ci+2=F2(Gc,C1+1); Ci=Ci+2; //修改Ci 認證正確; else Ci=Ci; 認證錯誤; Ci (使用讀命令) (初始化認證命令) (校驗認證命令) (讀命令) Gc=F1(Ks,Nc); Q0 Q1=F2(Gc,Ci,Q0); Q1 Q2=F2(Gc,Q1); if(Q2=Ci) 認證正確; else 認證錯誤;
                  F1算法:64BIT 用戶(hù)自定義算法。
                  F2算法:卡內64BIT 算法(Des 算法的變種,提供C語(yǔ)言和51匯編語(yǔ)言程序)
                  該協(xié)議包括卡和讀寫(xiě)器CPU的互相認證(ELVA專(zhuān)利),而且認證數據加密傳送,可以防止通訊數據被竊取。

                  下面的偽碼程序在A(yíng)T88SC153卡完成初始化操作和在一應用區ADDR地址開(kāi)始寫(xiě)LEN個(gè)字節,并讀出校對。
                  Open(AT88SC153)
                  IF CheckSC(Pwd) = OK THEN 繼續 ELSE 非法卡
                  WriteIC(IC) ;寫(xiě)發(fā)布號
                  WriteDCR(DCR)
                  InitAuth(Nc,Ci,Gc)
                  SetZone(1)
                  SetAR(AR)
                  UpdateWP(NewWP)
                  UpdateRP(NewRP)
                  Write(ADDR,LEN,WDATA)
                  RDATA = Read(ADDR,LEN)
                  IF WDATA = RDATA THEN 寫(xiě)成功 ELSE 寫(xiě)失敗
                  Fuse()
                  Close()

                  下面的偽碼程序判斷AT88SC153卡是否是本系統支持的卡和對一應用區ADDR地址開(kāi)始的LEN個(gè)字節完成某種操作。
                  Open(AT88SC153)
                  ReadIC(IC) ;讀出發(fā)布號
                  if IC = 發(fā)布號 THEN 繼續 ELSE 非法卡
                  CheckAuth(Gc)
                  SetZone(1)
                  IF CheckRP(Pwd) = OK THEN 繼續 ELSE 非法卡
                  RDATA = Read(ADDR,LEN)
                  <一些其它操作>
                  IF CheckWP(Pwd) = OK THEN 繼續 ELSE 非法卡
                  Write(ADDR,LEN,WDATA)
                  RDATA = Read(ADDR,LEN)
                  IF WDATA = RDATA THEN 寫(xiě)成功 ELSE 寫(xiě)失敗
                  Close()
                  三、AT45D041
                  這種型號的IC卡為ATMEL存儲卡,是一種不具備加密功能大容量的FLASH 存儲卡,存儲容量為4M位,主存儲區有2048頁(yè)(每頁(yè)容量為264字節),同時(shí)還提供兩個(gè)獨立雙向的數據緩存區(每個(gè)數據緩存區容量為264字節),頁(yè)寫(xiě)方式為264字節,頁(yè)寫(xiě)入時(shí)間為7ms。存儲結構簡(jiǎn)單,主要用于存放一些保密性要求不高、數據量極大的數據,如聲音、圖像或數據。
                  AT45D041的工作頻率為10MHz(最大);工作電壓為5V±10%;工作電流讀為25mA,寫(xiě)為50mA;數據保持100年;工作溫度為0—70℃,根據要求可超過(guò)指定工作溫度;通訊協(xié)議為SPI串行接口方式0和方式3。

                  緩存區1、緩存區2和主存儲區的讀寫(xiě)方式如上圖所示,分別為:
                  1. 直接從主存儲區的某頁(yè)讀數據;
                  2. 把主存儲區的某頁(yè)數據寫(xiě)入緩存區1或緩存區2;
                  3. 把主存儲區的某頁(yè)數據和緩存區1或緩存區2的數據進(jìn)行比較;
                  4. 把緩存區1或緩存區2的數據寫(xiě)入主存儲區的某頁(yè)(帶內建式擦除);
                  5. 把緩存區1或緩存區2的數據寫(xiě)入主存儲區的某頁(yè)(不6. 帶內建式擦除);
                  7. 把數據寫(xiě)入主存儲區的某頁(yè);
                  8. 自動(dòng)頁(yè)回寫(xiě);
                  9. 讀緩存區1、緩存區2;
                  10. 寫(xiě)緩存區1、緩存區2;
                  11. 讀狀態(tài)位。

                  狀態(tài)位結構:
                  位7 位6 位5 位4 位3 位2 位1 位0
                  忙閑 比較 0 1 1 x x x
                  注:位7為0表示忙;為1表示閑,可以接收下一條指令。
                  位6為0表示主存儲區數據與緩存區比較匹配,否則為不匹配。
                  位5、位4、位3對于A(yíng)T45D041為“011”(二進(jìn)制)。

                  下面的偽碼程序通過(guò)AT45D041卡的緩存1更新主存儲區的頁(yè)1的某些數據:
                  OpenCard(AT45D041)
                  SetPage(1)
                  SetBuff(1)
                  PageToBuff()
                  WHILE ReadStatus() = Busy LOOP
                  WriteBuff(Addr,Len,cData)
                  BuffToPage()
                  WHILE ReadStatus() = Busy LOOP
                  AutoRWrite()
                  WHILE ReadStatus() = Busy LOOP
                  Close()

                  OpenCard(AT45D041)
                  SetPage(1)
                  SetBuff(1)
                  WritePage(Addr,Len.cData)
                  WHILE ReadStatus() = Busy LOOP
                  AutoRWrite()
                  WHILE ReadStatus() = Busy LOOP
                  Close()

                  下面的偽碼程序通過(guò)AT45D041卡的緩存1頁(yè)寫(xiě)主存儲區的頁(yè)1:
                  OpenCard(AT45D041)
                  SetPage(1)
                  SetBuff(1)
                  WriteBuff(0,264,cData)
                  BuffToPage()
                  WHILE ReadStatus() = Busy LOOP
                  Close()

                  OpenCard(AT45D041)
                  SetPage(1)
                  SetBuff(1)
                  WritePage(0,264.cData)
                  WHILE ReadStatus() = Busy LOOP
                  Close()

                  注:本章內容可為用戶(hù)在接觸式IC卡選型時(shí)參考。


                  第二章 接觸式IC卡的接口函數
                  IC卡軟件應用系統的開(kāi)發(fā)是在讀寫(xiě)器提供的接口函數基礎上進(jìn)行軟件開(kāi)發(fā)的。每個(gè)系統公司的接口函數雖有不同,但大同小異。下面以德誠系統有限公司的MCS-C接觸式IC卡通用讀寫(xiě)器提供的FoxPro for DOS的PLB接口函數為例,用戶(hù)由此可基本上對接觸式IC卡接口函數有所了解。
                  在FoxPro程序執行開(kāi)始前,先執行語(yǔ)句SET LIBRARY TO ICFOX.PBL。FoxPro將會(huì )自動(dòng)登錄庫ICFOX.PLB中的IC卡函數,您可以象使用FoxPro的內部函數一樣的使用接口函數。編譯成EXE文件時(shí),將ICFOX.PLB鏈入。
                  1、 函數列表(函數名2? , 簡(jiǎn)單說(shuō)明)
                  1. 通用函數
                  InitComm 初始化指定的串口并連接讀寫(xiě)設備
                  ExitComm 退出串口連接
                  ErrorMsg 返回錯誤信息
                  GetInfo 獲取設備的版本號

                  TestCard 測試讀寫(xiě)器內是否插卡
                  OpenCard 打開(kāi)對某種型號卡的操作
                  ReadChr 從卡上指定地址讀取指定長(cháng)度的字符串
                  WriteChr 向卡內指定地址寫(xiě)入指定長(cháng)度的字符串
                  ReadInt 從卡上指定地址讀取一個(gè)雙精度數
                  WriteInt 向卡內指定地址寫(xiě)入一個(gè)雙精度數
                  CloseCard 關(guān)閉卡操作
                  2? ATMEL AT88SC102/AT88SC1604加密卡專(zhuān)用函數
                  ReadFZ 讀廠(chǎng)商代碼
                  ReadIZ 讀卡商代碼
                  ReadCPZ 讀代碼保護區
                  WriteCPZ 寫(xiě)代碼保護區
                  ReadMTZ 讀測試區
                  WriteMTZ 寫(xiě)測試區

                  SetZone 選擇應用區
                  CheckSC 比較密碼(或區密碼)
                  UpdateSC 更新密碼(或區密碼)
                  ReadSCAC 讀密碼(或區密碼)校驗錯誤計數
                  CheckEZ 比較區擦除密碼
                  UpdateEZ 更新區擦除密碼
                  ReadEAC 讀區擦除密碼校驗錯誤計數
                  Erase 從卡內指定位置起擦除指定長(cháng)度字節

                  Fuse 燒斷卡上熔絲
                  3? ATMEL AT88SC1608及AT88SC153加密卡專(zhuān)用函數
                  ReadFZ 讀廠(chǎng)商代碼
                  ReadIZ 讀卡商代碼
                  ReadIC 讀發(fā)布號(AT88SC153專(zhuān)用)
                  WriteIC 寫(xiě)發(fā)布號(AT88SC153專(zhuān)用)
                  ReadDCR 讀設備設置寄存器(AT88SC153專(zhuān)用)
                  WriteDCR 寫(xiě)設備設置寄存器(AT88SC153專(zhuān)用)
                  ReadMTZ 讀測試區
                  WriteMTZ 寫(xiě)測試區

                  InitAuth 初始化認證狀態(tài)
                  CheckAuth 認證校驗
                  ReadAAC 讀認證錯誤計數

                  CheckSC 比較傳輸密碼
                  UpdateSC 更新傳輸密碼
                  ReadSCAC 讀傳輸密碼校驗錯誤計數

                  SetZone 選擇應用區
                  ReadAR 讀應用區的訪(fǎng)問(wèn)權限
                  WriteAR 設置應用區的訪(fǎng)問(wèn)權限

                  CheckWP 比較寫(xiě)密碼
                  UpdateWP 更新寫(xiě)密碼
                  ReadWPAC 讀寫(xiě)密碼校驗錯誤計數
                  CheckRP 比較讀密碼
                  UpdateRP 更新寫(xiě)密碼
                  ReadRPAC 讀讀密碼校驗錯誤計數

                  FuseStatus 讀取卡內熔絲狀態(tài)
                  Fuse 燒斷卡上熔絲
                  4? ATMEL AT45D041 Flash存儲卡專(zhuān)用函數
                  SetPage 選擇主存儲區的當前頁(yè)
                  SetBuff 選擇緩沖區
                  ReadPage 讀取主存儲區頁(yè)內的字符
                  ReadBuff 讀取緩沖區1/緩沖區2內的字符
                  WritePage 寫(xiě)字符到主存儲區頁(yè)
                  WriteBuff 寫(xiě)字符到緩沖區1/緩沖區2
                  CompPB 比較主存儲區頁(yè)與緩沖區1/緩沖區2的內容
                  PageToBuff 從主存儲區頁(yè)提取數據到緩沖區1/緩沖區2
                  BuffToPage 從緩沖區1/緩沖區2寫(xiě)數據到主存儲區頁(yè)
                  ReadStatus 讀狀態(tài)字(忙閑)
                  AutoRWrite 自動(dòng)回寫(xiě)
                  3、 函數說(shuō)明
                  InitComm(Port)
                  說(shuō)明:初始化指定的串口并連接讀寫(xiě)設備。
                  參數:Port----串口標號,整數0,1分別代表串口1,串口2。
                  返回值: =0,正確。
                  <>0,出錯。返回值代表錯誤號。
                  舉例:Ret = InitComm(0) 初始化串口1。

                  ExitComm()
                  說(shuō)明:退出串口連接。
                  參數:無(wú)。
                  返回值: =0,正確。
                  <>0,出錯。返回值代表錯誤號。
                  舉例:Ret = ExitComm() 退出串口。

                  ErrorMsg(ErrNo)
                  說(shuō)明:返回錯誤信息。
                  參數:錯誤號。
                  返回值: 錯誤信息。
                  舉例:Msg = ErrorMsg(0) 返回“成功”。

                  GetInfo()
                  說(shuō)明:獲取設備的版本號。
                  參數:無(wú)。
                  返回值: 設備的版本號。
                  舉例:Vno = GetInfo()。

                  TestCard()
                  說(shuō)明:測試讀寫(xiě)器內是否插卡。
                  參數:無(wú)。
                  返回值: =0,正確。
                  <0,讀寫(xiě)器內沒(méi)有插卡。返回值代表錯誤號。
                  舉例:Ret = TestCard()

                  OpenCard(CardType)
                  說(shuō)明:打開(kāi)對某種型號卡的操作
                  參數:CardType----IC卡類(lèi)型。具體值參見(jiàn)附錄一。
                  返回值: =0,正確。
                  <>0,出錯。返回值代表錯誤號。
                  舉例:Ret = OpenCard(AT24C01A) 選擇卡型為AT24C01A。

                  ReadChr(Addr,Len)
                  說(shuō)明:從卡上指定地址讀取指定長(cháng)度的字符串。
                  參數:Addr----讀操作的卡內起始地址。
                  Len----字符串長(cháng)度。
                  返回值:從卡上讀取的字符串。
                  讀操作出錯。返回""。
                  舉例:cData = ReadChr(0, 10) 從卡上應用區地址0讀取10個(gè)字符。

                  WriteChr(Addr,Len,cData)
                  說(shuō)明:將指定長(cháng)度的字符串寫(xiě)入到卡片的指定起始地址上。
                  參數:Addr----寫(xiě)操作的卡內起始地址。
                  Len----字符串長(cháng)度。
                  cData----要向卡片寫(xiě)入的字符串。
                  返回值: =0,正確。
                  <0,寫(xiě)操作出錯。返回值代表錯誤號。
                  舉例:Ret = WriteChr(0, 14, "Testing MCS-C!") 將字符串寫(xiě)入卡地址0處。

                  ReadInt(Addr)
                  說(shuō)明:從卡上指定的起始地址讀取一個(gè)雙精度數。
                  參數:Addr----讀操作的卡內起始地址。
                  返回值:從卡上讀取的雙精度數。
                  舉例:iData = ReadInt(0) 從卡上應用區地址0讀取雙精度數。

                  WriteInt(Addr,iData)
                  說(shuō)明:將一個(gè)雙精度數寫(xiě)入到卡內指定起始地址處。
                  參數:Addr----寫(xiě)操作的卡內起始地址。
                  iData----要向卡內寫(xiě)入的雙精度數。
                  返回值: =0,正確。
                  <0,寫(xiě)操作出錯。返回值代表錯誤號。
                  舉例:Ret = WriteInt(0, 12345.6789) 將12345.6789寫(xiě)入到卡內地址0處。

                  CloseCard()
                  說(shuō)明:關(guān)閉卡操作
                  參數:無(wú)。
                  返回值: =0,正確。
                  <>0,出錯。返回值代表錯誤號。
                  舉例:Ret = CloseCard()

                  ReadFZ()
                  說(shuō)明:讀廠(chǎng)商代碼。
                  參數:無(wú)。
                  返回值:從卡上讀取廠(chǎng)商代碼(16進(jìn)制字符串)。
                  讀操作出錯。返回""。
                  舉例:FZ = ReadFZ()

                  ReadIZ()
                  說(shuō)明:讀卡商代碼。
                  參數:無(wú)。
                  返回值:從卡上讀取卡商代碼(16進(jìn)制字符串)。
                  讀操作出錯。返回""。
                  舉例:IZ = ReadIZ()

                  ReadCPZ()
                  說(shuō)明:讀代碼保護區。
                  參數:無(wú)。
                  返回值:從卡上讀取代碼保護區(16進(jìn)制字符串)。
                  讀操作出錯。返回""。
                  舉例:CPZ = ReadCPZ()

                  WriteCPZ(CPZ)
                  說(shuō)明:寫(xiě)代碼保護區。
                  參數:長(cháng)度為為16個(gè)字節的字符串(16進(jìn)制字符串)。
                  返回值: =0,正確。
                  <>0,出錯。返回值代表錯誤號。
                  舉例:Ret = WriteCPZ("0123456789ABCDEF")

                  ReadMTZ()
                  說(shuō)明:讀測試區。
                  參數:無(wú)。
                  返回值:從卡上讀取代碼保護區(16進(jìn)制字符串)。
                  讀操作出錯。返回""。
                  舉例:MTZ = ReadMTZ()

                  WriteMTZ(MTZ)
                  說(shuō)明:寫(xiě)測試區。
                  參數:字符串(16進(jìn)制字符串)。
                  返回值: =0,正確。
                  <>0,出錯。返回值代表錯誤號。
                  舉例:Ret = WriteMTZ("ABCDEF")

                  SetZone(Zone)
                  說(shuō)明:選擇應用區。
                  參數:Zone----要選擇的應用區號。0-n代表應用區0至應用區n。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = SetZone(1)

                  CheckSC(SC)
                  說(shuō)明:比較密碼(或區密碼)。
                  參數:字符串(16進(jìn)制字符串)。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = CheckSC("FFFF")

                  UpdateSC(SC)
                  說(shuō)明:更新密碼(或區密碼)。
                  參數:字符串(16進(jìn)制字符串)。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = UpdateSC("9999")

                  ReadSCAC()
                  說(shuō)明:讀密碼(或區密碼)校驗錯誤計數。
                  參數:無(wú)。
                  返回值:密碼校驗錯誤計數值。
                  舉例:SCAC = ReadSCAC()

                  CheckEZ(EZ)
                  說(shuō)明:比較擦除密碼(或區擦除密碼)。
                  參數:字符串(16進(jìn)制字符串)。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = CheckEZ("FFFF")

                  UpdateEZ(EZ)
                  說(shuō)明:更新擦除密碼(或區擦除密碼)。
                  參數:字符串(16進(jìn)制字符串)。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = UpdateEZ("9999")

                  ReadEZAC()
                  說(shuō)明:讀擦除密碼(或區擦除密碼)校驗錯誤計數。
                  參數:無(wú)。
                  返回值:密碼校驗錯誤計數值。
                  舉例:EZAC = ReadEZAC()

                  Erase(Addr,Len)
                  說(shuō)明:從指定位置起擦除指定長(cháng)度的字節。
                  參數:Addr----要擦除的起始地址。
                  Len----要擦除的長(cháng)度。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = Erase(0, 10)

                  Fuse()
                  說(shuō)明:燒斷卡上熔絲。
                  參數:無(wú)。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = Fuse()

                  ReadIC()
                  說(shuō)明:讀發(fā)布號(AT88SC153專(zhuān)用)。
                  參數:無(wú)。
                  返回值:發(fā)布號(16進(jìn)制字符串)。
                  舉例:Ret = ReadIC()

                  WriteIC(IC)
                  說(shuō)明:寫(xiě)發(fā)布號(AT88SC153專(zhuān)用)。
                  參數:字符串(16進(jìn)制字符串)。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = WriteIC("012456789ABCDEF")

                  ReadDCR()
                  說(shuō)明:讀設備設置寄存器(AT88SC153專(zhuān)用)。
                  參數:無(wú)。
                  返回值:設備設置寄存器的值(16進(jìn)制字符串)。
                  舉例:Ret = ReadDCR()

                  WriteDCR(DCR)
                  說(shuō)明:寫(xiě)設備設置寄存器(AT88SC153專(zhuān)用)。
                  參數:字符串(16進(jìn)制字符串)。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = WriteDCR("FF")

                  InitAuth(Nc,Ci,Gc)
                  說(shuō)明:初始化認證協(xié)議。
                  參數:Nc----識別碼。
                  Ci----密文。
                  Gc----密鑰。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = InitAuth(Nc,Ci,Gc)

                  CheckAuth(Gc)
                  說(shuō)明:認證協(xié)議。
                  參數:Gc----密鑰。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = CheckAuth(Gc)

                  ReadAAC()
                  說(shuō)明:讀認證錯誤計數。
                  參數:無(wú)。
                  返回值:認證校驗錯誤計數值。
                  舉例:AAC = ReadAAC()

                  ReadAR()
                  說(shuō)明:讀應用區的訪(fǎng)問(wèn)權限。
                  參數:無(wú)。
                  返回值:當前訪(fǎng)問(wèn)區權限字節(16進(jìn)制字符串)。
                  舉例:AR = ReadAR()

                  WriteAR(AR)
                  說(shuō)明:設置應用區的訪(fǎng)問(wèn)權限。
                  參數:AR----當前訪(fǎng)問(wèn)區權限字節(16進(jìn)制字符串)。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = WriteAR("FF")

                  CheckWP(WP)
                  說(shuō)明:比較當前區寫(xiě)密碼。
                  參數:字符串(16進(jìn)制字符串)。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = CheckWP("FFFFFF")

                  UpdateWP(WP)
                  說(shuō)明:更新當前區寫(xiě)密碼。
                  參數:字符串(16進(jìn)制字符串)。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = UpdateWP("999999")

                  ReadWPAC()
                  說(shuō)明:讀當前區寫(xiě)密碼校驗錯誤計數。
                  參數:無(wú)。
                  返回值:當前區寫(xiě)密碼校驗錯誤計數值。
                  舉例:WPAC = ReadWPAC()

                  CheckRP(RP)
                  說(shuō)明:比較當前區讀密碼。
                  參數:字符串(16進(jìn)制字符串)。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = CheckRP("FFFFFF")

                  UpdateRP(RP)
                  說(shuō)明:更新當前區讀密碼。
                  參數:字符串(16進(jìn)制字符串)。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = UpdateRP("999999")

                  ReadRPAC()
                  說(shuō)明:讀當前區讀密碼校驗錯誤計數。
                  參數:無(wú)。
                  返回值:當前區讀密碼校驗錯誤計數值。
                  舉例:RPAC = ReadRPAC()

                  FuseStatus()
                  說(shuō)明:讀取卡內熔絲狀態(tài)
                  參數:無(wú)。
                  返回值: =0,已熔。
                  =1,未熔。
                  舉例:PER = FuseStatus()

                  SetPage(Page)
                  說(shuō)明:選擇主存儲區的當前頁(yè)。
                  參數:Page----要選擇的頁(yè)號。1-n代表頁(yè)1至頁(yè)n。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = SetPage(1)

                  SetBuff(Buff)
                  說(shuō)明:選擇緩沖區。
                  參數:Buff----要選擇的緩沖區。1,2代表緩沖區1,緩沖區2。
                  返回值: =0,正確。
                  <0,出錯。返回值代表錯誤號。
                  舉例:Ret = SetBuff(1)

                  ReadPage(Addr,Len)
                  說(shuō)明:讀取主存儲區頁(yè)內的字符。
                  參數:Addr----要讀取的起始字節地址。
                  Len----要讀取的長(cháng)度。
                  返回值:返回的數據字符串。
                  舉例:cData = ReadPage(0,10)

                  ReadBuff(Addr,Len)
                  說(shuō)明:讀取緩沖區內的字符。
                  參數:Addr----要讀取的起始字節地址。
                  Len----要讀取的長(cháng)度。
                  返回值:返回的數據字符串。
                  舉例:cData = ReadBuff(0,10)

                  WritePage(Addr,Len,cData)
                  說(shuō)明:寫(xiě)字符到主存儲區頁(yè)。
                  參數:Addr----要寫(xiě)入的起始字節地址。
                  Len----要寫(xiě)入的長(cháng)度。
                  cData----用于存放寫(xiě)入卡片的數據的字符串。
                  返回值: =0,正確。
                  <0,返回值代表錯誤號。
                  舉例:Ret = WritePage(0,10,"1234567890")

                  WriteBuff(Addr,Len,cData)
                  說(shuō)明:寫(xiě)字符到緩沖區。
                  參數:Addr----要寫(xiě)入的起始字節地址。
                  Len----要寫(xiě)入的長(cháng)度。
                  cData----用于存放寫(xiě)入緩沖區的數據的字符串。
                  返回值: =0,正確。
                  <0,返回值代表錯誤號。
                  舉例:Ret = WriteBuff(0,10,"1234567890")

                  CompPB()
                  說(shuō)明:比較主存儲區頁(yè)與緩沖區的內容。
                  參數:無(wú)。
                  返回值: =0,正確。
                  <0,返回值代表錯誤號。
                  舉例:Ret = CompPB()

                  PageToBuff()
                  說(shuō)明:主存儲區內容向緩沖區傳送。
                  參數:無(wú)。
                  返回值: =0,正確。
                  <0,返回值代表錯誤號。
                  舉例:Ret = PageToBuff()

                  BuffToPage()
                  說(shuō)明:從緩沖區寫(xiě)數據到主存儲區頁(yè)。
                  參數:無(wú)。
                  返回值: =0,正確。
                  <0,返回值代表錯誤號。
                  舉例:Ret = BuffToPage()

                  ReadStatus()
                  說(shuō)明:讀狀態(tài)字(忙閑)
                  參數:無(wú)。
                  返回值: =0,閑。
                  <0,返回值代表忙或錯誤號。
                  舉例:Ret = ReadStatus()

                  AutoRWrite()
                  說(shuō)明:自動(dòng)回寫(xiě)。
                  參數:無(wú)。
                  返回值: =0,正確。
                  <0,返回值代表錯誤號。
                  舉例:Ret = AutoRWrite()
                  附錄一:卡類(lèi)型預定義
                  AT24C01 = 0
                  AT24C01A = 1
                  AT24C02 = 2
                  AT24C04 = 3
                  AT24C08 = 4
                  AT24C16 = 5
                  AT24C32 = 6
                  AT24C64 = 7
                  AT24C128 = 8
                  AT24C256 = 9

                  AT88SC102 = 12
                  AT88SC1604_E = 15
                  AT88SC6603 = 15
                  AT88SC1604_N = 16
                  AT88SC6601 = 16
                  AT88SC1608 = 17
                  AT88SC153 = 18

                  AT45D041 = 23
                  附錄二:ICFOX.PLB測試例程
                  SET TALK OFF
                  SET LIBR TO ICFOX
                  ? ErrorMsg(InitComm(0))
                  ? ErrorMsg(TestCard(0))
                  ? ErrorMsg(OpenCard(1))
                  ? ErrorMsg(WriteChr(0,10,”0123456789”))
                  rData=ReadChr(0,10)
                  =Close()
                  IF rData <> “0123456789”
                  ? “讀卡錯誤”
                  ELSE
                  ? “測試正?!?BR>ENDIF
                  RETURN
                  第三章 接觸式IC卡底層軟件開(kāi)發(fā)實(shí)例
                  對了更好地說(shuō)明接觸式IC卡讀寫(xiě)器是如果工作的,本章公布了部分德誠系統有限公司MCS-C讀寫(xiě)器低層CPU的C51程序,包括了IC卡操作底層函數,以AT24C64卡為例的實(shí)例程序。這些程序是根據德誠系統有限公司實(shí)際使用的函數向用戶(hù)公開(kāi)的,也可供其它打算生產(chǎn)接觸式IC卡讀寫(xiě)器的廠(chǎng)家參考,以便開(kāi)發(fā)自已的IC卡驅動(dòng)函數。
                  ??2 IC卡操作底層函數
                  1? IC卡操作底層函數說(shuō)明:
                  IC卡座的引腳定義示意圖如下:

                  VCC [C1] [C5] GND
                  RESET [C2] [C6] No Use
                  CLK [C3] [C7] I / O
                  FUS [C4] [C8] PGM

                  void _CardSetPower(uchar Level);
                  功能:將IC卡讀寫(xiě)器Vcc段上電或下電。
                  輸入:Level
                  當Level=1,給IC卡讀寫(xiě)器上電。
                  當Level=0,給IC卡讀寫(xiě)器下電。
                  輸出:無(wú)

                  void _CardSetReset(uchar Level);
                  功能:置IC卡讀寫(xiě)器Reset高或低。
                  輸入:Level
                  當Level=1,給IC卡讀寫(xiě)器Reset端置高。
                  當Level=0,給IC卡讀寫(xiě)器Reset端置低。
                  輸出:無(wú)

                  void _CardSetClock(uchar Level);
                  功能:置IC卡讀寫(xiě)器Clock高或低。
                  輸入:Level
                  當Level=1,給IC卡讀寫(xiě)器Clock置高。
                  當Level=0,給IC卡讀寫(xiě)器Clock置低。
                  輸出:無(wú)

                  void _CardSetPGM(uchar Level);
                  功能:置IC卡讀寫(xiě)器PGM高或低。
                  輸入:Level
                  當Level=1,給IC卡讀寫(xiě)器PGM置高。
                  當Level=0,給IC卡讀寫(xiě)器PGM置低。
                  輸出:無(wú)

                  void _CardSetFUS(uchar Level);
                  功能:置IC卡讀寫(xiě)器FUS高或低。
                  輸入:Level
                  當Level=1,給IC卡讀寫(xiě)器FUS置高。
                  當Level=0,給IC卡讀寫(xiě)器FUS置低。
                  輸出:無(wú)

                  void _CardPutIO(uchar IOData);
                  功能:將數據由IC卡讀寫(xiě)器IO端輸出。
                  輸入:IOData輸出數據,值是0或1。
                  輸出:無(wú)

                  uchar _CardReadIO();
                  功能:讀取IC卡讀寫(xiě)器IO端數據
                  輸入:無(wú)
                  輸出:IC卡輸出的數據,值是0或1。
                  2? IC卡低層通訊頭文件(Base.h)
                  低層通訊函數用戶(hù)可根據自已的設備編寫(xiě)。
                  #define uchar unsigned char
                  #define uint unsigned int
                  #define ulong unsigned long
                  /****************************************************
                  IC卡低層通訊頭文件:
                  ****************************************************/
                  void _CardSetPower(uchar Level);
                  void _CardSetReset(uchar Level);
                  void _CardSetClock(uchar Level);
                  void _CardSetPGM(uchar Level);
                  void _CardSetFUS(uchar Level);
                  void _CardPutIO(uchar IOData);
                  uchar _CardReadIO();
                  2? AT24C64卡應用實(shí)例
                  1.AT24C64卡函數頭文件(AT24C64.h)
                  /****************************************************
                  the AT24C64 Card Declare:
                  ****************************************************/
                  uchar AT24C64_Open();
                  uchar AT24C64_Read(uint Addr,uint DataLen,uchar *DataBuff);
                  uchar AT24C64_Write(uint Addr,uint DataLen,uchar* DataBuff);
                  uchar AT24C64_Close();
                  2.AT24C64卡函數
                  //**********************************************************
                  //* This is source of 24C64.LIB *
                  //* This program demo how to program 24C64.LIB *
                  //**********************************************************
                  #include <Base.h>
                  #include <AT24C64.h>

                  void AT24C64_Pulse();
                  void AT24C64_Start();
                  void AT24C64_Stop();
                  void AT24C64_OutB(uchar OutData);
                  uchar AT24C64_InB();

                  /*******************************
                  This function used by the
                  external user's function
                  *******************************/
                  void AT24C64_Pulse()
                  {
                  _CardSetClock(1);
                  _CardSetClock(0);
                  }
                  void AT24C64_Start()
                  {
                  _CardPutIO(1); _CardSetClock(1);
                  _CardPutIO(0); _CardSetClock(0);
                  }
                  void AT24C64_Stop()
                  {
                  _CardPutIO(0); _CardSetClock(1);
                  _CardPutIO(1); _CardSetClock(0);
                  }

                  void AT24C64_OutB(uchar OutData)
                  {
                  uchar i;
                  for (i = 0;i < 8;i++)
                  {
                  if ( (OutData & 0x80) == 0x80 ) _CardPutIO(1); else _CardPutIO(0);
                  AT24C64_Pulse(); OutData = OutData << 1;
                  }
                  _CardPutIO(1); AT24C64_Pulse();
                  }

                  uchar AT24C64_InB()
                  {
                  uchar i,InData = 0;
                  for (i = 0;i < 8;i++)
                  {
                  InData = InData << 1; _CardSetClock(1);
                  InData = InData + _CardReadIO(); _CardSetClock(0);
                  }
                  return InData;
                  }

                  /***************************************
                  This function used by user
                  ****************************************/
                  // open card
                  uchar AT24C64_Open()
                  {
                  uchar i,InData,TmpSt[10];
                  _CardSetPower(1);
                  _CardSetClock(0);
                  _CardSetReset(0);
                  _CardSetReset(1);
                  _CardPutIO(1);
                  AT24C64_Pulse();
                  _CardSetReset(0);
                  for(i = 0;i < 4;i++) TmpSt[i] = AT24C64_InB();
                  if (TmpSt[0] == 0xFF) return 1;
                  if (TmpSt[1] == 0xFF) return 1;
                  if (TmpSt[2] == 0xFF) return 1;
                  if (TmpSt[3] == 0xFF) return 1;
                  return 0;
                  }

                  uchar AT24C64_Read(uint Addr,uint DataLen,uchar *DataBuff)
                  {
                  uint i;

                  _CardSetReset(1); _CardSetReset(0);
                  AT24C64_Start();
                  AT24C64_OutB(0xA0);
                  AT24C64_OutB((uchar)(Addr >> 8));
                  AT24C64_OutB((uchar)Addr);
                  AT24C64_Start();
                  _CardPutIO(1);
                  AT24C64_OutB(0xA1);
                  for (i = 0;i < DataLen;i++) {
                  *(DataBuff + i) = AT24C64_InB();
                  _CardPutIO(0); AT24C64_Pulse(); _CardPutIO(1);
                  }
                  AT24C64_Stop();
                  for (i = 0;i < 32; i++) AT24C64_Pulse();
                  return 0;
                  }

                  uchar AT24C64_Write(uint Addr,uint DataLen,uchar* DataBuff)
                  {
                  uint i;

                  for (i = 0;i < DataLen;i++) {
                  AT24C64_Start();
                  AT24C64_OutB(0xA0);
                  AT24C64_OutB((uchar)((Addr + i) >> 8));
                  AT24C64_OutB((uchar)(Addr + i));
                  AT24C64_OutB(*(DataBuff + i));
                  AT24C64_Stop();
                  _Delay(20);
                  }
                  return 0;
                  }

                  uchar AT24C64_Close()
                  {
                  // set power pin low
                  _CardPutIO(0);
                  _CardSetClock(0);
                  _CardSetReset(0);
                  _CardSetPower(0);
                  return 0;
                  }
                  3? AT24C64卡應用例程(App24C64.c)
                  #include<AT24C64.h>

                  uchar _App24C64(uchar *cData)
                  {
                  AT24C64_Open();
                  AT24C64_Write(0x0050, 16,cData);
                  AT24C64_Close();

                  AT24C64_Open();
                  AT24C64_Read(0x0050, 16,cData);
                  AT24C64_Close();

                  return 0x00;
                  }

                  第一章 ATMEL CPU卡簡(jiǎn)介
                  AT89SC系列是低電壓、高性能的8位微處理器。內含可編程的FLASH、只可一次編程的內存單元(PEROM)和電可擦寫(xiě)數據存儲單元(EEPROM)。該89SC系列產(chǎn)品運用ATMEL的高密度CMOS工藝制造,同工業(yè)標準的80C51和80C52指令集相兼容。
                  AT90SC系列產(chǎn)品與ATMEL的AVR指令集相兼容,內部帶有協(xié)處理器。
                  通過(guò)將FLASH和一個(gè)多性能的8位微處理器集成在單一片上,AT89SC/90SC系列為多種智能卡的應用提供了高度靈活和性能完備的解決方案。
                  值得一提的是,AT89SC/90SC具有專(zhuān)為智能卡應用而設計的特性:如符合ISO7816標準的串行接口,隨機數發(fā)生器,電源和頻率保護邏輯。

                  Device Name Flash EEPROM RAM
                  AT89SC168 16 K bytes 8 K bytes 256 bytes
                  AT89SC168A 16 K bytes 8 K bytes 512 bytes
                  AT89SC1616A 16 K bytes 16 K bytes 512 bytes
                  AT90SC3232 32 K bytes 32K bytes 1.5Kbytes
                  AT90SC3232C (協(xié)處理器) 32 K bytes 32K bytes 1K bytes

                  我們?yōu)橄矏?ài)用ATMEL CPU卡和設計COS的客戶(hù)提供了如下的解決方案:
                  Help customers to use DEMOCOS and design their own COS.
                  --幫助客戶(hù)使用DEMOCOS和設計自己的COS。
                  DEMOCOS ( source code ) : it is a completed COS, supports ISO-7816 command and t=0 protocol.
                  --DEMOCOS(提供源代碼)是一個(gè)完整的COS,支持ISO-7816 命令和T=0協(xié)議。
                  51 ASSEMBLER COMPILER: --51匯編語(yǔ)言編譯器
                  COS (for AT89SC168 ) SOFTWARE SIMULATOR:
                  --COS 軟件仿真器(支持AT89SC168)。
                  READER SOFTWARE SIMULATOR:
                  --讀卡器軟件仿真器。
                  READER(support T=0) for upload COS:
                  --可以下載COS的讀卡器。
                  第二章 ATMEL AT89SC系列CPU卡介紹
                  ATMEL公司的AT89SC系列CPU卡微處理器集成了FLASH程序存儲器、EEPROM數據存儲器和ISO7816通訊接口,并且引腳符合ISO7816標準。
                  該CPU卡的FLASH程序存儲器是可以讓用戶(hù)自行下載的,這樣就可以保證用戶(hù)的COS源代碼不會(huì )泄露出去。更為優(yōu)異的是:是否可以重新下載FLSAH完全由用戶(hù)的COS來(lái)設置,這樣可以實(shí)現重復可下載和一次性下載兩種模式。
                  AT89SC系列微處理器提供了兩種軟件控制的低電壓工作方式:
                  閑置模式:CPU停止工作,芯片上其他部分繼續工作。在閑置狀態(tài)下,電流大約是芯片處于完全工作狀態(tài)時(shí)電流的15%。
                  休眠模式: 芯片上一切活動(dòng)均被掛起,RAM中還保留數據。在休眠狀態(tài)下,芯片的電流通常低于15A,最低可達到0.6A。
                  同時(shí),由于芯片使用靜態(tài)邏輯設計,無(wú)須時(shí)鐘持續工作。這就是說(shuō),在等待一個(gè)內部事件的觸發(fā)時(shí),時(shí)鐘頻率可以減緩,甚至停止。
                  安全特性:
                  AT89SC系列微處理器提供了下述安全特性:
                  低電壓保護;
                  低頻保護,防止靜態(tài)分析;
                  高頻濾波,防止干擾;
                  傳輸代碼,保護芯片在運輸過(guò)程中不被盜用;
                  唯一系列代碼;
                  當時(shí)鐘頻率低于500KHz或電壓低于4V時(shí),芯片會(huì )產(chǎn)生一個(gè)安全保護中斷;
                  當時(shí)鐘頻率高于10MHz或電壓低于3V時(shí),芯片處于復位狀態(tài),直至電壓或時(shí)鐘頻率恢復正常;
                  芯片在運輸過(guò)程及初始化時(shí)受到64位的傳輸代碼的保護。
                  Device Name Flash EEPROM RAM
                  AT89SC168 16 K bytes 8 K bytes 256 bytes
                  AT89SC168A 16 K bytes 8 K bytes 512 bytes
                  AT89SC1616A 16 K bytes 16 K bytes 512 bytes

                  第三章 ATMEL 89SC168卡 DemoCos 簡(jiǎn)介
                  如果用戶(hù)獲得了一套ATMEL 168 DEMOCOS,即使不做任何改動(dòng),就可以利用它靈活地創(chuàng )建自己的文件和安全系統。DEMOCOS的代碼大小為4.5K,分為通訊模塊、文件系統模塊、和算法模塊,但是認證算法比較簡(jiǎn)單,如果想改變算法(這是目前大多數客戶(hù)的想法),請將DEMOCOS讀懂(這有一定的挑戰性,但DEMOCOS是模塊化編程,注釋詳細)后重寫(xiě)算法,也可以添加其他的功能,用戶(hù)還有很多的程序空間可用。
                  另外,由于A(yíng)TMEL的CPU卡的不斷更新,如容量大小的改變,通訊方式的改變,以及REBOOT方式的改變,ATMEL公司會(huì )指導用戶(hù)對DEMOCOS做相應的調整。

                  一、文件系統

                  1、文件分類(lèi)
                  設多層目錄:MF(3F00)、DF(具體應用目錄,最多可以建立15級目錄)
                  EF分為SF、KF和WF:
                  SF是密碼文件,各層目錄均可有一個(gè),存放用戶(hù)密碼。
                  KF是密鑰文件,各層目錄均可有一個(gè),存放發(fā)行商密鑰。
                  WF是工作文件,數據文件EF。
                  支持兩種標準EF文件結構:線(xiàn)性定長(cháng)記錄、透明二進(jìn)制。
                  本結構支持一卡多用。

                  2、文件訪(fǎng)問(wèn)方式
                  使用文件標識符(FID)進(jìn)行訪(fǎng)問(wèn):
                  每一文件中有兩字節長(cháng)的標識符,允許不同的文件具有相同的標識符,在直接處于給定DF下的所有EF和DF應具有不同的文件標識符。
                  使用短EF文件標識符(SFI)進(jìn)行訪(fǎng)問(wèn):
                  短EF文件標識符用5位二進(jìn)制碼(1~30)表示。短EF文件標識符不能用在路徑中或作為文件標識符,如不能用在Select File命令中進(jìn)行選擇。

                  3、數據訪(fǎng)問(wèn)方式
                  訪(fǎng)問(wèn)記錄:
                  在記錄結構的EF中,可以用記錄編號訪(fǎng)問(wèn)記錄數據。記錄編號是一個(gè)無(wú)符號的8位整數,其可用值為01H~FEH,00H保留于專(zhuān)用,FFH保留于將來(lái)使用。
                  訪(fǎng)問(wèn)數據單元:
                  在透明二進(jìn)制結構的EF文件中,每一個(gè)數據單元的位置由命令的偏移值給出,其下一個(gè)數據單元的位置由偏移值加數據單元長(cháng)度后產(chǎn)生。

                  二、安全系統

                  1、密碼和密鑰管理
                  1)密碼類(lèi)型
                  SF文件最多由4個(gè)密碼記錄組成,密碼編號從0到3依次排列。其中:
                  0號密碼默認為用戶(hù)個(gè)人密碼;
                  1號密碼默認為解鎖密碼(發(fā)行商用);
                  2號密碼默認為個(gè)人化密碼(發(fā)行商用);
                  3號密碼默認為重裝密碼(發(fā)行商用);

                  2)密鑰
                  KF文件最多由8個(gè)密鑰記錄組成,密碼編號從0到7依次排列

                  2、安全規程
                  ①卡的確認:內部鑒別(鑒別密鑰)。
                  ②終端確認:外部鑒別(鑒別密鑰)。
                  ③持卡人確認:PIN密碼提交驗證。
                  ④發(fā)行者確認:發(fā)行密碼提交驗證。
                  ⑤其他密碼驗證。
                  ⑥對安全系統文件進(jìn)行寫(xiě)操作時(shí)的反插拔與自動(dòng)恢復。

                  三、命令系統

                  1、命令報文
                  1)命令結構:

                  命令頭 命令體
                  CLA INS P1 P2 Lc Data Le

                  2)命令分類(lèi):
                  COS命令由具體應用分為4種命令報文結構如下:
                  ①情形1
                  CLA INS P1 P2 ‘00’
                  ②情形2
                  CLA INS P1 P2 Le
                  ?情形3
                  CLA INS P1 P2 Lc Data
                  ?情形4
                  CLA INS P1 P2 Lc Data Le

                  2、響應報文
                  1)響應結構

                  響應數據 響應狀態(tài)碼
                  Data SW1 SW1

                  DATA: 返回給用戶(hù)的數據,即命令的執行結果。
                  SW1、SW2: 返回命令處理的狀態(tài)。

                  3、命令集

                  1)Read Binary
                  功能:
                  此命令用于讀取二進(jìn)制文件部分或全部的內容。
                  格式:
                  代碼 值
                  CLA ‘00’
                  INS ‘B0’
                  P1 見(jiàn)參數說(shuō)明
                  P2 從文件中讀取的第一字節的偏移地址
                  Le 期望讀出數據的長(cháng)度

                  2)Update Binary
                  功能:
                  此命令使用給定的數據來(lái)更新二進(jìn)制文件部分或全部的內容。
                  格式:
                  代碼 值
                  CLA ‘00’
                  INS ‘D6’
                  P1 見(jiàn)參數說(shuō)明
                  P2 要修改的第一字節的偏移地址
                  Lc 后續數據域的長(cháng)度
                  Data 修改用的數據

                  3)Read Record
                  功能:
                  此命令用于讀取記錄文件中指定記錄的內容。
                  格式:
                  代碼 值
                  CLA ‘00’
                  INS ‘B2’
                  P1 記錄號
                  P2 見(jiàn)參數說(shuō)明
                  Le 期望讀出數據的長(cháng)度

                  4)Update record
                  功能:
                  此命令使用給定的數據來(lái)更新記錄文件中指定記錄的內容。當所指定的文件非記錄文件時(shí),命令將終止。
                  格式:
                  代碼 值
                  CLA ‘00’
                  INS ‘DC’
                  P1 P1=‘00’表示當前記錄 P1≠‘00’表示指定的記錄號
                  P2 見(jiàn)參數說(shuō)明
                  Lc 后續數據域的長(cháng)度
                  Data 更新原有記錄的新記錄

                  5)Verify PIN
                  功能:
                  此命令將校驗給定的密碼的正確性,根據比較的結果修改安全狀態(tài),若校驗失敗次數達到PIN嘗試上限,則PIN自動(dòng)鎖定。
                  格式:
                  代碼 值
                  CLA ‘00’
                  INS ‘20’
                  P1 ‘00’
                  P2
                  Lc ’02’~‘10’
                  Data 外部輸入的個(gè)人密碼

                  6)Select File
                  功能:
                  此命令使用文件名或應用標示符來(lái)選擇IC卡內DF或EF。
                  格式:
                  代碼 值
                  CLA ‘00’
                  INS ‘A4’
                  P1 ‘00’
                  P2 ‘00’
                  Lc ‘00’(選擇MF文件)/ ‘02’
                  Data 無(wú) / FID

                  7)Get Challenge
                  功能:
                  此命令請求IC卡返回一個(gè)用于安全相關(guān)過(guò)程的隨機數。
                  格式:
                  代碼 值
                  CLA ‘00’
                  INS ‘84’
                  P1 ‘00’
                  P2 ‘00’
                  Le ‘04’

                  8)Get Response
                  功能:
                  此命令為T(mén)=0協(xié)議情形4狀態(tài)下,用來(lái)取卡中返回的數據。
                  格式:
                  代碼 值
                  CLA ‘00’
                  INS ‘C0’
                  P1 ‘00’
                  P2 ‘00’
                  Le 響應的期望數據最大長(cháng)度

                  9)Internal Authenticate
                  功能:
                  此命令將為外部設備驗證卡中的秘密模塊的有效性提供數據。
                  格式:
                  代碼 值
                  CLA ‘00’
                  INS ‘88’
                  P1 ‘00’
                  P2 ‘00’~‘07’密鑰號
                  Lc ‘04’
                  Data 外部隨機數(4字節)

                  10)External Authenticate
                  功能:
                  此命令將驗證外部設備中的秘密模塊的有效性。
                  格式:
                  代碼 值
                  CLA ‘00’
                  INS ‘82’
                  P1 ‘00’
                  P2 ‘00’ ~‘07’密鑰號
                  Lc ‘0C’
                  Data 發(fā)卡方認證數據

                  11)Change / Unlock PIN
                  功能:修改、解鎖、安裝卡片個(gè)人密碼。
                  格式:
                  代碼 值
                  CLA ‘00’
                  INS ‘5E’
                  P1 ‘00’ 修改卡片個(gè)人密碼;‘01’ 解鎖卡片個(gè)人密碼;‘02’ 安(重)裝卡片個(gè)人密碼
                  P2 密碼號
                  Lc
                  Data
                  12)Unlock Key
                  功能:
                  解鎖卡片應用密鑰。
                  格式:
                  代碼 值
                  CLA ‘00’
                  INS ‘5C’
                  P1 ‘01’ 解鎖應用密鑰 ‘02’ 安裝卡片應用密鑰
                  P2 密鑰號
                  Lc 無(wú) / 密鑰長(cháng)度
                  Data 無(wú) / 加密的密鑰

                  13)Create File
                  功能:
                  此命令創(chuàng )建卡片文件系統。
                  格式:
                  代碼 值
                  CLA ‘00’/ ’80’
                  INS ‘F2’
                  P1 ‘00’/ FTP 文件類(lèi)型
                  P2 ‘00’/ FAC 文件訪(fǎng)問(wèn)控制條件
                  Lc 無(wú) / ‘07’
                  Data
                  第四章 AT90SC3232C帶有協(xié)處理器的CPU卡
                  AT90SC3232C是ATMEL公司最新推出的內含協(xié)處理器的CPU卡,它以高性能、低功耗的AVR 8位CPU為核心,配合一個(gè)16位的協(xié)處理器(SC16)完成高速的保密和認證功能。

                  1)AT90SCC系列CPU卡的型號如下:
                  型號 程序空間 EEPROM空間 RAM空間 協(xié)處理器 RF接口
                  AT90SC1616C 16K Flash 16K 1K YES NO
                  AT90SC3232 32K Flash 32K 1K NO NO
                  AT90SC3232C 32K Flash 32K 1K YES NO
                  AT90SC3232CRF 32K ROM 32K 1K YES YES

                  2)AT90SC3232C的特征如下:
                  高效、低功耗的AVR RISC CPU:含有120條指令,大多數指令為單個(gè)時(shí)鐘周期;
                  32K字節(16K字)的可下載一千次的程序存儲器;
                  32K字節的EEPROM數據存儲器;
                  1K字節RAM;
                  16位協(xié)處理器,預編程功能可用于保密和認證,一次1024位RSA的算法用220ms;
                  監管模式(存儲器管理);
                  ISO-7816接口;
                  隨機數發(fā)生器;
                  16位定時(shí)器;
                  5個(gè)中斷源,兩個(gè)優(yōu)先級;
                  安全特征:掉電保護,低頻保護,高頻濾波,程序代碼加密;
                  低功耗閑置模式和掉電模式;
                  2.7V-5.5V的工作電壓。

                  一、AT90SC3232C結構概述:
                  AT90SC3232C是基于A(yíng)VR RISC增強型結構,有32個(gè)工作寄存器均可以單時(shí)鐘周期訪(fǎng)問(wèn),高性能的ALU(算術(shù)邏輯單元)可在一個(gè)時(shí)鐘周期內完成取指、運算、和輸出結果的工作。ALU的操作分為3類(lèi):算術(shù)、邏輯和位操作功能。
                  在32個(gè)工作寄存器中,有6個(gè)寄存器可以被組成3對16位的間接尋址指針X、Y、Z。用以提高數據空間的訪(fǎng)問(wèn)速度,其中一個(gè)指針還可以用于常數查表。

                  圖1,AT90SC3232C結構圖

                  I/O空間包括64個(gè)地址,用于CPU對外設的訪(fǎng)問(wèn),如對控制寄存器、定時(shí)/計數器、外部中斷及ISO 7816引腳的訪(fǎng)問(wèn)。
                  AVR CPU采用哈佛結構,程序區和數據區是分開(kāi)的,程序存儲器使用單級管道流水線(xiàn)訪(fǎng)問(wèn),即:當一條指令被執行時(shí),下條指令被預先取出,這種機制使得在每個(gè)時(shí)鐘周期CPU都可以執行指令。
                  AT90SCC 的程序計數器(PC)是16位,可以訪(fǎng)問(wèn)64K字的地址空間,大多數的AVR指令都采用16位的字結構。

                  二、協(xié)處理器和RAM
                  AT90SC3232C內含一個(gè)16位的協(xié)處理器(SC16)和1K字節的RAM,可以方便地實(shí)現公共密鑰算法(如RSA),它與AVR CPU的接口采用RAM X空間而RAM Y空間被協(xié)處理器用做工作區。
                  公共密鑰算法(簡(jiǎn)稱(chēng)公鑰算法)簡(jiǎn)介:算法使用2個(gè)密鑰,公共密鑰(簡(jiǎn)稱(chēng)公鑰)和私有密鑰(簡(jiǎn)稱(chēng)私鑰),他們是一對兒。當一個(gè)密鑰用于加密時(shí),僅有另一個(gè)密鑰可用于解密,關(guān)鍵特點(diǎn)是在實(shí)踐中從公鑰不能推出私鑰,也不能用公鑰來(lái)完成私鑰的解密過(guò)程,這樣就可以把公鑰公開(kāi)而不會(huì )泄密。
                  公鑰算法有兩個(gè)應用:一是信息加密傳送,二是認證(如數字簽名)。
                  RSA算法是公鑰算法的一種,他基于數學(xué)上的對大數分解因子的難度。算法中私鑰包括兩個(gè)互質(zhì)的大數P、Q,和一個(gè)冪E,公鑰包含一個(gè)大數N=P*Q和冪E。設M(明文)是0至N-1之間的數。
                  則加密過(guò)程如下:
                  密文C=MEmod(N)
                  而解密過(guò)程相反。
                  AT90SC3232C的協(xié)處理器(SC16)可以實(shí)現公鑰和私鑰的運算,但是并不能直接生成密鑰。它有三個(gè)主要的運算功能(均可以對1024位的數據操作)。
                  1.“LOAD MODULUS”功能,即裝載N。
                  2.“LOAD PRIMES”功能,即裝載P、Q。
                  3.“MODULAR EXPONENTIATION”模冪運算功能。
                  模冪運算的操作為:DataEXPmod(Modulus),[按照符合中國剩余原理或者不符合的規則]。顯然,模冪運算功能的實(shí)現大大加快了RSA算法的運算過(guò)程。

                  三、ISO-7816接口:AT90SC3232C的引腳符合ISO-7816標準。
                  ISO-7816的接口包含以下引腳:
                  GND:地線(xiàn);
                  VCC:電源;
                  I/O:串行數據;
                  CLK:時(shí)鐘;
                  RST:復位;
                  I/O口由I/0控制寄存器的某一位來(lái)控制(置位/清除),輸入由I/O數據寄存器的某一位來(lái)獲得,I/O口也可以產(chǎn)生中斷。

                  四、安全保護機制
                  AT90SC3232C片內含有監管系統,該系統可以管理內存,監督用戶(hù)程序對內存的非法操作。
                  為了防止外部對芯片的探測,AT90SC3232C還具有如下措施:
                  內部總線(xiàn)特殊處理,外觀(guān)沒(méi)有明顯結構,數據和地址總線(xiàn)均被埋入金屬層之下。
                  程序和數據均可以擾亂加密,在A(yíng)TMEL工廠(chǎng)可以完成對總線(xiàn)的熔絲,使得同一條指令在不同的位置時(shí)代碼也不同,用戶(hù)還可以設置自己的擾亂密鑰。

                  五、結束語(yǔ)
                  AT90SC3232C是新一代的高速保密控制器,它具有高度的保密性和高速運算的能力,因此,它非常適用于商業(yè)銀行的金融業(yè)務(wù)、政府及軍警的機要通信業(yè)務(wù)。
                  ATMEL 公司還備有CPU卡的硬件開(kāi)發(fā)系統,如下圖所示:

                  本文關(guān)鍵詞:ATMEL,接觸式,IC卡
                  回到頂部
                  99久热只有精品视频在线17_精品一区二区三区自拍图片_最新国产v亚洲_久久综合九色综合久
                  <strike id="tpvd9"><dfn id="tpvd9"></dfn></strike>

                        <em id="tpvd9"></em>

                          <address id="tpvd9"></address>
                            <dfn id="tpvd9"><sub id="tpvd9"></sub></dfn>

                            <thead id="tpvd9"><noframes id="tpvd9">
                            <ruby id="tpvd9"></ruby>

                                  <thead id="tpvd9"></thead>