I2C時序剖析

2021-07-23 10:01:41 字數 1080 閱讀 1121

入門微控制器的同學,往往對時序有一種惶恐。

其實,時序就是一張窗戶紙,捅破了,就懂了。

今天,跟大家分享一下關於i2c的時序解讀,希望大家能夠舉一反三。

基礎知識:

i2c有兩根很重要的線:scl(時鐘匯流排)和sda(資料匯流排)。

scl負責的是節拍,給乙個節奏讓傳送和接收雙方能夠一起左手右手乙個慢動作的同步工作。

sda負責的是實實在在的資料的傳輸,但這裡要注意的是,這個資料沒有像uart那樣有長度的限制。

為什麼需要時序:

對於i2c,我們傳送和接收資料是要相互配合的(其他協議也是一樣)。如果總是你傳送,我不接收,不行;如果總是你不傳送,我也沒發接收,不行;如果你早上傳送,我到晚上才接收,也不行。所以,我們必須是你傳送,我馬上接收,是同步的。

既然需要同步,我們就得有乙個喊口號的人,或者是打節拍的人,跟我們軍訓時的教官差不多,喊一二一讓我們整齊的前進;而在i2c中,這個人就是我們的時序了。

解剖時序

i2c的時序分為3個部分:起始訊號、資料傳輸、停止訊號

先上圖:

這就是乙個簡單的時序圖了。

第一部分:起始訊號部分

圖中的start部分,當scl為高電平的時候,sda有乙個下降沿,這就表明要開始傳送資料了。

第二部分:資料傳輸部分

圖中的bit7~bit0都是資料,ack是乙個應答,每傳輸8位資料,要有乙個應答,確認一下傳輸情況。我們知道,資料有0和1兩種情況,我們什麼時候可以改變資料呢?

當scl為低電平的時候,sda上的資料才可以改變。我們可以看到,sda上,資料有變化的地方,對應上面的scl,scl總是低電平。

第三部分:停止訊號部分

圖中stop部分,當scl為高電平的時候,sda有乙個上公升沿,這就表明資料已經傳送完畢。

希望大家對照這以上的說明,反覆看幾遍時序圖,看著看著,你就懂了。

i2c匯流排時序

一心想踏入linux device driver的世界,想著i2c匯流排相對於usb等其他匯流排較為簡單,就以i2c作為切入點,希望可以逐步理解ldd的設計思想,並能理解其裝置模型的概念。在此對近期於i2c匯流排及驅動原始碼的理解做備忘,以免徒勞。平台友善之臂s70 tiny6410 cpusams...

I2C驅動情景分析 怎樣控制I2C時序

部落格 核心版本 linux 3.4.2 源程式 linux 3.4.2 drivers i2c busses i2c s3c2410.c 這次要解決的問題是 如何配置soc的i2c模組,輸出想要的時序波形?匯流排驅動層 驅動soc內部的i2c模組,也稱之為介面卡 adapter 驅動。覆蓋圖中硬體...

I2C 協議之軟體模擬時序

i2c 匯流排時 philips 公司推出的一種序列匯流排,具備多主機系統所需的包括匯流排仲裁和高低速器件同步功能的高效能序列匯流排。它只需要兩跟雙向的訊號線,一根資料線 sda,乙個是時鐘線 scl。在 i2c 匯流排上面,每個器件都有自己相應的 i2c 位址,所以在兩個器件之間進行通訊的時候,都...