解讀智能卡數據傳輸協(xié)議I2C總線(xiàn)
由于串行時(shí)鐘同步數據傳輸是不復雜而通用的,它們就被用的比較頻繁。使用I2C(Inte-Integrated Circuit)總線(xiàn)的元件首先由Philips開(kāi)發(fā),從1990年就可以使用了。這個(gè)總線(xiàn)立足于一根串行的雙向數據引 線(xiàn)和一根串行的時(shí)鐘引線(xiàn),Pc總線(xiàn)的規定包括了硬件(兩條引線(xiàn))和軟件兩方面,具有數據傳輸格式化的意 義。每個(gè)在總線(xiàn)上的器件可以取得對總線(xiàn)的控制并能對在總線(xiàn)上的其他器件發(fā)出請求。
本文引用地址:http://dyxdggzs.com/article/201808/385082.htm由于存儲卡也是被同步時(shí)鐘控制的,Pc總線(xiàn)很快就得以立足于芯片卡行業(yè)之中,大量的存儲器可以在卡中 使用。下面的例子是基于SGS-ThornsON ST 24C04存儲器芯片的,它有512字節的可自由讀出或寫(xiě)人的EPROM 。對EEPROM編程的時(shí)聞安排由芯片內部處理,所以這方面不受外部控制。
I2C總線(xiàn)的硬件包括了在終端和卡之間的兩條線(xiàn),串行時(shí)鐘SCL(Serial Clock)線(xiàn)傳送時(shí)鐘,其范圍可達 100kHz,它產(chǎn)生的數據傳輸率高達100kb/s,對智能卡來(lái)說(shuō)是比較高的,另一條線(xiàn),串行數據SDA(Serial Data)線(xiàn),用來(lái)雙向交換卡和終端之間的數據。SDA線(xiàn)經(jīng)一上拉電阻連接到終端的供電電源(Voc)。通信的 雙方只能把這條線(xiàn)下拉至地。于是送出一高電平就毫無(wú)作用,這包括發(fā)送方把它的輸出轉換為高阻狀態(tài)(三 態(tài)),而上拉電阻把SDA線(xiàn)拉至供電電壓電平。
在智能卡的環(huán)境中,終端總是Pc總線(xiàn)為主而卡是從。數據傳送總是按單字節打包,字節的最高位(第8位) 首先發(fā)送,每次在SDA線(xiàn)上的傳送由開(kāi)始信號啟動(dòng)并由停止信號結束,開(kāi)始信號包括了在SDA線(xiàn)上的下降邊而 此時(shí)在SCL線(xiàn)上的信號為高。相反,SDA線(xiàn)上的上升邊而SCL線(xiàn)上的信號為低則指示出停止信號,參見(jiàn)圖1。接 收方必須使SDA線(xiàn)接地一個(gè)時(shí)鐘周期以便對每1字節的接收給以確認。

圖1 I2C總線(xiàn)上的開(kāi)始與停止信號
通信開(kāi)始后,第1字節的頭7位為接收方的地址。在我們的例子中,為了簡(jiǎn)單起見(jiàn),我們假定地址的二進(jìn)制 之值為1010000X。當然這可能隨芯片的類(lèi)型而改變,對某些存儲器可在某限度內選擇改變。地址中的最后一 位(x)向接收方指示是讀出還是寫(xiě)入數據,1為讀出而0則是寫(xiě)人。
下面的例子說(shuō)明Pc總線(xiàn)用于智能卡時(shí)的一般功能。
1)從一地址讀出
對于從智能卡EEPROM的讀出有幾種類(lèi)型的訪(fǎng)問(wèn),此處所述類(lèi)型為一次讀出一字節,然而,也有可能從一列 中讀出幾個(gè)字節,如圖2所示。

圖2 用I2C總線(xiàn)從存儲器讀出一個(gè)字節
讀序列由開(kāi)始信號啟動(dòng),接著(zhù)各位含有卡的地址以及規定的寫(xiě)控制位。這向卡表明它必須立即把緊接的數據存儲在內部緩存器中。這個(gè)緩沖器不過(guò)是EEPROM的面向字節的地址指針??ń邮盏降?字節后,它把SDA線(xiàn)接地一個(gè)周期以示確認。而后,終端把EEPROM地址傳送給卡,再一次,卡確認收到的數據。終端于是送出一個(gè)開(kāi)始信號和卡的地址以及規定的讀出位。接收到了這些,卡從指針給出的地址處取出數據送給終端。終端不需要對收到數據予以確認,它僅僅給卡一個(gè)停止信號,從而結束讀出一字節的序列。
2)寫(xiě)人一地址
像從卡的EEPROM讀出數據那樣,寫(xiě)入數據也有不同的模式,它們中最簡(jiǎn)單的說(shuō)明如下,用它可以在存儲器中的任何地方寫(xiě)人單獨的一個(gè)字節。
再一次,序列由終端的開(kāi)始信號啟動(dòng),緊接著(zhù)卡的地址以及規定的寫(xiě)人位??ù_認收到后,從終端接收要寫(xiě)人數據的EEPROM的地址。
卡確認所有這些,于是接收數據。當終端收到第3次的確認,它表示卡已接收到了數據,便送出一個(gè)停止信號。接著(zhù),卡開(kāi)始把收到的數據寫(xiě)人EEPROM,它不需要外部的定時(shí)信號。這樣就結束了寫(xiě)入序列,而此字節已存人EEPROM,如圖3所示。

圖3 用I2C總線(xiàn)向存儲器寫(xiě)人一個(gè)字節
評論