最近在學習嵌入式處理器的過程之中,發現嵌入式系統的學習方法不過是先從芯片本身入手,掌握它最基本的系統架構,了解它開發的一般特點、開發流程、調試方法和板級支持包等功能。然后就是對每一個模塊的學習,特別是體系結構和編程模型。提醒大家一句,不要小視匯編語言的學習,特別是要理解每代芯片的底層架構,存儲器的映射,中斷機制,指令集系統等等。對于硬件學習來說,嵌入式系統的學習還有一大塊內容就是對它外圍器件和基本輸入輸出設備的學習,通俗點說,就是要了解它能干什么?怎么讓它干的問題。
最近,為了準備導師規定做的一次學術報告,給其他同學們講述ARM Cortex M3的一個基本硬件模塊,做一下I2C總線知識的基本梳理,同時好好體會一下作為未來立志于從事IT工程師這種角色應當怎樣去寫技術筆記。
I2C總線是NXP公司推出的一種芯片間串行傳輸總線,能夠傳輸的距離雖然不太遠,只有7.6m,但對于芯片間傳輸,可靠性非常好,因此得到了很廣泛的應用,而且結構簡單,便于推廣。它采用兩線制,由串行時鐘線SCL和串行數據線SDA構成,只需要兩根線就能實現總線上各個期間的全雙工同步數據傳送,可以很方便的構成多級系統和外圍器件擴展系統。
注意這么幾點:
所有掛接在I2C總線上的器件和接口電路都應具有I2C總線接口,且所有的SDA/SCL同名端相連?偩上所有器件要依靠SDA發送的地址信號尋址,不需要片選線。
特點:組成系統結構簡單,占用空間小,芯片管腳的數量少,無需片選信號,價格低。允許若干兼容器件共享總線,應用比較廣泛。總線的長度可達7.6m,傳送速度可達400kbps,標準速率為100kbps。支持多個組件。支持多主控器件(某時刻只能有一個主控器件)。I2C總線上所有設備的SDA, SCL引腳必須外接上拉電阻。
通信規則:
1、 數據有效性:
在SCL高電平期間,SDA線上的數據必須保持穩定。SDA上的電平高低表示需要傳輸的數據,數據線SDA僅可在時鐘SCL為低時才能改變。
2、 起始格式:
起始信號用于開始I2C總線通信。其中,起始信號是在時鐘線SCL為高電平期間,數據SDA上高電平向低電平變化的下降沿信號。起始信號出現以后,才可以進行后續的I2C總線尋址或數據傳輸等
這里,注意到:SDA產生高電平的時間要大于4.7us,而且SDA由高電平向低電平跳變后,持續時間要大于4us以上,然后SCL才被拉低為0。
3、 停止格式
終止信號用于終止I2C總線通信。其中,終止信號是在時鐘線SCL為高電平期間,數據線SDA上低電平到高電平變化的上升沿信號。終止信號一出現,所有I2C總線操作都結束,并釋放總線控制權。
和起始信號類似,終止信號也必須滿足在SCL高電平期間,SDA產生一個持續時間大于4.7us的上升沿跳變,才能觸發。
4、 應答信號
應答信號用于表明I2C總線數據傳輸的結束。 I2C總線數據傳送時,一個字節數據傳送完畢后都必須由主器件產生應答信號。主器件在第9個時鐘位上釋放數據總線SDA,使其處于高電平狀態,此時從器件輸出低電平拉低數據總線SDA為應答信號。應答信號的時序,如圖所示。
5、 字節格式
SDA線上的每個字節必須為8位長,不限制每次傳輸的字節個數。且每個字節后面必須有一個應答位,當接收器不能接收另一個完整的字節時,可以保持時鐘線SCL為低電平并強制發送器進入等待狀態。當接收器釋放時鐘線SCL(即將SCL置為高電平),數據傳輸繼續進行。
6、 帶7位地址的數據格式(MSB)
從機地址必須在起始信號之后發送,MSB的格式為前7位為地址,最后一位為數據方向位R/S,R表示接收(receive=1),S表示發送(send=0)。首字節的R/S位如果為0,表示主機將向從機發送(寫)信息,如果為1,則反之。
7、 總線仲裁
只有在總線空閑時,主機才可以啟動傳輸過程。如果在起始條件最少保持時間內,兩個或兩個以上的主機都有可能產生起始條件。則當SCL為高電平時在SDA上發生仲裁。此時,發送SDA高電平的主機將要關閉其數據輸入狀態,將總線交給SDA正在發送低電平的主機
|