智能卡數據傳輸協議I2C總線
發布時間:2008/11/22 0:00:00 訪問次數:536
由于串行時鐘同步數據傳輸是不復雜而通用的,它們就被用的比較頻繁。使用i2c(inte-integrated circuit)總線的元件首先由philips開發,從1990年就可以使用了。這個總線立足于一根串行的雙向數據引 線和一根串行的時鐘引線,pc總線的規定包括了硬件(兩條引線)和軟件兩方面,具有數據傳輸格式化的意 義。每個在總線上的器件可以取得對總線的控制并能對在總線上的其他器件發出請求。
由于存儲卡也是被同步時鐘控制的,pc總線很快就得以立足于芯片卡行業之中,大量的存儲器可以在卡中 使用。下面的例子是基于sgs-thornson st 24c04存儲器芯片的,它有512字節的可自由讀出或寫人的eprom 。對eeprom編程的時聞安排由芯片內部處理,所以這方面不受外部控制。
i2c總線的硬件包括了在終端和卡之間的兩條線,串行時鐘scl(serial clock)線傳送時鐘,其范圍可達 100khz,它產生的數據傳輸率高達100kb/s,對智能卡來說是比較高的,另一條線,串行數據sda(serial data)線,用來雙向交換卡和終端之間的數據。sda線經一上拉電阻連接到終端的供電電源(voc)。通信的 雙方只能把這條線下拉至地。于是送出一高電平就毫無作用,這包括發送方把它的輸出轉換為高阻狀態(三 態),而上拉電阻把sda線拉至供電電壓電平。
在智能卡的環境中,終端總是pc總線為主而卡是從。數據傳送總是按單字節打包,字節的最高位(第8位) 首先發送,每次在sda線上的傳送由開始信號啟動并由停止信號結束,開始信號包括了在sda線上的下降邊而 此時在scl線上的信號為高。相反,sda線上的上升邊而scl線上的信號為低則指示出停止信號,參見圖1。接 收方必須使sda線接地一個時鐘周期以便對每1字節的接收給以確認。
圖1 i2c總線上的開始與停止信號
通信開始后,第1字節的頭7位為接收方的地址。在我們的例子中,為了簡單起見,我們假定地址的二進制 之值為1010000x。當然這可能隨芯片的類型而改變,對某些存儲器可在某限度內選擇改變。地址中的最后一 位(x)向接收方指示是讀出還是寫入數據,1為讀出而0則是寫人。
下面的例子說明pc總線用于智能卡時的一般功能。
1)從一地址讀出
對于從智能卡eeprom的讀出有幾種類型的訪問,此處所述類型為一次讀出一字節,然而,也有可能從一列 中讀出幾個字節,如圖2所示。
圖2 用i2c總線從存儲器讀出一個字節
讀序列由開始信號啟動,接著各位含有卡的地址以及規定的寫控制位。這向卡表明它必須立即把緊接的數據存儲在內部緩存器中。這個緩沖器不過是eeprom的面向字節的地址指針。卡接收到第1字節后,它把sda線接地一個周期以示確認。而后,終端把eeprom地址傳送給卡,再一次,卡確認收到的數據。終端于是送出一個開始信號和卡的地址以及規定的讀出位。接收到了這些,卡從指針給出的地址處取出數據送給終端。終端不需要對收到數據予以確認,它僅僅給卡一個停止信號,從而結束讀出一字節的序列。
2)寫人一地址
像從卡的eeprom讀出數據那樣,寫入數據也有不同的模式,它們中最簡單的說明如下,用它可以在存儲器中的任何地方寫人單獨的一個字節。
再一次,序列由終端的開始信號啟動,緊接著卡的地址以及規定的寫人位。卡確認收到后,從終端接收要寫人數據的eeprom的地址。
卡確認所有這些,于是接收數據。當終端收到第3次的確認,它表示卡已接收到了數據,便送出一個停止信號。接著,卡開始把收到的數據寫人eeprom,它不需要外部的定時信號。這樣就結束了寫入序列,而此字節已存人eeprom,如圖3所示。
圖3 用i2c總線向存儲器寫人一個字節
歡迎轉載,信息來源維庫電子市場網(www.dzsc.com)
由于串行時鐘同步數據傳輸是不復雜而通用的,它們就被用的比較頻繁。使用i2c(inte-integrated circuit)總線的元件首先由philips開發,從1990年就可以使用了。這個總線立足于一根串行的雙向數據引 線和一根串行的時鐘引線,pc總線的規定包括了硬件(兩條引線)和軟件兩方面,具有數據傳輸格式化的意 義。每個在總線上的器件可以取得對總線的控制并能對在總線上的其他器件發出請求。
由于存儲卡也是被同步時鐘控制的,pc總線很快就得以立足于芯片卡行業之中,大量的存儲器可以在卡中 使用。下面的例子是基于sgs-thornson st 24c04存儲器芯片的,它有512字節的可自由讀出或寫人的eprom 。對eeprom編程的時聞安排由芯片內部處理,所以這方面不受外部控制。
i2c總線的硬件包括了在終端和卡之間的兩條線,串行時鐘scl(serial clock)線傳送時鐘,其范圍可達 100khz,它產生的數據傳輸率高達100kb/s,對智能卡來說是比較高的,另一條線,串行數據sda(serial data)線,用來雙向交換卡和終端之間的數據。sda線經一上拉電阻連接到終端的供電電源(voc)。通信的 雙方只能把這條線下拉至地。于是送出一高電平就毫無作用,這包括發送方把它的輸出轉換為高阻狀態(三 態),而上拉電阻把sda線拉至供電電壓電平。
在智能卡的環境中,終端總是pc總線為主而卡是從。數據傳送總是按單字節打包,字節的最高位(第8位) 首先發送,每次在sda線上的傳送由開始信號啟動并由停止信號結束,開始信號包括了在sda線上的下降邊而 此時在scl線上的信號為高。相反,sda線上的上升邊而scl線上的信號為低則指示出停止信號,參見圖1。接 收方必須使sda線接地一個時鐘周期以便對每1字節的接收給以確認。
圖1 i2c總線上的開始與停止信號
通信開始后,第1字節的頭7位為接收方的地址。在我們的例子中,為了簡單起見,我們假定地址的二進制 之值為1010000x。當然這可能隨芯片的類型而改變,對某些存儲器可在某限度內選擇改變。地址中的最后一 位(x)向接收方指示是讀出還是寫入數據,1為讀出而0則是寫人。
下面的例子說明pc總線用于智能卡時的一般功能。
1)從一地址讀出
對于從智能卡eeprom的讀出有幾種類型的訪問,此處所述類型為一次讀出一字節,然而,也有可能從一列 中讀出幾個字節,如圖2所示。
圖2 用i2c總線從存儲器讀出一個字節
讀序列由開始信號啟動,接著各位含有卡的地址以及規定的寫控制位。這向卡表明它必須立即把緊接的數據存儲在內部緩存器中。這個緩沖器不過是eeprom的面向字節的地址指針。卡接收到第1字節后,它把sda線接地一個周期以示確認。而后,終端把eeprom地址傳送給卡,再一次,卡確認收到的數據。終端于是送出一個開始信號和卡的地址以及規定的讀出位。接收到了這些,卡從指針給出的地址處取出數據送給終端。終端不需要對收到數據予以確認,它僅僅給卡一個停止信號,從而結束讀出一字節的序列。
2)寫人一地址
像從卡的eeprom讀出數據那樣,寫入數據也有不同的模式,它們中最簡單的說明如下,用它可以在存儲器中的任何地方寫人單獨的一個字節。
再一次,序列由終端的開始信號啟動,緊接著卡的地址以及規定的寫人位。卡確認收到后,從終端接收要寫人數據的eeprom的地址。
卡確認所有這些,于是接收數據。當終端收到第3次的確認,它表示卡已接收到了數據,便送出一個停止信號。接著,卡開始把收到的數據寫人eeprom,它不需要外部的定時信號。這樣就結束了寫入序列,而此字節已存人eeprom,如圖3所示。
圖3 用i2c總線向存儲器寫人一個字節
歡迎轉載,信息來源維庫電子市場網(www.dzsc.com)
上一篇:智能卡數據傳輸T=0傳輸協議
上一篇:智能卡的芯片硬件擴展