在一次通信過程中,由主控器負責向總線上發送啓動信號、同步時鐘信號、被控器件地址碼、重啓動信號和停止信號等。
如果在系統中同時存在2個或2個以上的主器件節點企圖控制總線,則形成總線衝突狀態。由於I2C引入了同步時鐘和總線仲裁機制,即使出現總線衝突也不會造成信息丟失。
發生總線衝突時,爲了避免信息丟失,需要進行總線仲裁以決定誰是主控器。總線仲裁是通過裁定SDA線上的控制權來解決的。時鐘同步是連接到SCL線上的所有器件進行“線與”實現的。只要有一個器件向SCL輸出低電平,SCL就爲低電平。因此SCL線的低電平時間由時鐘低電平期最長的器件決定,而高電平時間由時鐘高電平期最短的器件決定,從而低電平週期短的器件會進入高電平的等待狀態,由此形成了時鐘的同步。
在通信過程應注意以下6點:
1. 進行數據傳送時,在SCL爲高電平期間,SDA線上電平必須保持穩定,只有SCL爲低時,才允許SDA線上電平改變狀態。並且每個字節傳送時都是高位在前。2. 對於應答信號,ACK=0時爲有效應答位,說明接收器已經成功接收到該字節,若爲1則說明接受不成功。
3. 如果被控器需要延遲下一個下一個數據字節開始傳送的時間,可以通過把SCL電平拉低並保持來強制主控器進入等待狀態。
4.主控器完成一次通信後還想繼續佔用總線在進行一次通信,而又不釋放總線,就要利用重啓動信號Sr。它既作爲前一次數據傳輸的結束,又作爲後一次傳輸的開始。
5.總線衝突時,按“低電平優先”的仲裁原則,把總線判給在數據線上先發送低電平的主器件。
6.在特殊情況下,若需禁止所有發生在I2C總線上的通信,可採用封鎖或關閉總線,具體操作爲掛接在總線上的任一器件將SCL鎖定在低電平即可。