• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 解讀智能卡數(shù)據(jù)傳輸協(xié)議I2C總線

    解讀智能卡數(shù)據(jù)傳輸協(xié)議I2C總線

    作者: 時間:2018-08-02 來源:網(wǎng)絡(luò) 收藏

    由于串行時鐘同步數(shù)據(jù)傳輸是不復(fù)雜而通用的,它們就被用的比較頻繁。使用I2C(Inte-Integrated Circuit)總線的元件首先由Philips開發(fā),從1990年就可以使用了。這個總線立足于一根串行的雙向數(shù)據(jù)引 線和一根串行的時鐘引線,Pc總線的規(guī)定包括了硬件(兩條引線)和軟件兩方面,具有數(shù)據(jù)傳輸格式化的意 義。每個在總線上的器件可以取得對總線的控制并能對在總線上的其他器件發(fā)出請求。

    本文引用地址:http://www.czjhyjcfj.com/article/201808/385082.htm

    由于存儲卡也是被同步時鐘控制的,Pc總線很快就得以立足于芯片卡行業(yè)之中,大量的存儲器可以在卡中 使用。下面的例子是基于SGS-ThornsON ST 24C04存儲器芯片的,它有512字節(jié)的可自由讀出或?qū)懭说腅PROM 。對EEPROM編程的時聞安排由芯片內(nèi)部處理,所以這方面不受外部控制。

    I2C總線的硬件包括了在終端和卡之間的兩條線,串行時鐘SCL(Serial Clock)線傳送時鐘,其范圍可達(dá) 100kHz,它產(chǎn)生的數(shù)據(jù)傳輸率高達(dá)100kb/s,對智能卡來說是比較高的,另一條線,串行數(shù)據(jù)SDA(Serial Data)線,用來雙向交換卡和終端之間的數(shù)據(jù)。SDA線經(jīng)一上拉電阻連接到終端的供電電源(Voc)。通信的 雙方只能把這條線下拉至地。于是送出一高電平就毫無作用,這包括發(fā)送方把它的輸出轉(zhuǎn)換為高阻狀態(tài)(三 態(tài)),而上拉電阻把SDA線拉至供電電壓電平。

    在智能卡的環(huán)境中,終端總是Pc總線為主而卡是從。數(shù)據(jù)傳送總是按單字節(jié)打包,字節(jié)的最高位(第8位) 首先發(fā)送,每次在SDA線上的傳送由開始信號啟動并由停止信號結(jié)束,開始信號包括了在SDA線上的下降邊而 此時在SCL線上的信號為高。相反,SDA線上的上升邊而SCL線上的信號為低則指示出停止信號,參見圖1。接 收方必須使SDA線接地一個時鐘周期以便對每1字節(jié)的接收給以確認(rèn)。


    圖1 I2C總線上的開始與停止信號

    通信開始后,第1字節(jié)的頭7位為接收方的地址。在我們的例子中,為了簡單起見,我們假定地址的二進(jìn)制 之值為1010000X。當(dāng)然這可能隨芯片的類型而改變,對某些存儲器可在某限度內(nèi)選擇改變。地址中的最后一 位(x)向接收方指示是讀出還是寫入數(shù)據(jù),1為讀出而0則是寫人。

    下面的例子說明Pc總線用于智能卡時的一般功能。

    1)從一地址讀出

    對于從智能卡EEPROM的讀出有幾種類型的訪問,此處所述類型為一次讀出一字節(jié),然而,也有可能從一列 中讀出幾個字節(jié),如圖2所示。


    圖2 用I2C總線從存儲器讀出一個字節(jié)

    讀序列由開始信號啟動,接著各位含有卡的地址以及規(guī)定的寫控制位。這向卡表明它必須立即把緊接的數(shù)據(jù)存儲在內(nèi)部緩存器中。這個緩沖器不過是EEPROM的面向字節(jié)的地址指針。卡接收到第1字節(jié)后,它把SDA線接地一個周期以示確認(rèn)。而后,終端把EEPROM地址傳送給卡,再一次,卡確認(rèn)收到的數(shù)據(jù)。終端于是送出一個開始信號和卡的地址以及規(guī)定的讀出位。接收到了這些,卡從指針給出的地址處取出數(shù)據(jù)送給終端。終端不需要對收到數(shù)據(jù)予以確認(rèn),它僅僅給卡一個停止信號,從而結(jié)束讀出一字節(jié)的序列。

    2)寫人一地址

    像從卡的EEPROM讀出數(shù)據(jù)那樣,寫入數(shù)據(jù)也有不同的模式,它們中最簡單的說明如下,用它可以在存儲器中的任何地方寫人單獨(dú)的一個字節(jié)。

    再一次,序列由終端的開始信號啟動,緊接著卡的地址以及規(guī)定的寫人位。卡確認(rèn)收到后,從終端接收要寫人數(shù)據(jù)的EEPROM的地址。

    卡確認(rèn)所有這些,于是接收數(shù)據(jù)。當(dāng)終端收到第3次的確認(rèn),它表示卡已接收到了數(shù)據(jù),便送出一個停止信號。接著,卡開始把收到的數(shù)據(jù)寫人EEPROM,它不需要外部的定時信號。這樣就結(jié)束了寫入序列,而此字節(jié)已存人EEPROM,如圖3所示。


    圖3 用I2C總線向存儲器寫人一個字節(jié)



    關(guān)鍵詞:

    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 河北省| 固镇县| 栖霞市| 广安市| 都昌县| 偃师市| 淄博市| 德清县| 凤冈县| 伊宁县| 三台县| 武陟县| 南康市| 巫山县| 普兰店市| 南阳市| 临沭县| 汤原县| 瓮安县| 西乡县| 和静县| 武夷山市| 长宁县| 德清县| 永济市| 金乡县| 墨竹工卡县| 湛江市| 思茅市| 东乡县| 海林市| 清河县| 永靖县| 大方县| 商洛市| 舟山市| 广丰县| 日照市| 宜君县| 宜城市| 崇义县|