i2c簡易時序圖
啟動信號:
SCL為高電平的時候,SDA由高電平向低電平跳變。結束信號:SCL為高電平的時候,SDA由低電平向高電平跳變。
應答信號:
I2C總線上的所有數據都是以8位字節傳送的,發送器每發送一個字節,就在時鐘脈沖9期間釋放數據線,由接收器反饋一個應答信號。應答信號為低電平時,規定為有效應答位(ACK簡稱應答位),表示接收器已經成功地接收了該字節;應答信號為高電平時,規定為非應答位(NACK),一般表示接收器接收該字節沒有成功,對于反饋有效應答位ACK的要求是,接收器在第9個時鐘脈沖之前的低電平期間將SDA線拉低,并且確保在該時鐘的高電平期間為穩定的低電平。如果接收器是主控器,則在它收到最后一個字節后,發送一個NACK信號,以通知被控發送器結束數據發送,并釋放SDA線,以便主控接收器發送一個停止信號P。
寫時序:
開始信號:主機+從設備地址+寫命令,從機應答,應答成功,表示有這個設備,然后主機+設備內部寄存器地址,此時不用再加寫命令控制字,從機應答,應答成功,表示設備內有這個地址,主機寫入數據,從機應答,是否繼續發送,不發送的話,發送停止信號P。
讀時序:
要想讀設備,首先要知道將要所讀取設備的地址告訴從設備,從設備才能將數據放到(發送)SDA上使主設備讀取,從設備將數據放入SDA上的過程,由硬件主動完成,不用人為的寫入。所以首先先寫入從機地址,然后+寫控制命令,從機應答,應答成功,表示有這個設備,然后寫入內部寄存器地址,此時不用再加寫命令控制字,從機應答,應答成功,表示設備內有這個地址。然后主機繼續發出:寫入從機地址,然后+讀命令,從機應答,應答成功,此時便可以讀取數據了,從設備已經將數據放入到SDA上了。地址跟設備已經驗證了,不用再進行驗證。
啟動信號與停止信號的時序圖如下圖所示:
數據位發送:
在I2C總線上傳送的每一位數據都有一個時鐘脈沖相對應(或同步控制),即在SCL串行時鐘的配合下,在SDA上逐位地串行傳送每一位數據。進行數據傳送時,在SCL呈現高電平期間,SDA上的電平必須保持穩定,低電平為數據0,高電平為數據1。只有在SCL為低電平期間,才允許SDA上的電平改變狀態。邏輯0的電平為低電壓,而邏輯1則為高電平。時序如下圖所示
應答信號時序圖如下圖所示:
當進行一次寫時序的時候,SDA上的數據變化的時序圖如下:
當進行一次讀的時候,SDA上的數據變化的時序圖如下:
i2c協議中的數據傳輸時序圖如下:
評論