DSP與IC卡接口設計
文章出處:http://5052h112.com 作者:北京郵電大學 張彬 人氣: 發表時間:2011年11月02日
摘 要: 本文給出兩種IC卡(存儲卡和智能卡)結構、讀寫操作以及與DSP接口設計。
關鍵詞: IC卡;存儲卡;智能卡;DSP
圖1 AT24C16SC結構框圖
圖2 AT24C16SC時序圖
隨著社會信息化程度的提高,IC卡的使用越來越普遍。IC卡分為接觸式和非接觸式兩種。接觸式IC卡分為存儲卡和智能卡(又叫作CPU卡)。本文討論了如何使用DSP的GPIO(通用輸入輸出)接口實現與IC卡的通信。
圖3 寫卡操作命令時序圖
圖4 讀卡操作命令時序圖
DSP和存儲卡接口
存儲卡只具有存儲功能,是一片串行的EEPROM。以AT24C16SC為例,支持3V和5V電源,存取速度可達100KHz(3V)和400KHz(5V);容量為16Kbit,分為128頁面;雙向數據線(SDA)為OD(Open Drain)驅動,需加上拉電阻方可實施通信。該芯片可擦寫10萬次,內部數據可保持100年,具有3000V以上高壓保護。內部結構如圖1。
存儲卡訪問時序為I2C標準時序:在時鐘線(SCL)為低時通過SDA實施對芯片讀寫;當SCL為高時,SDA處于保持狀態(即數據有效期)。當SCL為高時,SDA的變化表示芯片處于不同狀態:
● 開始狀態:當SCL為高時,SDA由高變低表示一個開始狀態,任何操作前均需一個開始狀態。
● 停止狀態:當SCL為高時,SDA由低變高表示一個停止狀態,跟在每個操作后,將卡置于等待(Stand by)模式。
在讀寫時,地址和數據都是按照8bit的大小進行傳輸,接收的一方需要返回一個ACK信號表示確認,這個ACK信號用在第9bit的位置返回一個‘0’來表示。在讀卡操作時,DSP在收到8bit后,第9個clock時應向卡發送‘0’,表示收到了正確的數據同時要求卡繼續發送下一組8bit數據,如果沒有這個ACK信號,則卡就會中止當前讀操作返回等待模式。在寫卡操作時,卡收到DSP發送的地址和數據后也應返回一個ACK信號,表示收到了正確的命令。開始和停止狀態、確認信號時序圖如圖2。
一個讀寫操作的開始需要先發送一個Device Address字節,這個字節的高4bit是“1010”,接著3bit是卡的高位地址,比如AT24C16SC需要有11位地址(2K字節的大小),高3bit地址就是這里來指示,最后1bit是讀寫控制bit,若為‘1’,則表示后面進行一個讀操作,若為‘0’,則表示后面進行一個寫操作。
寫卡操作分為字寫和頁寫。字寫時,當發送完Device Address字節(最后1bit為‘0’)后,發送一個Word Address字節(卡的低8位地址),接著發送一個字節的數據,最后發送停止狀態。頁寫時,可連續發送16個字節數據后再發送停止狀態位。需要注意的是頁寫時,低4位地址是卡內部自增的,當到達頁末地址時會自動返回頁首地址,所以要正確發送停止狀態,否則繼續寫入的字節就會覆蓋原來的數據(命令時序圖見圖3)。
讀卡操作分為讀當前地址、讀任意地址和順序讀三種方式。以讀任意地址為例,在發送完Device Address字節(最后1bit為‘1’指明讀操作)后,發送Word Address字節,這一過程是要裝載要讀的地址,再發送一個Device Address字節(同樣最后1bit為‘1’指明讀操作),便可從卡讀取一個連續8bit數據,最后發送停止狀態(而不是ACK信號)結束讀操作(命令時序圖見圖4)。
以上分析可見,DSP與存儲卡接口的關鍵就是如何產生SCL和SDA時序。將DSP的GPIO接口分別與存儲卡的SCL、SDA連接。需要注意的是,因為DSP的工作頻率很高,改變狀態之前需要插入等待周期。
寫卡的函數編程實例從略(基于C5409)。
圖5 智能卡的復位應答
圖6智能卡的訪問時序
DSP與智能卡接口
智能卡內部有CPU、ROM、RAM、EEPROM等資源,卡內駐有智能卡操作系統(COS),實施對卡的管理和維護。因為卡內有CPU和RAM,可根據需要進行一些運算和數據加密,卡內EEPOM用于存放用戶資料(容量也較存儲卡大)。智能卡較存儲卡功能更強,更安全(數據都受到加密保護),因而應用面更廣,價格也比存儲卡高。
智能卡的操作遵循ISO7816-3規范,通信時序類似于雙向RS-232通信協議。操作前需要對卡進行激活,激活的步驟為:VCC供電、RST為低、I/O設為輸入、提供CLK;之后對卡進行復位,復位分為冷復位和熱復位,兩者區別在于冷復位時RST由低變高,而熱復位時RST由高變低再變高。復位后,卡應發出復位應答;DSP接收到卡的復位應答后,便可向卡發送指令。取卡前需要進行“釋放”,步驟順序與激活相反:RST變低,CLK變低,VCC掉電。
卡的復位應答信息的組成如圖5。
TS:初始化字節,用來進行bit同步和指示后續通信的編碼方式,例如0x3f表示反碼編碼,0x3b表示正常編碼;
T0:格式字節,高4個bit用來指示是否傳輸TA1、TB1、TC1、TD1,低4個bit用來指示有多少個歷史字符;
TAi、TBi、TCi:接口字節,用來設置操作的一些參數,比如速率,保護時間,編程電壓等;
TDi:接口字節,高4bit用來指示是否傳輸TAi+1、TBi+1、TCi+1,低4個bit用來指示傳輸類型T。T=0,字符半雙工模式;T=1,塊半雙工模式,其他的T值保留。我們常用T=0即字符模式;
T1_TK:歷史字符,由制卡商提供;
TCK:校驗位,是T0_TK所有字節的異或,T=0時不傳此字節。
訪問卡的時序如圖6所示。
可以看出,1個字節幀由13位組成,包括1個起始位、8個數據位、1個校驗位、2個保護時間位。在外部提供時鐘方式(常用方式)下,圖6中每個位占的時間間隔(ETU)默認為外部時鐘周期的372倍。例如,外部時鐘為3.57MHz時,位的間隔是9600,相當于速率為9600。保護時間最長可以為外部時鐘周期的254倍。
DSP與智能卡的連接跟存儲卡不同,RST引腳用來對卡內CPU復位,可與DSP一個GPIO連接;智能卡的CLK為卡內CPU工作時鐘,速度高(1MHz~5MHz),要求穩定,用DSP的GPIO產生這樣的時鐘不可能。通常使用DSP一個串口McBSP發送的時鐘CLKX作為智能卡的時鐘。與存儲卡相同,DSP的一個GPIO與智能卡I/O相連。I/O是雙向,需要正確設置DSP的GPIO方向,且有精確的速率要求的,即為CLK速率的1/372,可以采用DSP內部定時器產生。
讀卡函數編程實例從略(基于C5409)。■
參考文獻:
1. TMS320C54x DSP Reference Set:Enhanced Periherals,Texas Instruments,1999
2. TMS320C54x DSP Reference Set:CPU and Periherals,Texas Instruments,2001
3. AT24C16SC:2-Wire EEPROM Card Module,Atmel,2000