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