張李靜 張秋燕
摘 要:設(shè)計(jì)了智能卡操作系統(tǒng)底層驅(qū)動模塊和FLASH讀寫模塊,并提出針對這些模塊函數(shù)的測試方案。首先介紹智能卡操作系統(tǒng)的基本概念和智能卡硬件的基本結(jié)構(gòu);然后以接觸式智能卡為例,從芯片的硬件結(jié)構(gòu)出發(fā),提出COS操作系統(tǒng)通信和硬件模塊以及操作系統(tǒng)的異常處理機(jī)制的設(shè)計(jì)方案,并提出一種操作系統(tǒng)底層的測試方案,即Testing COS。這里從COS性能的角度出發(fā)設(shè)計(jì)底層模塊,并提出針對底層模塊函數(shù)的測試方案。
關(guān)鍵詞:操作系統(tǒng);ISO7816-3;測試模塊;Testing COS
中圖分類號:TP368.1 文獻(xiàn)標(biāo)識碼:A 文章編號:1004-373X(2009)04-027-04
Research on Design and Testing Scheme of Smart Card COS Chip Module
ZHANG Lijing,ZHANG Qiuyan
(Electronic and Communication Project Engineering,Tianjin University of Technology,Tianjin,300191,China)
Abstract:A bottom drive module of smart card and the read and write module of FLASH are designed,and a programme to test the functions of these modules is proposed.First,it introduces the basic concept of the COS and the basic construction of the chip′s hardware.Then,takes the contact chip as an example,proposes communication and hardware module and the anomaly handling mechanism of the COS based on the chip′s hardware.At the same time,it supplies a testing programme of bottom of the operating system,namely Testing COS.The bottom module is designed based on the performance of COS,and testing method of the bottom module is put forward.
Keywords:operating system;ISO7816-3;testing module;Testing COS
0 引 言
隨著科學(xué)技術(shù)的不斷進(jìn)步,智能卡的應(yīng)用已經(jīng)越來越廣泛,涉及到人類生活的各個領(lǐng)域,如商業(yè)、醫(yī)療、保險(xiǎn)、交通、社會公共事業(yè)等多種領(lǐng)域,所以如何設(shè)計(jì)一個高效穩(wěn)定的智能卡操作系統(tǒng)[1]具有較高的社會意義。這里針對智能卡的硬件結(jié)構(gòu)設(shè)計(jì)了操作系統(tǒng)的通信和硬件其他模塊[2],并提出了一種測試方案以檢測芯片底層模塊的穩(wěn)定性。
1 智能卡操作系統(tǒng)概述
片內(nèi)操作系統(tǒng)(Chip Operating System,COS)一般是緊緊圍繞著它所服務(wù)的智能卡的特點(diǎn)而開發(fā)的[3]。與常見的微機(jī)上的操作系統(tǒng)相比,COS在本質(zhì)上更加接近于監(jiān)控程序[4]。在此以具體開發(fā)實(shí)例說明卡片操作系統(tǒng)的基本問題,并提出一種可行可測試的芯片層設(shè)計(jì)方案及一種芯片底層的測試方案。
2 COS芯片模塊設(shè)計(jì)
COS底層模塊在設(shè)計(jì)時(shí)一般都是緊密結(jié)合智能卡內(nèi)存儲器分區(qū)的情況,按照國際標(biāo)準(zhǔn)中所
規(guī)定的一些功能進(jìn)行設(shè)計(jì)、開發(fā)。
ISO7816是接觸式智能卡必須遵循的國際規(guī)范[5]。其中ISO7816-3主要描述接觸式智能卡的電信號和傳輸協(xié)議,其中包括各個觸點(diǎn)的電壓電流承受范圍、卡復(fù)位應(yīng)答各個信息位的實(shí)際表示和T=0,T=1的傳輸協(xié)議。 ISO/IEC 7816-3規(guī)定了IC卡的電氣特性和傳輸協(xié)議。包括該類卡和接口設(shè)備間的電源、電氣信號協(xié)議和信息交換協(xié)議。通信過程中,由接口設(shè)備給IC卡提供電源(Vcc),復(fù)位信號(RST)和時(shí)鐘(CLK),卡和接口設(shè)備間通過I/O端口進(jìn)行串行通信。
(1)通信模塊設(shè)計(jì)。
根據(jù)T=0異步半雙工字符傳輸協(xié)議,IC卡和接口設(shè)備之間以字符為單位(簡稱字符幀)進(jìn)行傳輸,采用偶校驗(yàn),每個字符由10 b組成。傳輸字符幀之前,I/O線處于狀態(tài)Z,第1 b為起始位(狀態(tài)A);后面8 b為數(shù)據(jù)位D1~D8;第10 b為偶校驗(yàn)位,即8位數(shù)據(jù)和奇偶校驗(yàn)位中1的個數(shù)為偶數(shù)。
串行通信是按位傳送的,每位信息寬度(持續(xù)時(shí)間)定義為基本時(shí)間單位ETU(Elementary Time Unit)。在復(fù)位應(yīng)答期間的信息寬度稱為“初始ETU”,它等于372個時(shí)鐘周期,即1ETU=372/f。復(fù)位應(yīng)答后的信息寬度稱為“當(dāng)前ETU”,其計(jì)算公式為:當(dāng)前ETU=(F/D)(1/f)。其中:F是時(shí)鐘頻率變換因數(shù);D是比特率調(diào)整因數(shù);f是時(shí)鐘頻率。
IC卡必須與相應(yīng)的讀寫設(shè)備(IFD)通信。從這個角度講,智能IC卡操作系統(tǒng)的作用就是從讀寫設(shè)備(IFD)接收命令、執(zhí)行命令并將結(jié)果返回讀寫設(shè)備(IFD)[6]。所以,通信管理功能模塊在操作系統(tǒng)中具有十分重要的作用。通信管理功能模塊主要實(shí)現(xiàn)以下幾種功能:實(shí)現(xiàn)某一通信協(xié)議的數(shù)據(jù)鏈路層的傳輸管理功能;實(shí)現(xiàn)ISO/IEC 7816標(biāo)準(zhǔn)規(guī)定的ATR(復(fù)位響應(yīng))等功能;為操作系統(tǒng)中的其他功能模塊提供相應(yīng)接口。
按ISO/IEC 7816標(biāo)準(zhǔn),IC卡和讀寫設(shè)備之間的通信協(xié)議有多種,一般一種卡片只支持某一種通信協(xié)議。下面以符合ISO/IEC 7816-3標(biāo)準(zhǔn)的T=0字符傳輸協(xié)議的智能IC卡為例介紹通信管理功能(支持其他通信協(xié)議的卡的通信管理功能與此相似)。
ICC上電之后,IFD將向ICC發(fā)送命令數(shù)據(jù),在這樣一次典型的通信過程中,通信管理功能主要從事6個步驟的具體工作。如圖1所示。
以下是卡片接收指令相關(guān)的源代碼:
BYTE General_Receive(void)
{
BYTE i,j,c1;
BYTE c2 =0;
BYTE XOR_PPS = 0;
WORD addr;
ccc:
CommandHead[0] = UART_IO_ReceiveByte(); //接收指令第1字節(jié)
if( (FlagByte & 0x80) == 0 )
{
if( CommandHead[0] == 0xff )//PPS選擇
{
CommandHead[1] = UART_IO_ReceiveByte();//接收PPS0
i = 1;
if(CommandHead[1]&0x40) i++;
if(CommandHead[1]&0x20) i++;
if(CommandHead[1]&0x10) i++;
for(j=2;i>0;j++,i--)
{
if(j == 5)
{
XOR_PPS = UART_IO_ReceiveByte();
break;
}
CommandHead[j] = UART_IO_ReceiveByte();
}
i = j;
c1= 0;
for(j=0;j
c1 ^= CommandHead[j];
if( c1 ^ XOR_PPS) //如果PPS校驗(yàn)和錯誤,死鎖
{
for(;;) ;
}
else
{
UART_IO_SendString(CommandHead,i); //回送PPS數(shù)據(jù),表示支持94
if(j == 5)
UART_IO_SendByte(XOR_PPS);
UART_Set_Baud(CommandHead[2]); //更改BAUD參數(shù)設(shè)置
FlagByte = FlagByte | 0x80;//設(shè)置PPS有效標(biāo)志
goto ccc;
}
}
}
FlagByte = FlagByte | 0x80;//設(shè)置PPS有效標(biāo)志
for(i=1;i<5;i++) CommandHead[i]=UART_IO_ReceiveByte(); //不是PPS,繼續(xù)接收后4字節(jié)指令頭數(shù)據(jù)
c1 = API_JudgeClaIns();
if( c1 != 0 ) return c1; //判斷CLA/INS
for(i=0;i<11;i++)
{
if(Command_INS== GetByte_C((ADWORD)(s2Command+i)) )
goto Receive_OK;//2S指令,5個頭接完就返回
}
addr = GetSysWord(S2_COMMADDR);
c1 = GetSysByte(addr);
for( i = 0;i { if(Command_INS==GetSysByte(addr+1+i)) goto Receive_OK;//2S指令,5個頭接完就返回 } UART_IO_SendByte(Command_INS);//3S指令,先回送INS再接后續(xù)數(shù)據(jù) for(i=0;i CommandData[i]= UART_IO_ReceiveByte(); Receive_OK: UART_RunWaitingEtuTimer(0x01); //打開計(jì)時(shí)器 return 0; } (2) 硬件模塊設(shè)計(jì)。 智能卡COS上電后首先要進(jìn)行芯片初始化,其主要設(shè)置以下幾個方面:芯片初始工作時(shí)的頻率,以及使用外頻還是內(nèi)頻;芯片串口初始工作的速率(一般為“11”的波特率);芯片串口的工作模式(包括T=0還是T=1協(xié)議,正向傳輸還是反向傳輸,奇校驗(yàn)還是偶校驗(yàn)等);存儲器的初始映射方式。 智能卡芯片(以下以51系列智能卡芯片為例)一般包含幾十到幾百KB的FLASH,以1個頁面為單位進(jìn)行擦除,根據(jù)FLASH編程寫的特點(diǎn),也就是1能寫成0,而0不能寫成1,故在設(shè)計(jì)編程寫函數(shù)時(shí)為了保證寫數(shù)據(jù)的正確性,特采取如下的方式實(shí)現(xiàn)此功能: 第一步:取出要寫入地址的數(shù)據(jù)(為A),與要寫入的數(shù)據(jù)(為B)進(jìn)行與操作(結(jié)果為C); 第二步:在要寫入數(shù)據(jù)的地址寫入數(shù)據(jù)(B); 第三步:取出寫入數(shù)據(jù)后的地址的數(shù)據(jù)與數(shù)據(jù)C進(jìn)行比較。 對于51系列智能卡芯片,由于標(biāo)準(zhǔn)的8051對程序存儲器最大值支持64 KB,所以芯片采用BANK的編址方式[7]。這時(shí)往往需要一個映射函數(shù)來實(shí)現(xiàn)不同BANK的跳轉(zhuǎn)。如果一款智能卡芯片的程序存儲器采用128 KB的FLASH用來存放COS和用戶數(shù)據(jù)。128 KB的FLASH均分4個32 KB的BANK,在這4個區(qū)域里,Commom區(qū)是3個Bnak的公共區(qū)域,即Commom區(qū)和每個32 KB的BANK都可以組成64 KB的連續(xù)空間。3個Bnak之間不能直接互相訪問,而必須調(diào)用Commom區(qū)里的程序才能實(shí)現(xiàn)相互的訪問[2]。所以在創(chuàng)建工程時(shí)要把經(jīng)常使用的程序和常數(shù),如中斷入口函數(shù)、Bank Switch跳轉(zhuǎn)表等都放到Commom區(qū)里,這樣才能實(shí)現(xiàn)各個區(qū)域的相互訪問。 (3) 異常保護(hù)模塊設(shè)計(jì)。 ISO7816-3規(guī)定2個連續(xù)字符上升沿之間的延遲至少是12 ETU,且2個連續(xù)字符上升沿之間的延遲應(yīng)不超過9 600 ETU。所以COS在設(shè)計(jì)時(shí)要加入發(fā)送“60”來實(shí)現(xiàn)正常的通信[8]。 發(fā)送“60”采用芯片定時(shí)器中斷的方式,設(shè)置定時(shí)器的工作模式,使用時(shí)鐘和的初始值。定時(shí)器的中斷服務(wù)程序的實(shí)現(xiàn)流程:關(guān)閉發(fā)送“60”定時(shí)器;發(fā)送“60”;打開發(fā)送“60”定時(shí)器。 操作系統(tǒng)的異常處理,此函數(shù)為COS進(jìn)行異常狀態(tài)時(shí)調(diào)用的函數(shù)。進(jìn)入異常狀態(tài)時(shí),要關(guān)閉發(fā)送“60”的定時(shí)器,然后進(jìn)入死循環(huán)狀態(tài)。 3 芯片測試方案設(shè)計(jì) 以下提出一種針對芯片模塊函數(shù)的測試方案。即嵌入式Testing COS。 (1) Testing COS測試平臺組成。 T-COS平臺由MAIN.C文件、API.C文件、常量配置、A51文件以及芯片庫、LIB文件組成。其中,針對不同的芯片,main.c,api.c是相同的,而常量配置文件和芯片庫文件則不同,在使用時(shí)需要更改或更換。 另外,MAIN.C文件中的CommandInterpreter()命令解釋器函數(shù)是對發(fā)送命令的識別解釋(在此函數(shù)中,為所有需要測試的函數(shù)定義了指令嗎)。被測函數(shù)的函數(shù)體在API.C文件中。芯片庫在API.C文件中被具體調(diào)用。 此Testing COS可直接寫入智能卡中,設(shè)計(jì)思路是:采用直接APDU指令調(diào)用的形式,直接調(diào)用硬件模塊函數(shù),如擦一頁函數(shù)。執(zhí)行完指令,函數(shù)返回一個狀態(tài)字。 主程序是一個死循環(huán),如下: void main(void) { UART_InitChip(); ClearRam(); //清全局變量 MakeATRSend(); //回送ATR(rom數(shù)據(jù)) //主程序循環(huán) while (1) { if( (General_Receive() ) == 0 )//數(shù)據(jù)接收錯誤,直接返回錯誤碼 { CommandInterpreter(); //命令解釋器 } else { FlagByte = FlagByte & 0xfd; //接受數(shù)據(jù)錯誤,如果已經(jīng)有返回?cái)?shù)據(jù)標(biāo)志位,清除 } MakeData();//回送數(shù)據(jù)
}
}
命令解釋器函數(shù)支持多個函數(shù),為用戶對硬件的直接操作提供接口,可以通過發(fā)送APDU指令實(shí)現(xiàn)對芯片的多種操作[9]。
void CommandInterpreter()
{
switch(Command_INS)
{
case 0x00: g_bStatusByte = Api_ErasePage();break;
case 0x02: g_bStatusByte = Api_WriteByte();break;
case 0x06: g_bStatusByte = Api_Mem_Copy();break;
case 0x07: g_bStatusByte = Api_Mem_Set();break;
case 0x08: g_bStatusByte = Api_Mem_Cmp();break;
case 0x09: g_bStatusByte = Api_ReadByte();break;
case 0x0A: g_bStatusByte = Api_ReadWord();break;
case 0x0B: g_bStatusByte = Api_ReadTriByte();break;
case 0x0C: g_bStatusByte = Api_ReadData();break;
case 0x0D: g_bStatusByte = Api_ReadByte_C();break;
case 0x0E: g_bStatusByte = Api_ReadData_C();break;
case 0x16: g_bStatusByte = Api_PrgByte();break;
case 0x17: g_bStatusByte = Api_PrgData();break;
default : break;
}
}
例如:APDU:80 00 10 00 00 表示擦除地址0x1000所在頁面。
APDU:80 0C 10 00 10 表示從地址0x1000開始讀取長度為0x10的數(shù)據(jù)。
(2) Testing COS測試平臺的使用。
T-COS測試平臺測試流程,如圖2所示:
(3) Testing COS測試平臺局限性分析。
T-COS平臺使用方便簡潔,易于觀察執(zhí)行結(jié)果,但是其不能觀察過程。因此,在返回結(jié)果與預(yù)期結(jié)果不一致,或者出現(xiàn)錯誤的情況下,無法判斷產(chǎn)生錯誤的原因。在這種情況下,需要借助仿真器,跟蹤執(zhí)行過程,最終找出產(chǎn)生問題的原因。
4 結(jié) 語
智能卡操作系統(tǒng)根本的部分就在于芯片底層各個模塊的穩(wěn)固性。芯片層開發(fā)是電信、稅控等產(chǎn)品開發(fā)的重要組成部分之一,也是最基礎(chǔ)的部分。為了保證電信、稅控產(chǎn)品可以在不同芯片之間的平穩(wěn)移植,需要對芯片層的開發(fā)提出一定的要求和標(biāo)準(zhǔn),這樣可以保證上層開發(fā)的一致性。
參 考 文 獻(xiàn)
[1]王愛英.智能卡技術(shù).北京:清華大學(xué)出版社,1996.
[2][德]Rankl W.智能卡大全:智能卡的結(jié)構(gòu)功能應(yīng)用.北京:電子工業(yè)出版社,2002.
[3]張志剛,趙奎.智能卡操作系統(tǒng)研究和實(shí)例分析.企業(yè)技術(shù)開發(fā),2005,24(9):20-22.
[4]亨德里.智能卡安全與應(yīng)用.北京:人民郵電出版社,2002.
[5]International Standard ISO 7816-1,-2,-3,-4[S].Identification Cards:Integrated Circuits Cards with Contacts:1997.
[6]楊志峰,王志新.智能卡的操作系統(tǒng):COS.現(xiàn)代電子技術(shù),2005,28(8):91-93.
[7]李金良.智能卡操作系統(tǒng)(COS)編程語言及編譯器系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn).中國集成電路,2005(11):67-69.
[8]李翔.智能卡研發(fā)技術(shù)與工程實(shí)踐.北京:人民郵電出版社,2003.
[9]張利華.智能卡操作系統(tǒng)開發(fā)中的測試技術(shù).計(jì)算機(jī)工程與設(shè)計(jì),2004,25(6):901-902.
[10]李浩,謝桂海,王新鋒,等.一種基于零知識證明的RFID鑒別協(xié)議.現(xiàn)代電子技術(shù),2006,29(17):23-25.
作者簡介 張李靜 1983年出生,天津理工大學(xué)電子信息與通信工程學(xué)院碩士。
張秋燕 1949年出生,天津理工大學(xué)電子信息與通信工程學(xué)院教授,研究生導(dǎo)師。