基于A(yíng)MBA總線(xiàn)的智能卡控制器設計
文章出處:http://psychicreadingswithdeb.com 作者:君懿 劉新寧 人氣: 發(fā)表時(shí)間:2011年10月08日
摘要:通過(guò)分析ISO/IEC 7816-3傳輸協(xié)議,設計該符合協(xié)議標準的接觸式智能卡控制器,實(shí)現對字符傳輸和塊傳輸這兩種不同傳輸方式的智能卡的支持。該控制器集成于基于A(yíng)MBA總線(xiàn)的Garfield系列芯片SEP4020中,采用硬件描述語(yǔ)言(verilog)實(shí)現。利用EDA工具VCS,Design Compiler對該控制器進(jìn)行仿真、綜合。設計采用Altera公司的FPGA進(jìn)行驗證,并采用SMIC 0.18μm工藝流片成功。在闡述該控制器設計原理的基礎上,進(jìn)行模塊劃分和具體設計,最后給出仿真、綜合和FPGA驗證結果。
智能卡(SMART card)通常指一張給定大小的塑料卡片,上面封裝了集成電路芯片,用于存儲和處理數據。隨著(zhù)嵌入式設備的普及,智能卡在金融、電信、單位考勤、公共事業(yè)、交通、醫療等領(lǐng)域得到廣泛應用。本文通過(guò)對ISO/IEC 7816-3傳輸協(xié)議的分析,基于A(yíng)MBA總線(xiàn)架構,提出一款智能卡設計方案,通過(guò)FPGA驗證并采用SMIC 0.18μm工藝流片成功。
2 智能卡控制器工作原理
2.1 復位應答
當控制器檢測到智能卡插入操作時(shí)對智能卡上電,并按照規范向智能卡發(fā)出冷復位信號,智能卡接收到該信號后向控制器發(fā)送復位響應,提供編碼方式、協(xié)議選擇、時(shí)鐘轉換因子、波特率調整因子、額外保護時(shí)間和最大工作等待時(shí)間等參數,后續的會(huì )話(huà)將按照這些參數進(jìn)行。如果冷復位之后控制器沒(méi)有收到符合格式的復位響應,控制器就發(fā)出熱復位;如果智能卡對熱復位仍然沒(méi)有給出符合格式的復位響應,控制器將結束會(huì )話(huà),并釋放智能卡。
2.2 傳輸協(xié)議
智能卡控制器有字符傳輸方式(character transmission)和塊傳輸方式(block transmission)兩種傳輸協(xié)議。在字符傳輸方式中數據以字節單位發(fā)送,支持數據奇偶校驗。塊傳輸方式以多個(gè)字節組成的塊為發(fā)送單位,發(fā)送連續的數據,不支持塊中單個(gè)字節數據的校驗,采用CRC/LRC軟件校驗。
2.3 基本時(shí)間單元ETU
智能卡會(huì )話(huà)過(guò)程中,每個(gè)數據位占用時(shí)間為1個(gè)ETU(Elementary Time Unit),ETU與智能卡的時(shí)鐘頻率呈線(xiàn)性關(guān)系:ETU=F/(D×f)。其中,f為控制器工作頻率;F是時(shí)鐘轉換因子;D是波特率調整因子,支持2的次方數和負次方數。F和D的值,可以在智能卡的復位響應后根據響應提供的參數重新設定,如果智能卡沒(méi)有提供相應的參數,將使用缺省值(F=372,D=1)。
2.4 數據幀
在字符傳輸方式時(shí),數據幀由10個(gè)數據位組成(如圖1所示),第一個(gè)是起始位(Start),后面跟8 b數據位,最后一個(gè)是奇偶校驗位。在沒(méi)有會(huì )話(huà)的時(shí)候,I/O信號線(xiàn)保持高電平。當出現奇偶校驗錯誤時(shí),控制器會(huì )重發(fā)數據,最多重發(fā)4次,如果連續5次都發(fā)送不成功,控制器發(fā)出中斷,請求系統釋放智能卡。

在塊傳輸方式時(shí),數據幀由1位起始位和8位數據位構成,沒(méi)有校驗位。塊幀由起始域,信息域和終止域構成。起始域3個(gè)字節分別為節點(diǎn)地址、協(xié)議控制和長(cháng)度;信息域為待發(fā)送的數據,終止域為CRC/LRC校驗字節。
3 模塊劃分及硬件實(shí)現
智能卡控制器包括復位控制模塊,收發(fā)控制模塊,總線(xiàn)接口模塊,讀緩沖器模塊,寫(xiě)緩沖器模塊,通過(guò)APB接口和AMBA總線(xiàn)相連,對外是CLK,RST,和1根雙向的I/O數據線(xiàn)(如圖2所示)。

實(shí)現各模塊功能需設置如下寄存器(如表1所示)。

3.1 復位控制模塊
復位控制模塊通過(guò)狀態(tài)機的跳變完成對智能卡的復位(如圖3所示)。當智能卡上電后,系統初始處于IDLE狀態(tài),控制器在使能后按照規范向智能卡發(fā)出冷復位信號。首先RST復位信號置低400個(gè)CLK以上對卡復位,然后進(jìn)入等待復位響應狀態(tài)??刂破鹘?jīng)過(guò)1 860個(gè)CLK后還沒(méi)有收到復位響應則可以選擇進(jìn)入時(shí)鐘停止狀態(tài)。當時(shí)鐘恢復后,等待700個(gè)CLK后重新開(kāi)始檢測復位響應。當I/O數據線(xiàn)上檢測到負跳變,則進(jìn)入起始位接收狀態(tài),一個(gè)ETU后順次進(jìn)入數據接收,校驗位接收狀態(tài)。最后判斷校驗位正確與否,如果校驗正確就保持I/O線(xiàn)為高等待下一個(gè)數據的接收;如果出錯,則拉低I/O線(xiàn)1個(gè)ETU通知智能卡數據出錯,請求重傳,并設置錯誤次數計數器。
如果冷復位之后控制器沒(méi)有收到符合格式的復位響應,控制器就發(fā)出熱復位,熱復位過(guò)程同上。如果熱復位后40 000個(gè)時(shí)鐘周期內,控制器仍未檢測到復位響應,則控制器將結束會(huì )話(huà),并釋放智能卡。
3.2 數據收發(fā)控制模塊
數據收發(fā)模塊按照系統對控制寄存器,各時(shí)間寄存器和輸出字節控制寄存器的設置來(lái)工作。與復位模塊一樣,數據收發(fā)模塊也是由狀態(tài)機跳變來(lái)完成。系統在復位響應完成后進(jìn)人IDLE狀態(tài),根據協(xié)議選擇字節傳輸方式(如圖4所示)或是塊傳輸方式(如圖5所示)。

在字節傳輸方式下,當系統設置了輸出字節控制寄存器后控制器就處于發(fā)送狀態(tài)。首先進(jìn)入Prepare狀態(tài),將發(fā)送FIFO中的數據放入移位寄存器,并計算出數據的奇偶校驗位,為數據傳輸做好準備。1個(gè)ETU之后進(jìn)入Start狀態(tài),拉低I/O數據線(xiàn)1個(gè)ETU來(lái)發(fā)送數據起始位。接著(zhù)進(jìn)入數據發(fā)送狀態(tài),將移位寄存器中的數據按1 b/ETU的速率串行發(fā)出。然后發(fā)送1 b奇偶校驗位。數據發(fā)送完畢后按照系統設置的保護時(shí)間將I/O線(xiàn)拉高若干個(gè)ETU。最后檢測是否已經(jīng)發(fā)出了指定的字節數(Trig_num)。如果數據發(fā)送完畢,則跳入IDLE狀態(tài)等待新的發(fā)送設置或轉入數據接收;否則進(jìn)入Prepare狀態(tài)開(kāi)始下一個(gè)字節的發(fā)送。
當系統處于數據接收狀態(tài)時(shí),首先進(jìn)入等待起始位狀態(tài),在此狀態(tài)設置超時(shí)計數器判斷卡是否有響應。當I/O線(xiàn)拉低后就進(jìn)入接收起始位狀態(tài),在該狀態(tài)的0.5ETU時(shí)刻判斷I/O數據線(xiàn)是否仍然拉低。如果I/O線(xiàn)跳高則說(shuō)明是由于I/O線(xiàn)抖動(dòng)造成的起始位誤判,狀態(tài)跳回等待起始狀態(tài);如果I/O線(xiàn)仍然為低,則起始位接收成功,并在0.5個(gè)ETU后進(jìn)入數據接收狀態(tài)。8 b數據按照1 b/ETU的速率接收,完成后轉入接收校驗位狀態(tài)。硬件根據接收的8 b數據計算出校驗位并與收到校驗位比較,如果不同則I/O線(xiàn)拉低告知智能卡數據錯誤請求重發(fā),相同則進(jìn)入IDLE狀態(tài)等待接收下一個(gè)數據或是進(jìn)入發(fā)送狀態(tài)。
塊傳輸(如圖5所示)的接收過(guò)程和字符傳輸類(lèi)似,按照起始位、8 b數據位的狀態(tài)機接收數據。一個(gè)字節接收完畢后返回IDLE,當沒(méi)有發(fā)送任務(wù)時(shí)就進(jìn)入下一次起始位等待。一個(gè)字節數據發(fā)送完畢后有若干個(gè)ETU的保護時(shí)間,然后進(jìn)入Prepare狀態(tài)準備發(fā)送下一個(gè)字節數據。當所有數據發(fā)送完畢后,系統維持一個(gè)塊保護時(shí)間BGT(Block Guard Time),然后進(jìn)入IDLE等待新任務(wù)。
3.3 讀寫(xiě)數據緩沖器模塊
由于A(yíng)PB總線(xiàn)上連接多個(gè)功能模塊,如USB,UART等都需要占用總線(xiàn)進(jìn)行數據傳輸,智能卡控制器只能通過(guò)發(fā)出總線(xiàn)請求在有限時(shí)間占有總線(xiàn)。這使得在進(jìn)行智能卡讀寫(xiě)操作時(shí)會(huì )申請不到總線(xiàn)從而來(lái)不及存儲已收到的數據或者來(lái)不及獲取新的發(fā)送數據,增加讀寫(xiě)數據緩沖器實(shí)現數據暫存可以很好地解決這個(gè)問(wèn)題。緩沖器采用寬度為8位,深度為16的同步FIFO。該FIFO通過(guò)在最高位額外設置1 b來(lái)判斷空/滿(mǎn)標志位。當讀寫(xiě)指針的8 b數據位和1 b最高位都相同時(shí),FIFO為空。當讀寫(xiě)指針的8 b數據位相同并且1 b最高位相反時(shí),FIFO為滿(mǎn)。根據FIFO的空滿(mǎn)狀態(tài)來(lái)請求或停止新的數據。
3.4 APB總線(xiàn)接口模塊
ARM內核通過(guò)APB總線(xiàn)讀寫(xiě)智能卡控制器,完成了對寄存器的設置、中斷狀態(tài)的讀取以及收發(fā)數據的讀寫(xiě),讀寫(xiě)時(shí)序需要符合AMBA APB總線(xiàn)協(xié)議。
系統通過(guò)總線(xiàn)接口模塊設置了控制器工作頻率,傳輸方式、編碼方式、時(shí)鐘轉換因子、波特率調整因子。當解析出智能卡為異步半雙工字符傳輸模式時(shí),設置字符發(fā)送完畢后的保護時(shí)間和最大等待時(shí)間。當解析出智能卡為異步半雙工塊傳輸模式時(shí),設置塊之問(wèn)保護時(shí)間,最大等待之間,以及塊內字符間的最大等待時(shí)間。系統按照上述設置工作。
系統在設定的參數下完成對接收FIFO的讀取和對發(fā)送FIFO的寫(xiě)人,并且發(fā)出讀寫(xiě)使能信號控制FIFO讀寫(xiě)。
在收發(fā)控制模塊產(chǎn)生中斷后,對中斷狀態(tài)寄存器設置并交由軟件處理。
4 仿真結果及FPGA驗證
智能卡控制器采用RTL級的Verilog實(shí)現,在系統仿真過(guò)程中編寫(xiě)智能卡仿真模型。使用Synopsys公司VCS對控制器進(jìn)行功能仿真和驗證。對智能卡的數據收發(fā)波形如圖6所示。

從仿真結果可以看出,智能卡控制器符合ISO7816-3協(xié)議,可以對智能卡進(jìn)行復位及讀寫(xiě)操作。
在FPGA驗證中,采用Altera公司的StratixⅡ芯片。將智能卡控制器、AMBA總線(xiàn)等模塊的RTL代碼燒錄到ARM開(kāi)發(fā)板的FPGA中,并且將外接一塊帶有智能卡插槽的擴展板與ARM開(kāi)發(fā)板連接。使用ARM的調試軟件ARMulator對控制器進(jìn)行功能測試。測試結果表明該控制器可以成功完成對智能卡的復位和數據讀寫(xiě)操作。
5 結 語(yǔ)
根據上述VCS仿真和FPGA驗證的結果,說(shuō)明該智能卡控制器已經(jīng)達到功能要求,實(shí)現了ISO/IEC7816-3傳輸協(xié)議。利用Design Compiler對該模塊進(jìn)行綜合并編寫(xiě)腳本對芯片的面積和時(shí)序進(jìn)行優(yōu)化,最終邏輯單元為1 368 cells,符合設計目標,實(shí)現了對智能卡的數據復位及收發(fā)操作。