I2C總線信號時序分析
發布時間:2008/11/24 0:00:00 訪問次數:1015
在i2c總線通信的過程中,參與通信的雙方互相之間所傳輸的信息種類歸納如下。
主控器向被控器發送的信息種類有:啟動信號、停止信號、7位地址碼、讀/寫控制位、10位地址碼、數據字節、重啟動信號、應答信號、時鐘脈沖。
被控器向主控器發送的信息種類有:應答信號、數據字節、時鐘低電平。
下面對i2c總線通信過程中出現的幾種信號狀態和時序進行分析。
①總線空閑狀態。
i2c總線總線的sda和scl兩條信號線同時處于高電平時,規定為總線的空閑狀態。此時各個器件的輸出級場效應管均處在截止狀態,即釋放總線,由兩條信號線各自的上拉電阻把電平拉高。
②啟動信號。
在時鐘線scl保持高電平期間,數據線sda上的電平被拉低(即負跳變),定義為i2c總線總線的啟動信號,它標志著一次數據傳輸的開始。
啟動信號是一種電平跳變時序信號,而不是一個電平信號。啟動信號是由主控器主動建立的,在建立該信號之前i2c總線必須處于空閑狀態,如圖1所示。
圖1 i2c總線上的啟動信號和停止信號
③停止信號。
在時鐘線scl保持高電平期間,數據線sda被釋放,使得sda返回高電平(即正跳變),稱為i2c總線的停止信號,它標志著一次數據傳輸的終止。
停止信號也是一種電平跳變時序信號,而不是一個電平信號,停止信號也是由主控器主動建立的,建立該信號之后,i2c總線將返回空閑狀態。
④數據位傳送。
在i2c總線上傳送的每一位數據都有一個時鐘脈沖相對應(或同步控制),即在scl串行時鐘的配合下,在sda上逐位地串行傳送每一位數據。
進行數據傳送時,在scl呈現高電平期間,sda上的電平必須保持穩定,低電平為數據0,高電平為數據1。
只有在scl為低電平期間,才允許sda上的電平改變狀態。邏輯0的電平為低電壓,而邏輯1的電平取決于器件本身的正電源電壓vdd(當使用獨立電源時),如圖2所示。
圖2 i2c總線上的數據位傳送
⑤應答信號。
i2c總線上的所有數據都是以8位字節傳送的,發送器每發送一個字節,就在時鐘脈沖9期間釋放數據線,由接收器反饋一個應答信號。
應答信號為低電平時,規定為有效應答位(ack簡稱應答位),表示接收器已經成功地接收了該字節;應答信號為高電平時,規定為非應答位(nack),一般表示接收器接收該字節沒有成功。
對于反饋有效應答位ack的要求是,接收器在第9個時鐘脈沖之前的低電平期間將sda線拉低,并且確保在該時鐘的高電平期間為穩定的低電平。
如果接收器是主控器,則在它收到最后一個字節后,發送一個nack信號,以通知被控發送器結束數據發送,并釋放sda線,以便主控接收器發送一個停止信號p,如圖3所示。
圖3 i2c總線上的應答時序
⑥插入等待時間。
如果被控器需要延遲下一個數據字節開始傳送的時間,則可以通過把時鐘線scl電平拉低并且保持,使主控器進入等待狀態。
一旦被控器釋放時鐘線,數據傳輸就得以繼續下去,這樣就使得被控器得到足夠時間轉移已經收到的數據字節,或者準備好即將發送的數據字節。
帶有cpu的被控器在對收到的地址字節做出應答之后,需要一定的時間去執行中斷服務子程序,來分析或比較地址碼,其間就把scl線鉗位在低電平上,直到處理妥當后才釋放scl線,進而使主控器繼續后續數據字節的發送,如圖4所示。
圖4 i2c總線上的插入等待時間
⑦重啟動信號。
在主控器控制總線期間完成了一次數據通信(發送或接收)之后,如果想繼續占用總線再進行一次數據通信(發送或接收),而又不釋放總線,就需要利用重啟動sr信號時序。
重啟動信號sr既作為前一次數據傳輸的結束,又作為后一次數據傳輸的開始。利用重啟動信號的優點是,在前后兩次通信之間主控器不需要釋放總線,這樣就不會丟失總線的控制權,即不讓其他主器件節點搶占總線。
⑧時鐘同步。
如果在某一i2c總線系統中存在兩個主器件節點,分別記為主器件1和主器件2,其時鐘輸出端分別為clk1和cl【0,它們都有控制總線的能力。
假設在某一
在i2c總線通信的過程中,參與通信的雙方互相之間所傳輸的信息種類歸納如下。
主控器向被控器發送的信息種類有:啟動信號、停止信號、7位地址碼、讀/寫控制位、10位地址碼、數據字節、重啟動信號、應答信號、時鐘脈沖。
被控器向主控器發送的信息種類有:應答信號、數據字節、時鐘低電平。
下面對i2c總線通信過程中出現的幾種信號狀態和時序進行分析。
①總線空閑狀態。
i2c總線總線的sda和scl兩條信號線同時處于高電平時,規定為總線的空閑狀態。此時各個器件的輸出級場效應管均處在截止狀態,即釋放總線,由兩條信號線各自的上拉電阻把電平拉高。
②啟動信號。
在時鐘線scl保持高電平期間,數據線sda上的電平被拉低(即負跳變),定義為i2c總線總線的啟動信號,它標志著一次數據傳輸的開始。
啟動信號是一種電平跳變時序信號,而不是一個電平信號。啟動信號是由主控器主動建立的,在建立該信號之前i2c總線必須處于空閑狀態,如圖1所示。
圖1 i2c總線上的啟動信號和停止信號
③停止信號。
在時鐘線scl保持高電平期間,數據線sda被釋放,使得sda返回高電平(即正跳變),稱為i2c總線的停止信號,它標志著一次數據傳輸的終止。
停止信號也是一種電平跳變時序信號,而不是一個電平信號,停止信號也是由主控器主動建立的,建立該信號之后,i2c總線將返回空閑狀態。
④數據位傳送。
在i2c總線上傳送的每一位數據都有一個時鐘脈沖相對應(或同步控制),即在scl串行時鐘的配合下,在sda上逐位地串行傳送每一位數據。
進行數據傳送時,在scl呈現高電平期間,sda上的電平必須保持穩定,低電平為數據0,高電平為數據1。
只有在scl為低電平期間,才允許sda上的電平改變狀態。邏輯0的電平為低電壓,而邏輯1的電平取決于器件本身的正電源電壓vdd(當使用獨立電源時),如圖2所示。
圖2 i2c總線上的數據位傳送
⑤應答信號。
i2c總線上的所有數據都是以8位字節傳送的,發送器每發送一個字節,就在時鐘脈沖9期間釋放數據線,由接收器反饋一個應答信號。
應答信號為低電平時,規定為有效應答位(ack簡稱應答位),表示接收器已經成功地接收了該字節;應答信號為高電平時,規定為非應答位(nack),一般表示接收器接收該字節沒有成功。
對于反饋有效應答位ack的要求是,接收器在第9個時鐘脈沖之前的低電平期間將sda線拉低,并且確保在該時鐘的高電平期間為穩定的低電平。
如果接收器是主控器,則在它收到最后一個字節后,發送一個nack信號,以通知被控發送器結束數據發送,并釋放sda線,以便主控接收器發送一個停止信號p,如圖3所示。
圖3 i2c總線上的應答時序
⑥插入等待時間。
如果被控器需要延遲下一個數據字節開始傳送的時間,則可以通過把時鐘線scl電平拉低并且保持,使主控器進入等待狀態。
一旦被控器釋放時鐘線,數據傳輸就得以繼續下去,這樣就使得被控器得到足夠時間轉移已經收到的數據字節,或者準備好即將發送的數據字節。
帶有cpu的被控器在對收到的地址字節做出應答之后,需要一定的時間去執行中斷服務子程序,來分析或比較地址碼,其間就把scl線鉗位在低電平上,直到處理妥當后才釋放scl線,進而使主控器繼續后續數據字節的發送,如圖4所示。
圖4 i2c總線上的插入等待時間
⑦重啟動信號。
在主控器控制總線期間完成了一次數據通信(發送或接收)之后,如果想繼續占用總線再進行一次數據通信(發送或接收),而又不釋放總線,就需要利用重啟動sr信號時序。
重啟動信號sr既作為前一次數據傳輸的結束,又作為后一次數據傳輸的開始。利用重啟動信號的優點是,在前后兩次通信之間主控器不需要釋放總線,這樣就不會丟失總線的控制權,即不讓其他主器件節點搶占總線。
⑧時鐘同步。
如果在某一i2c總線系統中存在兩個主器件節點,分別記為主器件1和主器件2,其時鐘輸出端分別為clk1和cl【0,它們都有控制總線的能力。
假設在某一
上一篇:I2C總線信號傳送格式
上一篇:I2C總線芯片內部操作步驟