1、IIC總線具有2根雙向信號線,1根是數據線SDA,另1根是時鍾線SCL。
2、IIC總線上可以掛很多設備:多個主設備(單片機A和B),多個從設備(外圍 設備)
3、多主機會產生總線裁決問題。當多個主機同時想占用總線時,企圖啟動總線傳輸數據,就叫做總線競爭。
I2C通過總線仲裁,以決定哪台主機控制總線
4、IIC總線通過上拉電阻(一般取4.7k-10k)接正電源。當總線空閑時,兩根線均為高電平。連到總線上的任一器件輸出低電平時,總線的信號變低。
即各器件的SDA及SCL都是線與關系。
5、每個接到I2C總線上的器件都有唯一的地址。主機與其它器件間的數據傳輸可以是由主機發送數據到其它器件,
這時主機 即為發送器,總線上收數據的器件則為接收器。
6、I2C的原則是:在SCL=1(高電平)時,SDA千萬別忽悠!!!
否則,SDA下跳則"判罰"為"起始信號S",SDA上跳則"判罰"為"停止信號P".
在SCL=0(低電平)時,SDA隨便忽悠!!!
7、每個字節后應該由對方回送一個應答信號ACK做為對方在線的標志.
8、非應答信號一般在所有字節的最后一個字節后.一般要由雙方協議簽定.
9、SCL必須由主機發送,否則天下大亂.
10、首字節是"片選信號",即7位從機地址加1位方向(讀寫)控制.
11、從機收到(聽到)自己的地址才能發送應答信號(必須應答!!!)表示自己在線.
其他地址的從機不允許忽悠!!!(當然群呼可以忽悠但只能聽不許說話)
12、讀寫是站在主機的立場上定義的. "讀"是主機接收從機數據,"寫"是主機發送數據給從機.
13、如果主機向從機發送地址,從機怎么知道這個地址就是主機的,這個地址是怎么計算出來的"
嚴格講,主機不是向從機發送地址,
而是主機往總線上發送地址(這個地址是某個從機的,而不是主機的,所以不存在“從機怎么知道這個地址就是主機的”的問題),
所有的從機都能接收到主機發出的地址,然后每個從機都將主機發出的地址與自己的地址比較,如果匹配上了,
這個從機就會向主機發出一個響應信號。主機收到響應信號后,開始向總線上發送數據,與這個從機的通訊就建立起來了。
如果主機沒有收到響應信號,則表示尋址失敗。
