<strike id="tpvd9"><dfn id="tpvd9"></dfn></strike>

        <em id="tpvd9"></em>

          <address id="tpvd9"></address>
            <dfn id="tpvd9"><sub id="tpvd9"></sub></dfn>

            <thead id="tpvd9"><noframes id="tpvd9">
            <ruby id="tpvd9"></ruby>

                  <thead id="tpvd9"></thead>
                  歡迎您訪(fǎng)問(wèn)鄭州興邦電子股份有限公司官方網(wǎng)站!
                  阿里巴巴誠信通企業(yè)
                  全國咨詢(xún)熱線(xiàn):40000-63966
                  興邦電子,中國水控機第一品牌

                  聯(lián)系興邦電子

                  全國咨詢(xún)熱線(xiàn):40000-63966

                  售后:0371-55132951/55132952

                  工廠(chǎng):河南省 鄭州市 高新區蓮花街電子電器產(chǎn)業(yè)園

                  DSP與IC卡接口設計

                  文章出處:http://psychicreadingswithdeb.com 作者:北京郵電大學(xué) 張彬&nbsp;&nbsp; 人氣: 發(fā)表時(shí)間:2011年11月02日

                  [文章內容簡(jiǎn)介]:DSP與IC卡接口設計

                  摘 要: 本文給出兩種IC卡(存儲卡和智能卡)結構、讀寫(xiě)操作以及與DSP接口設計。
                  關(guān)鍵詞: IC卡;存儲卡;智能卡;DSP
                  圖1 AT24C16SC結構框圖
                  圖1 AT24C16SC結構框圖
                  AT24C16SC時(shí)序圖
                  圖2 AT24C16SC時(shí)序圖

                    隨著(zhù)社會(huì )信息化程度的提高,IC卡的使用越來(lái)越普遍。IC卡分為接觸式和非接觸式兩種。接觸式IC卡分為存儲卡和智能卡(又叫作CPU卡)。本文討論了如何使用DSP的GPIO(通用輸入輸出)接口實(shí)現與IC卡的通信。

                    圖3 寫(xiě)卡操作命令時(shí)序圖
                  圖4 讀卡操作命令時(shí)序圖
                    圖4 讀卡操作命令時(shí)序圖

                    DSP和存儲卡接口
                    存儲卡只具有存儲功能,是一片串行的EEPROM。以AT24C16SC為例,支持3V和5V電源,存取速度可達100KHz(3V)和400KHz(5V);容量為16Kbit,分為128頁(yè)面;雙向數據線(xiàn)(SDA)為OD(Open Drain)驅動(dòng),需加上拉電阻方可實(shí)施通信。該芯片可擦寫(xiě)10萬(wàn)次,內部數據可保持100年,具有3000V以上高壓保護。內部結構如圖1。
                    存儲卡訪(fǎng)問(wèn)時(shí)序為I2C標準時(shí)序:在時(shí)鐘線(xiàn)(SCL)為低時(shí)通過(guò)SDA實(shí)施對芯片讀寫(xiě);當SCL為高時(shí),SDA處于保持狀態(tài)(即數據有效期)。當SCL為高時(shí),SDA的變化表示芯片處于不同狀態(tài):
                    ● 開(kāi)始狀態(tài):當SCL為高時(shí),SDA由高變低表示一個(gè)開(kāi)始狀態(tài),任何操作前均需一個(gè)開(kāi)始狀態(tài)。
                    ● 停止狀態(tài):當SCL為高時(shí),SDA由低變高表示一個(gè)停止狀態(tài),跟在每個(gè)操作后,將卡置于等待(Stand by)模式。
                    在讀寫(xiě)時(shí),地址和數據都是按照8bit的大小進(jìn)行傳輸,接收的一方需要返回一個(gè)ACK信號表示確認,這個(gè)ACK信號用在第9bit的位置返回一個(gè)‘0’來(lái)表示。在讀卡操作時(shí),DSP在收到8bit后,第9個(gè)clock時(shí)應向卡發(fā)送‘0’,表示收到了正確的數據同時(shí)要求卡繼續發(fā)送下一組8bit數據,如果沒(méi)有這個(gè)ACK信號,則卡就會(huì )中止當前讀操作返回等待模式。在寫(xiě)卡操作時(shí),卡收到DSP發(fā)送的地址和數據后也應返回一個(gè)ACK信號,表示收到了正確的命令。開(kāi)始和停止狀態(tài)、確認信號時(shí)序圖如圖2。
                    一個(gè)讀寫(xiě)操作的開(kāi)始需要先發(fā)送一個(gè)Device Address字節,這個(gè)字節的高4bit是“1010”,接著(zhù)3bit是卡的高位地址,比如AT24C16SC需要有11位地址(2K字節的大小),高3bit地址就是這里來(lái)指示,最后1bit是讀寫(xiě)控制bit,若為‘1’,則表示后面進(jìn)行一個(gè)讀操作,若為‘0’,則表示后面進(jìn)行一個(gè)寫(xiě)操作。
                    寫(xiě)卡操作分為字寫(xiě)和頁(yè)寫(xiě)。字寫(xiě)時(shí),當發(fā)送完Device Address字節(最后1bit為‘0’)后,發(fā)送一個(gè)Word Address字節(卡的低8位地址),接著(zhù)發(fā)送一個(gè)字節的數據,最后發(fā)送停止狀態(tài)。頁(yè)寫(xiě)時(shí),可連續發(fā)送16個(gè)字節數據后再發(fā)送停止狀態(tài)位。需要注意的是頁(yè)寫(xiě)時(shí),低4位地址是卡內部自增的,當到達頁(yè)末地址時(shí)會(huì )自動(dòng)返回頁(yè)首地址,所以要正確發(fā)送停止狀態(tài),否則繼續寫(xiě)入的字節就會(huì )覆蓋原來(lái)的數據(命令時(shí)序圖見(jiàn)圖3)。
                  讀卡操作分為讀當前地址、讀任意地址和順序讀三種方式。以讀任意地址為例,在發(fā)送完Device Address字節(最后1bit為‘1’指明讀操作)后,發(fā)送Word Address字節,這一過(guò)程是要裝載要讀的地址,再發(fā)送一個(gè)Device Address字節(同樣最后1bit為‘1’指明讀操作),便可從卡讀取一個(gè)連續8bit數據,最后發(fā)送停止狀態(tài)(而不是ACK信號)結束讀操作(命令時(shí)序圖見(jiàn)圖4)。
                    以上分析可見(jiàn),DSP與存儲卡接口的關(guān)鍵就是如何產(chǎn)生SCL和SDA時(shí)序。將DSP的GPIO接口分別與存儲卡的SCL、SDA連接。需要注意的是,因為DSP的工作頻率很高,改變狀態(tài)之前需要插入等待周期。
                  寫(xiě)卡的函數編程實(shí)例從略(基于C5409)。
                  圖5 智能卡的復位應答

                  圖5 智能卡的復位應答

                  圖6智能卡的訪(fǎng)問(wèn)時(shí)序

                  圖6智能卡的訪(fǎng)問(wèn)時(shí)序


                    DSP與智能卡接口
                    智能卡內部有CPU、ROM、RAM、EEPROM等資源,卡內駐有智能卡操作系統(COS),實(shí)施對卡的管理和維護。因為卡內有CPU和RAM,可根據需要進(jìn)行一些運算和數據加密,卡內EEPOM用于存放用戶(hù)資料(容量也較存儲卡大)。智能卡較存儲卡功能更強,更安全(數據都受到加密保護),因而應用面更廣,價(jià)格也比存儲卡高。
                    智能卡的操作遵循ISO7816-3規范,通信時(shí)序類(lèi)似于雙向RS-232通信協(xié)議。操作前需要對卡進(jìn)行激活,激活的步驟為:VCC供電、RST為低、I/O設為輸入、提供CLK;之后對卡進(jìn)行復位,復位分為冷復位和熱復位,兩者區別在于冷復位時(shí)RST由低變高,而熱復位時(shí)RST由高變低再變高。復位后,卡應發(fā)出復位應答;DSP接收到卡的復位應答后,便可向卡發(fā)送指令。取卡前需要進(jìn)行“釋放”,步驟順序與激活相反:RST變低,CLK變低,VCC掉電。
                    卡的復位應答信息的組成如圖5。
                    TS:初始化字節,用來(lái)進(jìn)行bit同步和指示后續通信的編碼方式,例如0x3f表示反碼編碼,0x3b表示正常編碼;
                    T0:格式字節,高4個(gè)bit用來(lái)指示是否傳輸TA1、TB1、TC1、TD1,低4個(gè)bit用來(lái)指示有多少個(gè)歷史字符;
                    TAi、TBi、TCi:接口字節,用來(lái)設置操作的一些參數,比如速率,保護時(shí)間,編程電壓等;
                    TDi:接口字節,高4bit用來(lái)指示是否傳輸TAi+1、TBi+1、TCi+1,低4個(gè)bit用來(lái)指示傳輸類(lèi)型T。T=0,字符半雙工模式;T=1,塊半雙工模式,其他的T值保留。我們常用T=0即字符模式;
                    T1_TK:歷史字符,由制卡商提供;
                    TCK:校驗位,是T0_TK所有字節的異或,T=0時(shí)不傳此字節。
                    訪(fǎng)問(wèn)卡的時(shí)序如圖6所示。
                    可以看出,1個(gè)字節幀由13位組成,包括1個(gè)起始位、8個(gè)數據位、1個(gè)校驗位、2個(gè)保護時(shí)間位。在外部提供時(shí)鐘方式(常用方式)下,圖6中每個(gè)位占的時(shí)間間隔(ETU)默認為外部時(shí)鐘周期的372倍。例如,外部時(shí)鐘為3.57MHz時(shí),位的間隔是9600,相當于速率為9600。保護時(shí)間最長(cháng)可以為外部時(shí)鐘周期的254倍。
                    DSP與智能卡的連接跟存儲卡不同,RST引腳用來(lái)對卡內CPU復位,可與DSP一個(gè)GPIO連接;智能卡的CLK為卡內CPU工作時(shí)鐘,速度高(1MHz~5MHz),要求穩定,用DSP的GPIO產(chǎn)生這樣的時(shí)鐘不可能。通常使用DSP一個(gè)串口McBSP發(fā)送的時(shí)鐘CLKX作為智能卡的時(shí)鐘。與存儲卡相同,DSP的一個(gè)GPIO與智能卡I/O相連。I/O是雙向,需要正確設置DSP的GPIO方向,且有精確的速率要求的,即為CLK速率的1/372,可以采用DSP內部定時(shí)器產(chǎn)生。
                    讀卡函數編程實(shí)例從略(基于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

                  本文關(guān)鍵詞:DSP與IC卡接口設計
                  上一篇:智能卡閱讀器[ 11-02 ] 下一篇:Gemplus 智能卡讀寫(xiě)器系列介紹[ 11-02 ]
                  回到頂部
                  99久热只有精品视频在线17_精品一区二区三区自拍图片_最新国产v亚洲_久久综合九色综合久
                  <strike id="tpvd9"><dfn id="tpvd9"></dfn></strike>

                        <em id="tpvd9"></em>

                          <address id="tpvd9"></address>
                            <dfn id="tpvd9"><sub id="tpvd9"></sub></dfn>

                            <thead id="tpvd9"><noframes id="tpvd9">
                            <ruby id="tpvd9"></ruby>

                                  <thead id="tpvd9"></thead>