基於FPGA的I2C通信(一)

目錄

一、I2C通信協議

1.I2C總線介紹

2.I2C總線特性

3.I2C總線協議

3.1 SDA和SCL信號

3.1 數據有效性

3.2 起始和終止位

3.3 傳輸1字節格式

3.4 應答(ACK)與非應答(NACK)

3.5 從設備器件地址和讀寫位

二、EEPROM介紹(AT24C64)

1.EEPROM總線時序

2.EEPROM讀寫時序

2.1 設備地址

2.2 寫操作

2.3 讀操作


一、I2C通信協議

1.I2C總線介紹

I2C總線是由Philips公司開發的一種簡單、雙向二線制同步串行總線。它只需要兩根線即可在連接於總線上的器件之間傳送信息。

主器件用於啓動總線傳送數據,併產生時鐘以開放傳送的器件,此時任何被尋址的器件均被認爲是從器件.在總線上主和從、發和收的關係不是恆定的,而取決於此時數據傳送方向。如果主機要發送數據給從器件,則主機首先尋址從器件,然後主動發送數據至從器件,最後由主機終止數據傳送;如果主機要接收從器件的數據,首先由主器件尋址從器件.然後主機接收從器件發送的數據,最後由主機終止接收過程。在這種情況下.主機負責產生定時時鐘和終止數據傳送。

I2C總線是公認的世界標準,由50多家公司生產超過1000個不同的地方實施的集成電路。此外,通用的i2c總線用於各種控制體系結構,如系統管理總線(SMBus),電源管理總線(PMBus),智能平臺管理接口(IPMI),顯示器數據通道(DDC)和高級電信計算架構(ATCA)。

2.I2C總線特性

  • 只需要兩條總線:串行數據線(SDA)和串行時鐘線(SCL);
  • 每一個設備連接到總線是由一個唯一的地址和簡單的主/從關係存在的軟件尋址;
  • 它是一個真正的多主總線,如果兩個或更多的主同時發起數據傳輸,自帶碰撞檢測和仲裁,以防止數據損壞;
  • 串行、面向8位、雙向數據傳輸,在標準模式下可達100kbit /s,在快速模式下可達400kbit /s,在快速模式+下可達1mbit /s,此外,在高速模式下最高可達3.4 Mbit/s;
  • 串行,8位,超快模式下單向數據傳輸高達5mbit /s;
  • 片上過濾拒絕總線數據線上的尖峯,以保持數據的完整性;
  • 可連接到同一母線上的集成電路的數量僅受最大母線電容的限制。在某些條件下可以允許有更多的電容。

下圖爲I2C總線應用示例:

可以看到在SDA和SCL兩根總線上掛接了很多I2C總線設備,一次通過I2C總線進行數據傳輸。其與FPGA連接的總線拓撲圖如下圖:

3.I2C總線協議

兩線串行數據線(SDA)和串行時鐘(SCL),在連接到總線的設備之間傳遞信息。每個設備都有一個唯一的地址(無論是微控制器、LCD驅動程序、內存還是鍵盤接口),根據設備的功能,可以作爲發送器或接收器操作。一個液晶驅動器可能只是一個接收器,而存儲器可以接收和傳輸數據。除了發射器和接收器,設備在執行數據傳輸時也可以被認爲是主設備或從設備。

下圖爲使用兩個微控制器的i2c總線配置的例子。此示例突顯了在i2c總線上發現的主從關係和接收-發送關係。注意,這些關係不是永久的,但只依賴於當時數據傳輸的方向。

i2c總線上時鐘信號的產生總是由主設備負責;當在總線上傳輸數據時,每個主設備產生自己的時鐘信號。只有在被低的從設備拉下時鐘線或者由另外一個 主設備仲裁時,總線時鐘信號纔會改變。

3.1 SDA和SCL信號

SDA和SCL都是雙向的線路,通過電流源或上拉電阻連接到一個正的供應電壓(如下圖)。連接到總線的設備的輸出級必須有一個開路漏極或開路集電極來執行線和功能。I2C-bus上的數據可以在標準模式下以高達100kbit /s的速率傳輸,在快速模式下以高達400kbit /s的速率傳輸,在快速模式+下爲1 Mbit/s,在高速模式下最高爲3.4 Mbit/s。總線電容限制連接到總線的接口數量。

3.1 數據有效性

SDA線上的數據必須在時鐘高期間保持穩定。只有當SCL線上的時鐘信號是低時,數據線的高或低狀態才能改變
(見下圖)。每傳輸一個數據位產生一個時鐘脈衝。因此我們在設計信號時,最佳情況就是在時鐘線scl爲低電平中間時SDA數據線上的數據改變,在時鐘高電平中間時獲取SDA數據線上的數據。

3.2 起始和終止位

所有數據的傳輸都以START (S)開始,以STOP (P)結束(見下圖)。
       I2C總線空閒:SDA和SCL均爲高電平;
       I2C協議起始位:SCL爲高電平時,SDA出現下降沿;
       I2C協議終止位:SCL爲高電平時,SDA出現上升沿。

啓動和停止條件總是由主設備生成。在啓動條件後,總線被認爲是忙碌的。該總線在停止條件後的某一段時間內再次空閒。如果生成了重複啓動(Sr)而不是停止條件,則總線將保持忙碌狀態。在這方面,啓動(S)和重複啓動(Sr)條件在功能上是相同的。

3.3 傳輸1字節格式

在SDA數據線上傳輸的每個字節長度必須是8位。每次傳輸可以傳輸的字節數是不受限制的。每個字節後面必須跟着一個應答位(ACK)。數據從字節最高位(MSB)開始傳輸(見下圖)。如果一個從設備無法接收或發送另一個完整的字節的數據,直到執行一些其他功能,例如服務內部中斷,它可以維持時鐘線scl爲低強迫主設備進入等待狀態。當從設備準備好另一個字節的數據後繼續傳輸數據並釋放時鐘線SCL。

3.4 應答(ACK)與非應答(NACK)

應答發生在每個字節之後。應答位響應,表明該字節已成功接收,並且可以發送另一個字節。主設備產生所有時鐘脈衝,包括確認位第九個時鐘脈衝。應答信號定義如下:在響應時鐘脈衝期間,發射機釋放SDA線,接收機可以把SDA線拉低,,並且在時鐘高電平期間穩定保持低電平。

當SDA在第9個時鐘脈衝期間保持高時,這被定義爲非應答信號。然後,主設備可以生成終止傳輸的停止條件,或者生成啓動新傳輸的重複啓動條件。NACK的產生有五個條件:

  • 總線上沒有帶有所傳輸地址的接收者,因此沒有設備以應答。
  • 接收器無法接收或發送,因爲它正在執行一些實時功能,並沒有準備好開始與主控通信。
  • 在傳輸過程中,接收方獲取它不理解的數據或命令。
  • 在傳輸過程中,接收器無法接收到更多的數據字節。
  • 主控接收機必須將傳輸結束的信號發送給從發射機。

3.5 從設備器件地址和讀寫位

從設備地址是I2C協議在傳輸數據時對總線上設備尋址的依據。數據傳輸遵循下圖所示的格式。在啓動條件之後,發送一個從設備器件地址。這個地址有7位長,後面跟着一個數據方向位(R/W)——“0”表示傳輸(寫),“1”表示對數據的請求(讀)(參見下2圖)。數據傳輸總是以主設備產生的停止條件(P)結束。然而,如果一個主人仍然希望在總線上通信,它可以產生一個重複的開始條件(Sr)和地址而不用再產生一個停止條件。

圖: 完整數據傳輸圖

從設備器件地址通常是由固定爲和可變位組合而成的。所謂固定位就是器件本就確定無法更改的,認爲不能讓控制的的,而可變位通常是器件的硬件,可供用戶進行硬件連接,按照用戶的硬件連接確定,例如下圖中7位器件地址中,前四位1010是出廠時就已經固定了的,而後三位是器件硬件引腳可供用戶改變的。

對不同的器件,I2C傳輸格式略有不同,對於存儲設備,還具有存儲器的地址號,在主設備發送器件地址,從設備存儲器響應後,主設備要再發8或16位存儲器地址數據,來選擇存儲器的地址,等待從設備響應後,主設備在發送數據到存儲器地址或從存儲器地址讀取數據。


以上對I2C協議的闡述內容參考自恩智浦半導體公司的UM10204 I2C-bus specification and user manual  Rev. 4 — 13 February 2012(i2c總線規範和用戶手冊)。
數據手冊下載地址爲:
https://download.csdn.net/download/qq_33231534/12501985


 

二、EEPROM介紹(AT24C64)

1.EEPROM總線時序

AT24C32/64提供了32,768/65,536位串行電可擦和可編程只讀存儲器(EEPROM),組織爲每個8位的4096/8192個字。該設備的級聯特性允許最多8個設備共享一個通用的2線總線。該設備被優化用於許多工業和商業應用,其中低功率和低電壓操作是必不可少的。該芯片引腳圖如下:

各個硬件功能如下:

Pin Description
SCL 串行時鐘輸入,該SCL輸入是用來在上升沿時鐘數據進入每個EEPROM設備,下降沿時鐘數據輸出每個設備。
SDA 串行數據線,SDA引腳是雙向串行數據傳輸,這種引腳是開漏驅動的,並且可以與任意數量的其他開漏或開集電極裝置相連。
A2,A1,A0 設備地址輸入,當這些引腳是硬線連接時,最多有8個
32K/64K設備可以在單個總線系統上尋址,當引腳不是硬線,默認的A2, A1和A0是零。
WP 寫保護,當與連接到GND時,寫保護輸入允許正常的寫操作;當WP被連接到VCC時,所有高位的部分內存(8/16K)的寫操作被限制;如果不連接,WP內部下拉到GND。

其總線時序如下圖:

寫週期時序如下圖:寫週期時間t_{WR}是寫序列從有效停止到內部清除/寫週期結束的時間。

對照上兩圖時序情況,其交流特性表如下所示:

該設備一些基本操作如下:

  • 時鐘和數據轉換:SDA引腳通常與外部設備拉高。SDA引腳上的數據只能在SCL低時間期間更改(參閱數據有效性時序圖)。在SCL高峯期間的SDA數據更改將表示如下所定義的啓動或停止條件。
  • 啓動條件:SCL高電平時,SDA出現下降沿。
  • 停止條件:SCL高電平時,SDA出現上升沿。讀完一個序列後,stop命令將EEPROM置於待機電源模式。
  • 響應(ACK):所有地址和數據字以8位字串行地從EEPROM傳送數據或從EEPROM接收數據。EEPROM在第9個時鐘週期中發送一個0(低電平)來確認它收到了每個字。
  • 待機模式:AT24C32/64爲低功耗待機模式,開啓狀態爲:a)開機後;b)收到停止位並完成內部操作後。

上圖數據有效位,啓動和停止條件,輸出響應和上邊講的I2C協議一樣,這裏不再過多敘述。

2.EEPROM讀寫時序

2.1 設備地址

32K/64K EEPROM需要一個8位的設備地址字,在啓動條件下使芯片能夠進行讀或寫操作。設備地址字由一個強制的前四位1,0序列組成,如圖所示。這對所有2線EEPROM設備來說都是常見的。32K/64KEEPROM使用三個設備地址位A2, A1, A0,在同一總線上允許多達8個設備。這些位可以通過硬線輸入引腳設置。A2、A1和A0引腳使用內部專用電路,如果允許引腳懸空,則使其偏向於邏輯低電平。

設備地址的第8位是讀/寫操作選擇位。如果這個位高,則啓動讀操作;如果這個位低,則啓動寫操作。當EEPROM比較主設備發送的地址一樣時,EEPROM將輸出一個0。如果不一樣,設備將返回到待機狀態。

2.2 寫操作

2.2.1 字節寫

寫操作需要在設備地址字和響應(ACK)之後有兩個8位數據字地址。在收到第一個數據字地址後,EEPROM將再次響應一個0。在收到第二個數據字地址後,EEPROM再次響應一個0。接着傳輸要寫入的數據,在EEPROM響應一個0後停止讀寫,此時EEPROM進入到非易失性存儲器的內部定時寫週期t_{WR}。所有的輸入在這個寫週期被禁用,EEPROM將不響應直到寫結束。

2.2.2 頁寫

32K/64K EEPROM能夠進行32字節的頁寫操作。頁寫的啓動方式與字節寫的方式相同,但微控制器在發送第一個數據字後不會進入停止條件。相反,在EEPROM確認接收到第一個數據字後,微控制器可以再傳輸多達31個數據字。EEPROM在接收到每個數據字後將以零響應。微控制器必須使用停止條件終止頁寫序列(參見上圖)。

低於5位(32個)的數據字地址在收到每個數據字後內部遞增。高於5位的數據字地址位不遞增,保持內存頁行位置。當內部生成的字地址到達頁面邊界時,下面的字節被放置在同一頁面的開頭。如果傳輸到EEPROM的數據字超過32個,數據字地址將“滾動”,之前的數據將被覆蓋。

2.3 讀操作

除了設備地址字中的讀/寫選擇位被設置爲1之外,讀操作的啓動方式與寫操作相同。有三種讀取操作:當前地址讀取、隨機地址讀取和順序讀取。

2.3.1 當前地址讀

內部數據字地址計數器保持最後一次讀或寫操作期間訪問的最後一個地址,遞增1。只要芯片功率保持不變,這個地址在操作之間保持有效。讀取期間地址“滾動”是從最後一個內存頁的最後一個字節到第一頁的第一個字節。寫入期間地址“滾動”是從當前頁的最後一個字節到同一頁的第一個字節。

2.3.2 隨機地址讀

隨機讀取需要一個“僞”字節寫序列來加載數據字地址。一旦設備地址字和數據字地址被記錄並被EEPROM確認,微控制器必須產生另一個啓動條件,隨後微控制器開始一個當前地址讀取操作,發送一個設備地址與讀/寫選擇位高。EEPROM確認設備地址並連續計時輸出數據字。微控制器不響應一個零,但產生一個停止條件(參閱上圖)。

2.3.3 順序讀取

順序讀取由當前地址讀取或隨機地址讀取啓動。在微控制器接收到一個數據字後,它以一個ACK作出響應。只要EEPROM接收到應答時,它將繼續遞增數據字地址並串行時鐘輸出順序數據字。當達到內存地址限制時,數據字地址將“滾動”,順序讀取將繼續。當微控制器沒有響應0,但發送了停止條件時,順序讀取操作終止。


以上對AT24C64的EEPROM的講解都是基於ATMEL公司的AT24C32/AT24C64芯片數據手冊,需要觀看或下載的可以進入以下網址:https://pdf1.alldatasheet.com/datasheet-pdf/view/56068/ATMEL/AT24C64.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章