應用筆記技術anch_第1頁
應用筆記技術anch_第2頁
應用筆記技術anch_第3頁
應用筆記技術anch_第4頁
應用筆記技術anch_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

STM32F101xxSTM32F103xx的智能卡應STM32F101xxSTM32F103xx的智能卡應用筆STM32F101xxSTM32F103xx簡口的實現。該固件和硬件包的目的是提供相應的資源,使用戶使用USART模塊的智能卡模式,這個固件接口包括支持ISO7816-3/4規范的庫文件,同時提供基于ST的STM3210B-EVAL和術語小容量產品是指閃存存儲器容量在16K至32K字節之間的STM32F101xx、STM32F102xx和中容量產品是指閃存存儲器容量在64K至128K字節之間的STM32F101xx、STM32F102xxSTM32F103xx微控制器。在ST的STM3210B-EVAL評估板上集成的即為中容STM32F101xxSTM32F103xx的智能卡使目144445688899STM32F101xxSTM32F103xx的智能卡使目14444568889923ISO7816:協議介ISO7816-2——引腳分4ISO7816-3——電信號和傳輸協復位應答5ISO7816-4——智能卡命T0ISO7816-4安全6如何向智能卡發送APDU7 STM32F101xxSTM32F103xx的智能卡STM32F101xxSTM32F103xx的智能卡使 81智能簡智能卡接口是在USART模塊的智能卡模式下開發的。關于USART寄存器的描述,請參閱1智能簡智能卡接口是在USART模塊的智能卡模式下開發的。關于USART寄存器的描述,請參閱8位數據位加上奇偶校0.5或1.5位停止軟件中不處理ISO7816-3中定義的反向信號傳輸約定,反轉數據和最高有效位優先的情況外部接表Smartcard_RST(智能卡復位)、Smartcard_3/5V(3V或5V)、(管理VCC)及caF信號(智能卡檢測信號)由軟件控制O的端口實現。為了使數據信號以正確的驅動連接到智能卡I引腳,應當把USART_X端口的PI位編程為復用開漏輸出模式,為把時鐘發生器連接到cCK的引腳,_K端口的GPIO位應配置為復用推挽輸出模式。協O3標準為異步協議定義了時間基準單位,稱作ETU(etarye,它與輸入至智能卡的時鐘頻率有關。一個EU的長度是一個位時間。USAT接收器和發送器在內部通過xW信號相連接。必須將T模塊設置為智能卡模式,才能實現從xx向智能卡傳輸數據。圖ISO7816-3異步STM32F10xxx引任意GPIO任意GPIO任意GPIO智能卡智能卡時鐘發生智能卡時鐘發生器為與之相連的智能卡提供時鐘信號。智能卡使用這個時鐘產生在智能卡與智能卡接口操作要求,在卡上的U運行代碼時可以調整時鐘速率,這樣可以改變通訊的波特率,或者可以提升智能卡的性能。在13標準中詳細描述了,協商時鐘速率和改變時鐘速率的協議。2智能卡讀卡器的硬表STM32F10xxx與智能卡間的連STM3210B-2智能卡讀卡器的硬表STM32F10xxx與智能卡間的連STM3210B-STM3210E-C3:C7:C2:C1:3V或5V:推挽圖圖ISO7816:協議介3ISO7816:協議介簡“ISO7816:識別卡——帶有觸點的集成電路卡”提供了把相對簡單的,容易被偽造、偷盜、丟失的普通識別卡轉變成一個防篡改的智能集成電路卡(IntergratedcircuitcardICC)的規范,人們一般稱之為智能卡。ISO7816包括至少6個經審核的部分和一些有待審核的新增部分,如下:●●●●●ISO7816:協議介3ISO7816:協議介簡“ISO7816:識別卡——帶有觸點的集成電路卡”提供了把相對簡單的,容易被偽造、偷盜、丟失的普通識別卡轉變成一個防篡改的智能集成電路卡(IntergratedcircuitcardICC)的規范,人們一般稱之為智能卡。ISO7816包括至少6個經審核的部分和一些有待審核的新增部分,如下:●●●●●●ISO7816-2——引腳分ISO7816-2規定一個ICC,有8個電器觸點,它們位于智能卡表面的標準位置,分別是C1至圖表引功VCC5V或者地輸入/輸出ISO7816-3——電信號和傳輸協4ISO7816-3——ISO7816-3——電信號和傳輸協4ISO7816-3——電信號和傳03開始研究智能卡“智能”方面的規范。該標準描述了智能卡和讀卡器之間的關系,其中智能卡作為從設備,讀卡器作為主設備。通訊的基礎是,讀卡器通過觸點給智能卡發送信號,然后智能卡作出回應,如此不斷循環交互。圖智能卡上電啟動和復當把智能卡插入到讀卡器時,不能對任何觸點提供供電。因為如果把電源提供給了錯誤的觸點,卡上的芯片可能被嚴重損壞,這種情形很可能發生在觸點已經上電的情況下去插智能卡。觸點保持無電狀態,直到邊沿檢測器檢測到智能卡的觸點在(讀卡器的)當讀卡器發現智能卡已經正確地插入,就會給智能卡提供電源,智能卡首先進入的是空閑狀態,如圖4所示,然后讀卡器通過ST線向智能卡發送一個復位信號。當電源觸點V)的V電壓進入穩定的工作狀態時,智能卡進入空閑狀態。盡管有些微處理器芯片的I/O狀態工作在V電壓下,也總是先提供V電壓。讀卡器的/O觸點設置成接收模式,同時提供穩定的時鐘L)。ISO7816-3——電信號和傳輸ISO7816-3——電信號和傳輸協此時復位信號線處于低電平狀態。在讀卡器開始有效的復位過程之前,復位線應保持至少40,000個CLK周期的低電平狀態,然后再設置為高電圖(1)t340000(2)智能卡必須在RST變高之后的400個時鐘周期至40000個時鐘周期之間送出ATR數據傳在讀卡器和智能卡之間進行數據傳輸,需要通過兩個觸點引線的協商:K和I/O。I/O引線根據它相對于D的電壓,在每個由K定義的單位時間內傳送一個比特的信息。可以用V或電壓來表示邏輯’,實際操作中,這由智能卡傳送給讀卡器的ATR中的“初始字符”也被稱作S所決定。在IO引線上每傳送0個比特代表一個字節的信息;最先的是“起始位”,最后一位是偶校驗位。/O信號線可以用高電平H)也可以用低電平)來表示一個比特位,S字符為LLHH表示’L表示’。TS符號為LHH時,表示智能卡使用“正向約定”,即表示,表示’。反向約定和正向約定同樣也控制在智能卡和讀卡器之間傳輸的每個字節的比特順序。在正向約定下,起始位后的第一個比特是字節的最低位,然后依次是高次序位。在反向約定下,起始位后的第一個比特是字節的最高位,然后依次是低次序位。每個傳輸的字節必須使用偶校驗;這意味著字節中包括校驗位在內,必須有偶數個。I/O信號線是一個半雙工通道,這表示,智能卡或者讀卡器可以在同一個通道上傳輸數據,但是兩者不能同時傳輸。所以作為啟動順序的一部分,讀卡器和智能卡都進入接收狀態,偵聽IO信號線。在開始復位操作時,讀卡器處于接收狀態,而智能卡必須進入發送狀態,并發送ATR至讀卡器。從此之后,通道兩端在發送和接收兩個狀態之間互相交替。在半雙工通道中,沒有一種可靠的方法,使得任何一方可以異步地從發送狀態改變到接收狀態,或者從接收狀態轉到發送狀態。如果需要這種改變,那么要改變的一方需要進入接收狀態,使得正在進行的操作過程超時;然后讀卡器一方總是會嘗試重新進入發送狀態,來重新建立一個認可的操作序列。LK和I/O信號線支持寬范圍的不同數據傳輸速度。速度由智能卡定義,并且通過ATR中的可選項字符傳送給讀卡器。傳輸速度在IO信號線上通過一個比特時間設定,這個時間決定了在I/O上采樣,去讀取一個比特以及每個后序比特時的時間間隔。這個時間定義為一個基本時間單元),它建立在幾個因數之間的線性關系基礎上。需要注意的是,TS字符在ETU定義產生之前已經由智能卡返回給讀卡器。在傳送ATR序列過程中,ETU總是被指定為U3/K頻ISO7816-3——電信號和傳輸協復位應答一旦讀卡器發送T信號至智能卡,智能卡必須在接受到ST信號后的00個KISO7816-3——電信號和傳輸協復位應答一旦讀卡器發送T信號至智能卡,智能卡必須在接受到ST信號后的00個K周期內回復ATR的第一個字符。智能卡可能會因為某些原因不回復R,其中最可能的原因是智能卡沒有正確地插入讀卡器(如上下顛倒)什么情況,只要ATR沒有在預計的時間內返回,讀卡器就應該發送一個序列關閉智能卡,即讀卡器置、和I/信號線為低,并且降低V線至狀態即小于0.4V。ATR是一串在成功的啟動序列后,從智能卡返回至讀卡器的字符序列。ISO/ICE7816-3中定TAiTBiTCiTDi:可選的接口字符歷史相關字符用來指明智能卡制造商或者提供商。這些字符通常用來傳遞智能卡的類型、型號和具體應用范圍。這樣,歷史相關字符提供了一種機制,在這種機制下,系統能夠自動檢測插入的智能卡的應用范圍(在系統內),并且相應地初始化其他操作(或軟件)。檢測字符提供了一個檢查ATATR的結構在下表中詳細給出。正如上面討論的,初始化S字符用來建立讀卡器和智能卡之間的比特信號、比特次序約定。T0字符用來標識接下來的接口字符或者歷史相關字符是否存在。接口字符用來給出IO通道特性,包括智能卡和讀卡器交換命令(讀卡器至智能卡)和響應(智能卡至讀卡器)過程中使用的協議。如果存在歷史相關字符,它被用來向讀卡器傳遞有關智能卡制造商的具體信息,然后再傳送給讀卡器的應用系統。目前還沒有一個確定的標準,用于定義歷史相關字符中的內容。ATR序列的總長度被限制在33個字節以內,并且遵循以下格表字符描全局的,編碼編碼Y2和全局的,編碼編碼Y3和TAi,Tbi和TCi是專用編碼Yi+1和(最多15個字符5ISO7816-4——智能5ISO7816-4——智能起連接層的協議,就可以定義應用層的協議了。ISO7816-4定義了兩個這樣的應用層協議:ISO7816-4定義了一個支持應用協議APIT0協T0協議是一個面向字節的協議,規定了字符在讀卡器和智能卡之間傳輸的方式,還規定了通過奇偶效驗位來處理每個字節上的錯誤,如果接收數據的奇偶位與發送數據的不符,表示傳輸發生了錯誤。當檢驗到奇偶效驗出錯時,0協議要求必須重傳該字節;接收方在檢驗到錯誤時,通過保持IO線為低電平通知發送方重傳(沒有錯誤時則保持高電平)。當發送端檢驗到這個低電平后,它將會重新發送沒有被正確接收的字節。讀卡器和智能卡數據交換結構是傳輸協議數據單元(TPDU)。它包括兩個獨●●●●●P3:與[CLA,INS]命令相關的參數,說明智能卡與讀卡器間數據交換的字節CLA用于指明所使用命令的命令集。表5列出了一些命令集對應的CLA數值表CLA命令集CLA指定了命令所在的類,INS字節指出該類中的具體命令。表6列出了ISO7816-4標準中用于CLA0B0hD0h表ISO7816-4INS參數1和2定義在鏈路層,但卻取決于應用層的具體命令。它們提供各種應用層命令的控制和地址參數。例如,在選擇文件命令中,1用于指出文件如何被訪問(通過標識、名字、路徑等),2提供了更加詳細的說明,如選擇哪一個文件。3定義了IS具體命令執行期間傳送的字節數量。數據移動通常是以卡為中心的,也就是說,流出是指數據從卡輸送到讀卡器,流入是指數據從讀卡器輸送到卡上的。●●ACK:指表ISO7816-4INS參數1和2定義在鏈路層,但卻取決于應用層的具體命令。它們提供各種應用層命令的控制和地址參數。例如,在選擇文件命令中,1用于指出文件如何被訪問(通過標識、名字、路徑等),2提供了更加詳細的說明,如選擇哪一個文件。3定義了IS具體命令執行期間傳送的字節數量。數據移動通常是以卡為中心的,也就是說,流出是指數據從卡輸送到讀卡器,流入是指數據從讀卡器輸送到卡上的。●●ACK:指出卡收到了[CLA,INS]SW1:當前命令的狀態響應SW2:(可選的)也是傳送到讀卡器的狀態●●K字節是來自命令U中S字節的重復。如果響應沒有在規定時間到達讀卡器,讀卡器將會發出一個T序列來重啟在讀卡器和卡之間的協議。若讀卡器從卡接收到一個以上的L字節,就可以避免這種情況。1通知讀卡器請求的命令結果。在應用層的協議中,定義了W1允許的取值。某些命令需要卡發送數據給讀卡器,此時,卡通過回送2,要求讀卡器執行ss應用層協ISO7816-4標準涉及應用軟件的兩部分功能INSINS圖ISO7816-4中定義的APDU結構與T0協議中使用的TPDU結構非常類似。事實上,當圖ISO7816-4中定義的APDU結構與T0協議中使用的TPDU結構非常類似。事實上,當T0協議傳ISO7816-4ISO7816-4應用層協議有兩種消息:命令APDU(從讀卡器發送到智能卡)和響應APDU(從智能卡圖命令APDU命令APDU包括頭和主體(見上圖)。命令頭包括A、IS、1和2域。如同T0協議,A和IS指出了應用的分類和命令。1和2用來詳細說明具體命令,并由每一條A,IS]命令給出具體定義。APDU主體的長度是可變的,它可以作為命令的一部分傳送數據到卡的APDU處理器上,也可以用于傳達一個從卡到讀卡器的響應。c域指出了作為命令的一部分,傳送到卡上的字節數,即數據域的長度。數據域包括必須要傳送到卡上的信息,它們是APDU處理器執行APD的命令所需要的數據。域說明了在響應D中,需要返回到讀卡器的字節數量。APDU的主體以四種形式存在情況1:沒有數據發送或從卡上接收,所以APDU只包括命令頭●●●●圖響應APDU響應DU的結構比命令APU的結構簡單的多。它包括主體和尾部。主體可以為空也可以包括圖響應APDU響應DU的結構比命令APU的結構簡單的多。它包括主體和尾部。主體可以為空也可以包括一個數據域——決定于具體命令。數據域的長度由相應的命令DU的e域決定。尾部包括兩個狀態信息域,分別為S1和S2。這些域返回狀態碼,一個字節用來說明錯誤種類,另一個字節用來說明具體的命令狀態或錯誤標志。文件系統主文件目錄文件基本文件在每一個智能卡上都有一個主文件,它同時也是文件系統的根。一個主文件可以包括目錄文件或基本文件。保留給主文件的標識符是0。目錄文件本質上是基本文件的容器(或目錄),一個F可以包括零個或更多個基本文件。目錄文件把智能卡分為基本文件集合的有序結構。必須要為目錄文件或主文件包含的目錄文件分配一個唯一的文件標識——這樣每一個文件都可以有一個唯一的訪問路徑。目錄文件同樣可以通過名字來訪問1到6個字節長)。命名規則可以查看O5。基本文件是層次目錄的葉子結點,包含實際的數據。在目錄文件中通過5位的標識符來標識基本文件。文件系統的層次結構見圖9智能卡文件系統結構圖.●透明文件實質上是一個字符串,它是一個非結構化的二進制文件。因此在數據讀出或寫入這類文件時,要求提供一個相對文件起始的字節偏移量指針。另外,透明文件的讀寫命令需要包含讀出或寫入文件的字符串的長度。固定的或可變長度的文件包含一些由序號數字標識的記錄。在固定長度記錄的文件中,所有的記錄包括相同數目的字節;相反,可變長度記錄的文件包含長度可以變化的記錄。因此,對可變長度記錄文件的讀寫訪問需要更多的時間,在文件系統的管理中也需要更多時間。透明文件實質上是一個字符串,它是一個非結構化的二進制文件。因此在數據讀出或寫入這類文件時,要求提供一個相對文件起始的字節偏移量指針。另外,透明文件的讀寫命令需要包含讀出或寫入文件的字符串的長度。固定的或可變長度的文件包含一些由序號數字標識的記錄。在固定長度記錄的文件中,所有的記錄包括相同數目的字節;相反,可變長度記錄的文件包含長度可以變化的記錄。因此,對可變長度記錄文件的讀寫訪問需要更多的時間,在文件系統的管理中也需要更多時間。ISO7816-4下面將簡單討論一下ISO7816-4中定義的幾個用于選擇、讀取、寫入文件的函數選擇文這個命令建立一個指向智能卡文件系統中指定文件的指針。任一文件處理操作都需要這個指針。對智能卡文件系統的訪問不是多線程的,但可以在任意時刻同時定義幾個文件的指針。這是通過管理通道命令完成的,這個命令在讀卡器端的應用層和卡之間建立了多個邏輯通道。這允許處于不同狀態的卡上文件同時被讀卡器的應用層訪問。文件的標識可以有以下幾種方式:短的讀二進寫二進更新二進刪除二進讀記●●●寫記●●●寫記添加記更新記這個命令用于寫一個記錄到基于記錄的卡上的EF中,和更新二進制命令一樣,老的記錄被刪除,新的記錄寫入EF中。獲得數放入數安全在智能卡上的文件系統中,每一個部件都有其對應的訪問屬性列表。這個訪問屬性保證了只有經授權的主體(程序或人員)求讀卡器提供一個預先定義的個人標識號碼PI);或者也可以是更加復雜的,例如需要讀卡器。驗這個命令是由讀卡器端應用層發送到卡上的安全系統,目的是使卡確信讀卡器知道保存在卡上的密碼,該密碼的作用是限制訪問保存在卡上的敏感信息。這種密碼式的信息,與特定的文件或文件層次結構的一些或全部相關聯。如果驗證命令失敗,即讀卡器提供了一個錯誤的密碼,將會向讀卡器返回一個錯誤。內部鑒這個命令允許卡通過證明和讀卡器共享密鑰來向讀卡器鑒別自己。讀卡器應用層軟件首先生成一個隨機數并且用卡和讀卡器都知道的一些算法加密。這就形成了一個對卡的查證,卡然后用共享的(存在卡中)外部鑒這個命令和獲得詢問命令一起使用,讓讀卡器應用層軟件向卡鑒別自己。讀卡器收到來自卡上的詢問數據一個隨機數并用它和先前用獲得詢問命令生成的隨機數比較;如果比較匹配,卡就確認了讀卡器應用層的身份。獲得詢獲得詢管理通管理通道命令是讀卡器應用層用來打開和關閉在它與卡之間的邏輯通信通道的。最初,卡通過完成ATR序列和讀卡器應用層建立應用層協議,從而打開一個基本通信通道。管理通道命令可以利用這個通道來打開或關閉額外的邏輯通道。封這個命令支持使用T0協議的安全信息。該命令把某個需要加密的命令APDU合并到封裝命令APDU的數據段,隨后卡上的APDU處理器可以取出并執行這個命獲得響與前面的命令一樣,獲得響應命令允許使用T0協議來傳送PU。T0協議不支持U的第4種類型,即:不能發送一組數據到卡上,然后返回一組數據。所以在使用0協議時,較早的命令回送一個響應,指出卡將有更多數據等待發送。獲得響應命令用于讀取這些數據。6文件組表函表SC_Handler表SCState通知用戶智能卡的狀態,允許用戶關閉智能卡。它的取值在下表中定6文件組表函表SC_Handler表SCState通知用戶智能卡的狀態,允許用戶關閉智能卡。它的取值在下表中定沒有電源提供該給智能卡(VC=);TF0xx智能卡接口關閉。沒有時鐘提供給智能卡。voidSC_Handler(SC_State*SCState,SC_ADPU_Commands*SC_ADPU,SC_ADPU_Responce*SC_Response)輸入參數SCState:指向一個包含智能卡狀態的SC_State枚舉類型的指輸入參數SC_ADPU:指向一個將被初始化的SC_ADPU_Commands結構體的指輸入參數SC_Response:指向一個將被初始化的SC_ADPU_Responce結構體的指無無無無smartcard.h,圖SC_ADPU_Commands結構體在文件smartcard.h中定義如下typedef{圖SC_ADPU_Commands結構體在文件smartcard.h中定義如下typedef{SC_BodyBody;}指明ADPU命令頭。它是SC_Header類型,在smartcard.h中定typedef{}在這個狀態下,智能卡RST引腳(引腳2)被置低(RST=0)。VCC=5V提供給智能卡CLK提供給智能卡。開始復位響應(ATR)過程。讀卡器等待來自智能卡的ATR如果沒有接收到響應,讀卡器強制復位引腳T為高(RST=1),并且保持它為高直到接收到復位響應。指明[CLA,INS]命令使用的參數指明ADPU命令主體,這是指明[CLA,INS]命令使用的參數指明ADPU命令主體,這是SC_Body類型,在smartcard.h中定typedef{●●期望返回的數據長度}●指明作為[CLA,INS]命令執行的一部分,傳送到卡上的數據字節數指明作為[CLA,INS]命令執行的一部分,從卡上返回的數據字節數指明ADPU命令響應。它是SC_ADPU_Response類型,在smartcard.h中定義typedef{●●●Data[LCmax]*從卡上返回的數據/*命令處理狀態/*命令處理參數}●●●例子/*選擇主(根)文件MF*/SC_ADPU.Header.CLA=SC_CLA;SC_ADPU.Header.INSSC_SELECT_FILE;SC_ADPU.Header.P1=0x00;SC_ADPU.Header.P2=0x00;SC_ADPU.Body.LC=0x02;for(i=0;i<SC_ADPU.Body.LC;i++)SC_ADPU.Body.Data[i]=MasterRoot[i];while(i<SC_ADPU.Body.Data[i++]=0;SC_ADPU.Body.LE=0;表例子/*打開卡電源*/表例子表例子void無無無無無表例子/*打開卡電源*/表例子表例子void無無無無無無無無無NewState:智能卡電源的新狀態這個參數可以是ENABLE或DISABLE無無無無/*重新向智能卡發送字節*/表例子/*TA1*/如何向智能卡發送APDU下面將詳細介紹關于如何使用SC_Handler(函數向智能卡發送ADPU命令,如何得到卡發回的/*重新向智能卡發送字節*/表例子/*TA1*/如何向智能卡發送APDU下面將詳細介紹關于如何使用SC_Handler(函數向智能卡發送ADPU命令,如何得到卡發回的=SC_ADPU.Header.INS=SC_ADPU.Header.P1=0x00;SC_ADPU.Header.P2=SC_ADPU.Body.LC=SCState=SC_ADPU.Header.INS=SC_ADPU.Header.P1=0x00;SC_ADPU.Header.P2=0x00;SC_ADPU.Body.LC=0x02;for(i=0;i<SC_ADPU.Body.LC;i++)SC_ADPU.Body.Data[i]=FileName[i];while(i<LCmax)SC_ADPU.Body.Data[i++]=0;SC_ADPU.Body.LE=●●●void無無無必須在剛剛完成ATR序列后調無SC_ADPU.Header.CLA=SC_CLA;SC_ADPU.Header.INS=SC_GETRESPONSE;SC_ADPU.Header.P1=0x00;SC_ADPU.Header.P2=0x00;SC_ADPU.Body.LC=0x00;SC_ADPU.Header.CLA=SC_CLA;SC_ADPU.Header.INS=SC_GETRESPONSE;SC_ADPU.Header.P1=0x00;SC_ADPU.Header.P2=0x00;SC_ADPU.Body.LC=0x00;i=0;while(i<LCmax)SC_ADPU.Body.Data[i++]=0;SC_ADPU.Body.LE=SC_Responce.SW2;SC_Handler(&SCState,&SC_ADPU,&SC_Responce);SCState:當前的智能卡狀態SC_Response->Data:返回給SC_GET_RESPONSE命令的智能卡響應數據●●●SC_ADPU.Header.CLA=SC_CLA;SC_ADPU.Header.INS=SC_READ_BINARY;SC_ADPU.Header.P1=OFFSET_MSB;SC_ADPU.Header.P2=OFFSET_LSB;SC_ADPU.Body.LC=0x00;while(i<LCmax)SC_ADPU.Body.Data[i++]=0;SC_ADPU.Body.LE=OFFSET_LSB:數據偏移量的低字節●●●●●●=SC_ADPU.Header.INS=SC_ADPU.Header.P1=0x00;SC_ADPU.Header.P2=SC_ADPU.Body.LC=for(i=0;i<SC_ADPU.Body.LC;i++)SC_ADPU.Body.Data[i]=FileParameters[i];while(i<LCmax)SC_ADPU.Body.Data[i++]=0;SC_ADPU.Body.LE=SC_Handler(&SCState,&SC_ADPU,&SC_Responce);●●●SC_ADPU.Header.CLA=SC_CLA;SC_ADPU.Header.INS=SC_UPDATE_BINARY;SC_ADPU.Header.P1=OFFSET_MSB;SC_ADPU.Header.P2=OFFSET_LSB;SC_ADPU.Body.LC=LENGTH;while(i<{SC_ADPU.Header.CLA=SC_CLA;SC_ADPU.Header.INS=SC_UPDATE_BINARY;SC_ADPU.Header.P1=OFFSET_MSB;SC_ADPU.Header.P2=OFFSET_LSB;SC_ADPU.Body.LC=LENGTH;while(i<{}SC_ADPU.Body.LE=OFFSET_LSB:數據偏移量的低字節●●●●●● SC_ADPU.Header.INS=SC_ADPU.Header.P1=0x00;SC_ADPU.Header.P2=0x00;SC_ADPU.Body.LC=0x08;for(i=0;i<SC_ADPU.Body.LC;i++)SC_ADPU.Body.Data[i]=CHV1[i];while(i<LCmax)SC_ADPU.Body.Data[i++]=0;SC_ADPU.Body.LE=SC_Response->SW1和SC_Response->SW2:返回給SC_VERIFY命令的智能卡響應●●●奇偶錯誤管在0協議中,通過觀察每個字節的奇偶位來實現錯誤處理。如果實際的奇偶位與傳送數據的奇偶位不相符,那么一定產生了一個錯誤;若檢測到一個奇偶錯誤,接受端將發出要求重傳的信號。這是通過保持O線為低(通常IO線在傳輸一個字節前被設置為高)來實現。當傳送端探測到這個信號,它會重發沒有被正確接收的字節。從智能卡向讀卡器發送從讀卡器向智能卡發送反之亦然,若智能卡通過拉低I/線來通知發生了奇偶錯誤,STM3Fxxx的錯誤。智能卡庫中的yrHn)函數用于檢查是否發生了奇偶錯誤,若有錯誤發生則對錯誤進行處理。當調用當調用SC_ParityErrorHandler函數時,若檢測到錯誤將重發字將在停止位期間拉低I/O線。若發生了幀錯誤,對應的IRQ事件將調用SC_ParityErrorHandler()7智能卡接口這個例子實現了對與ISO7816-3/4標

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論