服务器总线协议_第一章----I2C总线协议入门
目錄
一、概述
二、首先了解一下I2C的I/O結構
三、其次了解一下I2C的時序
第一部分:起始停止信號簡介
第二部分:I2C的時序部分要求
第三部分:I2C的一幀數據的格式
四、最終問與答
1)為啥開漏輸出就需要加上拉電阻呢 ?
2)那么問題又來了,為啥I2C的IO要配置成為開漏輸出模式呢?
3)為什么要求負載電容的要求?
4)I2C總線上拉電阻怎么選?
一、概述
I2C是無論在任何產品,任何單板上都會大量使用的總線,是接觸服務器硬件最基礎且最簡單的總線。
I2C總線我會基于I2C官方協議共分兩個章節為大家解惑,主分為一下兩部分,本章講解入門部分。
入門:主要講解I2C協議是如何通信的,主機和從機之間是如何進行數據讀寫與傳輸。
進階:主要講解I2C的高級使用,也就是常說的I2C的冒險與競爭,官方名為同步與仲裁。
I2C官方協議可以自行下載:硬件I2C總線協議V2.1-硬件開發文檔類資源-CSDN下載
服務器總線協議_第二章----I2C總線協議進階:https://blog.csdn.net/qq_35341807/article/details/107524532
二、首先了解一下I2C的I/O結構
1.? I2C是兩線制總線,也就是一組I2C有兩根線,下面表格說明這兩根線的作用。
? ? ? ? ? ??
2.? 明白了這兩根線的作用后我們來了解一下它的I/O結構,主要如下圖所示:
? ? ?
紅色方框:
表示I2C主要由SCL和SDA組成。
橙色方框:
可以看出黃色方框中畫出了I2C的輸入輸出的IO結構。
輸出: "SCLKN1 OUT" 與 "DATAN1 OUT" 的IO結構為OD輸出(開漏輸出)。
輸入:"SCLK IN" 與 "DATA IN"為輸入。
紫色方框:
如上所述,黃色方框中的時鐘和數據輸出引腳的IO模式為開漏輸出模式,因此就需要外加上拉電阻。
這樣就導致I2C總線在空閑的時候是高電平。
以上講解了I2C的IO結構,如果大家有問題可以留言或者私信我,常年在線。
三、其次了解一下I2C的時序
不管是什么總線,在它的Spec中都會有時序要求,我們人類交流是通過語言交流,在全世界有很多種不同的語言,在芯片世界,為了讓他們也能夠進行數據交流,因此誕生了很多不同的總線,時序就像是語法,學會了語法才算是掌握了一門語言,因此學會了總線時序,才算是掌握了總線。
第一部分:起始停止信號簡介
在硬件攻城獅面試的時候,99%的面試官以及筆試試題會有讓你描述出I2C的起始信號和停止信號,因此這個是必須要會的,那我們先來了解一下起始信號和停止信號,話不多說,先上圖:
起始信號:如上圖S框所示,上面講過了,SCL和SDA在空閑的時候是高電平,當SCL是高電平的時候,主機將SDA拉低,這個? ? ? ? ? ? ? ? ? ? ? 動作便是起始信號。
停止信號:如上圖P框所示,當SCL是高電平的時候,主機將SDA由低拉成高,這個動作便是停止信號。
第二部分:I2C的時序部分要求
接下來我們來學習一下I2C的時序部分的要求。
??
此圖截取與I2C協議 V2.1的時序部分,所有支持I2C的器件都必須遵守此協議。
先來普及幾個常識:
I2C支持3種模式:
標準模式(STANDARD-MODE):時鐘頻率為100Khz。
快速模式(FAST-MODE) :時鐘頻率為400Khz。
高速模式(HS-MODE): 時鐘頻率為3.4Mhz。
建立保持時間定義:
建立時間:數據電平跳變到時鐘上升沿的時間,如果建立時間不夠,數據將不能在這個時鐘上升沿被穩定的打入觸發器。
保持時間:時鐘上升沿? ??到數據電平跳變?的時間,如果保持時間不夠,數據同樣不能被穩定的打入觸發器
時鐘的邊沿以采樣邊沿為準,比如I2C是在數據的上升沿進行采樣,那么建立保持時間以上升沿為基準。
VIH和VIL的定義
VIL為IO低電平判定電壓值。
VIH為IO高電平判定電壓值。
接下來我們主要講解一下常用的標準模式I2C時序,其他模式類似于標準模式,只是spec要求時間不一樣:
1. fSCL:SCL 時鐘頻率
這個時序要求為:I2C的SCL時鐘的頻率要等于100Khz,一個時鐘周期的時間要等于10ms。
2. tLOW:SCL 時鐘低電平的時間
紅色方框已經將tLOW的時序框起來了。
這個時序要求為:SCL的下降沿VIL到上升沿VIL的時間。
協議要求大于4.7us。
3. tSU:STA:重復起始信號的建立時間
紅色方框已經將tSU:STA的時序框起來了。
這個時序要求為:當發生重復起始信號時,SCL上升沿的VIH到SDA的VIH的時間。
協議要求大于4.7us。
重復信號發生有很多種情況,比如:主機對從機寫一個數據讀兩個數據,在讀寫切換的時候不需要發送停止信號,主機直接發送重復起始信號就可以重新開始尋址更換讀寫方向。
4. tHD:STA:起始信號的保持時間
紅色方框已經將 tHD:STA的時序框起來了。
這個時序要求為:當I2C主機開始向從機發起數據讀寫時,起始信號SDA下降沿VIL到SCL下降沿VIH的時間。
協議要求大于4.0us。
5. tSU:DAT:數據信號的建立時間
紅色方框已經將tSU:DAT的時序框起來了。
這個時序要求為:SDA的上升沿VIH? or? 下降沿VIL到SCL的上升沿VIL的時間。
協議要求大于250ns。
6. tHD:DAT:數據信號的保持時間
紅色方框已經將tHD:DAT的時序框起來了。
這個時序要求為:SCL的下降沿VIL到SDA的上升沿VIL or 下降沿VIH的時間。
協議要求大于5.0us。
7. Tr:SCL和SDA上升時間的要求
紅色方框已經將Tr的時序框起來了。
這個時序要求為:標準模式下SCL和SDA的上升沿VIL到VIH的時間小于1000ns。
8. Tf:SCL和SDA下降時間的要求
紅色方框已經將Tf的時序框起來了。
這個時序要求為:標準模式下SCL和SDA的下降沿VIH到VIL的時間小于300ns。
9. tSU:STO:結束信號的建立時間
紅色方框已經將tSU:STO的時序框起來了。
這個時序要求為:SCL的上升沿的VIH到SDA上升沿VIL的時間。
協議要求時間大于4.0us。
10. tBUF:總線空閑時間
紅色方框已經將tSU:STA的時序框起來了。
這個時序要求為:發送一幀數據結束后又開始新的傳輸,SDA上升沿VIH到SDA下降沿VIH的時間。
協議要求時間大于4.0us。
11. Cb:總線負載電容
這個負載電容的spec限制了一組總線上的從器件數量,負載電容指的是pin腳的寄生電容,PCB Layout走線電容等等。按照經驗來說一個從期間的負載電容大概是10pf~30pf左右。
大概時序部分就是這些,在測試I2C的時候我們都需要按照I2C協議中的要求去卡時間,必須滿足I2C時序,不然可能會出現讀寫出錯的情況。
第三部分:I2C的一幀數據的格式
在一二部分我們對I2C的時序進行了一下了解,在第三部分我們看下I2C的一幀數據格式以及通信機制是怎么樣的,
由于I2C總線時雙向的,所以由主機和從機根據實際操作輪流控制總線,細品,你細細品。
先上圖:
1. START:首先由主機發送起始信號,這個時候所有從機接收到起始信號,開始準備好通信,此時主機控制總線。
2. ADRESS:主機發完起始信號后,開始進入尋址階段,主機發送7位I2C地址,此時主機控制總線。
3.R/W_N:主機發送完地址后緊跟著讀寫位,表明接下來我要進行寫操作還是讀操作,在發送完讀寫位后,此時主機釋放總線。
4.ACK:這個是從機的應答位,此時總線的控制權由主機切換為從機控制總線,
? ? ? ? ? ? ?當從機接收到主機發來的地址和自己的地址一致后,會將ACK拉低。
? ? ? ? ? ? ?如果主機尋址的地址根本不存在時,由于主機已經釋放總線,此時總線會被上拉電阻拉至高電平。
?5.DATA:當主機發出的地址+讀寫信號由從機應答后。
? ? ? ? ? ? ? ? 寫操作的時候此時總線由主機控制,主機發送8位數據。
? ? ? ? ? ? ? ? 讀操作的時候此時總線由從機控制,從機發送8位數據。
6.ACK:寫操作的時候由從機控制總線發出。
? ? ? ? ? ? ? 讀操作的時候由主機控制總線發出。
7. STOP:在傳輸完一幀數據后,主機發送停止信號,停止總線的數據傳輸,停止信號發出后,總線處于空閑狀態。
四、最終問與答
1)為啥開漏輸出就需要加上拉電阻呢 ?
答:通常在IO內部簡化為一個NMOS管,
? ? ? ?當柵極輸入高時,由于漏極懸空,導致無法輸出高電平,因此就需要外加上拉電阻用于驅動高電平(1)的輸出。
? ? ? ?當柵極輸入低時,MOS管導通,漏極和源極導通,等效于漏極接地,因此漏極電平為低電平(0)。
? ? ? ?因此就可以知道I2C是通過外部上拉電阻來驅動高電平的。
2)那么問題又來了,為啥I2C的IO要配置成為開漏輸出模式呢?
答:開漏輸出模式可以實現一個邏輯功能,就是 “? 線與? ” 。在IO結構圖中可以看出,在I2C總線上畫有兩個從設備,實際上I2C可以掛很多從設備,從設備的數量主要受總線負載電容小于400pf的限制。線與就是當I2C總線上下掛很多從設備,只要有一個從設備將總線拉低,那么總線就處于被占用的狀態,也就是為了使用更高級的功能,在下一章節:《 服務器總線協議_第二章----I2C總線進階 》我會給大家重點講解I2C是如何使用線與,在此繼續向下講解。
服務器總線協議_第二章----I2C總線協議進階:https://blog.csdn.net/qq_35341807/article/details/107524532
3)為什么要求負載電容的要求?
答:負載電容會影響信號的上升時間,因為I2C協議對于SCL和SDA的信號上升下降時間是有要求的,因此電容不能超過spec要? ? 求的400pf,如果想要在一路I2C下掛很多器件,可以通過使用增加Switch的方式,例如常用的PCA9548,可以通過一路I2C控制8路輸出。
4)I2C總線上拉電阻怎么選?
答:I2C spec如下圖所示:
在Spec中有對最大輸出低電平的要求,要求IO口的灌電流最大為3mA,在3mA的電流驅動下,I/O輸出的最大電壓為0.4V,因此可以通過下面這個公式計算鏈路并聯等效電阻最大值。注意:是一條I2C鏈路的并聯等效電阻!
我們經常使用的上拉電阻通用為3.3V,所以并聯等效電阻最大值為967Ω。在平常使用時候要注意一下盡量使等效電阻大于IK。
由于Device有負載電容,與上拉電阻形成RC等效鏈路,所以導致電阻如果選擇過大會導致信號上升時間增大,所以上拉電阻也不宜選擇過大,通常將一條鏈路的等效電阻設計為4.7K。
————————————————
版權聲明:本文為CSDN博主「菜狗攻城獅」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_35341807/article/details/107393874
總結
以上是生活随笔為你收集整理的服务器总线协议_第一章----I2C总线协议入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sqlserver 导出mysql,sq
- 下一篇: XSS与CSRF两种跨站攻击比较