1. 程式人生 > >I2C協議

I2C協議

  • a、主機通過傳送地址碼與對應的從機建立了通訊關係,而掛接在總線上的其它從機雖然同時也收到了地址碼,但因為與其自身的地址不相符合,因此提前退出與主機的通訊;
  • b、主機的一次傳送通訊,其傳送的資料數量不受限制。主機是通過P訊號通知傳送的結束,從機收到P訊號後退出本次通訊;
  • c、主機的每一次傳送後都是通過從機的ACK訊號瞭解從機的接收狀況,如果應答錯誤則重發。
  • d、SCL一直由Master控制,SDA依照資料傳送的方向,讀資料時由Slave控制SDA,寫資料時由Master控制SDA。當8位資料傳送完畢之後,應答位或者否應答位的SDA控制權與資料位傳送時相反。
  • e、開始位“Start”和停止位“Stop”,只能由Master來發出。
  • f、地址的8位傳送完畢後,成功配置地址的Slave裝置必須傳送“ACK”。否則否則一定時間之後Master視為超時,將放棄資料傳送,傳送“Stop”。
  • 當寫資料的時候,Master每傳送完8個數據位,Slave裝置如果還有空間接受下一個位元組應該回答“ACK”,Slave裝置如果沒有空間接受更多的位元組應該回答“NACK”,Master當收到“NACK”或者一定時間之後沒收到任何資料將視為超時,此時Master放棄資料傳送,傳送“Stop”。
  • g、當讀資料的時候,Slave裝置每傳送完8個數據位,如果Master希望繼續讀下一個位元組,Master應該回答“ACK”以提示Slave準備下一個數據,如果Master不希望讀取更多位元組,Master應該回答“NACK”以提示Slave裝置準備接收Stop訊號。
  • h、當Master速度過快Slave端來不及處理時,Slave裝置可以拉低SCL不放(SCL=0將發生“線與”)以阻止Master傳送更多的資料。此時Master將視情況減慢或結束資料傳送。