I2C基礎知識入門簡單介紹

2020-12-04 電子發燒友

I2C基礎知識入門簡單介紹

玩轉單片機 發表於 2020-12-02 14:29:05

廢話

I2C其實肝的我挺難受的,通訊協議這種規範往往可以摳出很多的細節,看了波叔的文章《萬變不離其宗之I2C總線要點總結》,很詳細。我打賭我還不會I2C,因為涉及到很多技術細節,在實際項目中往往是會被忽略的問題,於是結合自己以前的項目經驗,簡單再總結一下I2C,由於認知偏差,寫完之後,長籲一口氣,感覺自己好像懂了。

目錄

背景

硬體層

數據傳輸協議

實際上如何工作?

單個主設備連接多個從機

多個主設備連接多個從機

總結

背景

I2C(Inter-Integrated Circuit),中文應該叫集成電路總線,它是一種串行通信總線,使用多主從架構,是由飛利浦公司在1980年代初設計的,方便了主板、嵌入式系統或手機與周邊設備組件之間的通訊。由於其簡單性,它被廣泛用於微控制器與傳感器陣列,顯示器,IoT設備,EEPROM等之間的通信。

I2C最重要的功能包括:

只需要兩條總線;

沒有嚴格的波特率要求,例如使用RS232,主設備生成總線時鐘;

所有組件之間都存在簡單的主/從關係,連接到總線的每個設備均可通過唯一地址進行軟體尋址;

I2C是真正的多主設備總線,可提供仲裁和衝突檢測;

傳輸速度;

標準模式:Standard Mode=100 Kbps

快速模式:Fast Mode=400 Kbps

高速模式:High speed mode=3.4 Mbps

超快速模式:Ultra fast mode=5 Mbps

最大主設備數:無限制;

最大從機數:理論上是127;

以上是I2C的一些重要特點,下面會進一步對I2C進行介紹。

硬體層

I2C協議僅需要一個SDA和SCL引腳。SDA是串行數據線的縮寫,而SCL是串行時鐘線的縮寫。這兩條數據線需要接上拉電阻。

設備間的連接如下所示:

使用I2C,可以將多個從機(Slave)連接到單個主設備(Master),並且還可以有多個主設備(Master)控制一個或多個從機(Slave)。

假如希望有多個微控制器(MCU)將數據記錄到單個存儲卡或將文本顯示到單個LCD時,這個功能就非常有用。

I2C總線(SDA,SCL)內部都使用漏極開路驅動器(開漏驅動),因此SDA和SCL 可以被拉低為低電平,但是不能被驅動為高電平,所以每條線上都要使用一個上拉電阻,默認情況下將其保持在高電平;

上拉電阻的值取決於許多因素。德州儀器TI 建議 使用以下公式來計算正確的上拉電阻值:

其中 是邏輯低電壓;

是邏輯低電流;

是信號的最大上升時間;

是總線(電線)電容;

具體如下所示:

根據上表,這裡不難發現需要在做電阻選擇需要滿足幾個條件;

灌電流 最大值為;

另外I2C總線規範和用戶手冊還為低電平輸出電壓設置了最大值為0.4V

所以根據上述公式可以計算,對於5V的電源,每個上拉電阻阻值至少1.53kΩ,而對於3.3V的電源,每個電阻阻值至少967Ω。

如果覺得計算電阻值比較麻煩,也可以使用典型值 4.7kΩ。

上述推導過程可以參考 TI的文檔《I2C Bus Pullup Resistor Calculation》 https://www.ti.com/lit/an/slva689/slva689.pdf

最終在調試的時候,當我們測量SDA或SCL信號並且邏輯LOW上的電壓高於0.4V時,我們就知道可以知道灌電流太高了;

當然,這並不意味著每當灌電流超過3mA時,設備就會立即停止工作。但是,在操作超出其規格的設備時,應始終小心,因為它可能導致通信故障,縮短其使用壽命甚至甚至永久損壞設備。

數據傳輸協議

主設備和從設備進行數據傳輸時遵循以下協議格式。數據通過一條SDA數據線在主設備和從設備之間傳輸0和1的串行數據。串行數據序列的結構可以分為,開始條件,地址位,讀寫位,應答位,數據位,停止條件,具體如下所示;

開始條件

當主設備決定開始通訊時,需要發送開始信號,需要執行以下動作;

先將SDA線從高壓電平切換到低壓電平;

然後將SCL從高電平切換到低電平;

在主設備發送開始條件信號之後,所有從機即使處於睡眠模式也將變為活動狀態,並等待接收地址位。

具體如下圖所示;

地址位

通常地址位佔7位數據,主設備如果需要向從機發送/接收數據,首先要發送對應從機的地址,然後會匹配總線上掛載的從機的地址;

I2C還支持10位尋址;

讀寫位

該位指定數據傳輸的方向;

如果主設備需要將數據發送到從設備,則該位設置為 0;

如果主設備需要往從設備接收數據,則將其設置為 1 。

ACK / NACK

主機每次發送完數據之後會等待從設備的應答信號ACK;

在第9個時鐘信號,如果從設備發送應答信號ACK,則SDA會被拉低;

若沒有應答信號NACK,則SDA會輸出為高電平,這過程會引起主設備發生重啟或者停止;

數據塊

傳輸的數據總共有8位,由發送方設置,它需要將數據位傳輸到接收方。

發送之後會緊跟一個ACK / NACK位,如果接收器成功接收到數據,則設置為0。否則,它保持邏輯「 1」。

重複發送,直到數據完全傳輸為止。

停止條件

當主設備決定結束通訊時,需要發送開始信號,需要執行以下動作;

先將SDA線從低電壓電平切換到高電壓電平;

再將SCL線從高電平拉到低電平;

具體如下圖所示;

實際上如何工作?

第一步:起始條件

主設備通過將SDA線從高電平切換到低電平,再將SCL線從高電平切換到低電平,來向每個連接的從機發送啟動條件 :

第二步:發送從設備地址

主設備向每個從機發送要與之通信的從機的7位或10位地址,以及相應的讀/寫位;

第三步:接收應答

每個從設備將主設備發送的地址與其自己的地址進行比較。如果地址匹配,則從設備通過將SDA線拉低一位以表示返回一個ACK位;

如果來自主設備的地址與從機自身的地址不匹配,則從設備將SDA線拉高,表示返回一個NACK位;

第四步:收發數據

主設備發送或接收數據到從設備;

第五步:接收應答

在傳輸完每個數據幀後,接收設備將另一個ACK位返回給發送方,以確認已成功接收到該幀:

第六步:停止通信

為了停止數據傳輸,主設備將SCL切換為高電平,然後再將SDA切換為高電平,從而向從機發送停止條件;

單個主設備連接多個從機

I2C總線上的主設備使用7位地址對從設備進行尋址,可以使用128()個從機地址。

請使用4.7K上拉電阻將SDA和SCL線連接到Vcc;

多個主設備連接多個從機

多個主設備可以連接到一個或多個從機;

當兩個主設備試圖通過SDA線路同時發送或接收數據時,同一系統中的多個主設備就會出現問題。

為了解決這個問題,每個主設備都需要在發送消息之前檢測SDA線是低電平還是高電平;

如果SDA線為低電平,則意味著另一個主設備可以控制總線,並且主設備應等待發送消息。

如果SDA線為高電平,則可以安全地發送消息。

要將多個主設備連接到多個從機,請使用下圖,其中4.7K上拉電阻將SDA和SCL線連接到Vcc:

總結

本文主要介紹I2C的入門基礎知識,從I2C協議的硬體層,協議層進行了簡單介紹;作者能力有限,難免存在錯誤和紕漏,請大佬不吝賜教。

責任編輯:xj

       原文標題:I2C基礎知識入門

文章出處:【微信公眾號:玩轉單片機】歡迎添加關注!文章轉載請註明出處。

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 救活你的I2C總線故障方案出爐了!
    如果這麼一個簡單的東西,有時候想要的結果死活不出來,反覆的檢查問題的原因,查詢解決辦法,核查設備的數據手冊,甚至發送和接收的每一條命令與數據都知道是什麼意思,仍然無法解決問題,那該怎麼辦呢? 本文主要針對 i2c 設備,講解如何解決 i2c 設備主機與從機直接無法正常數據交互的問題,側重點是針對硬體設計不太合理、i2c 設備設計不標準導致總線故障的情況,並且通過分析現象,提出解決方案。對於在設備初始化中,沒有設置相應的寄存器或者發送命令,而導致的無法獲取想要的數據情況,不作詳細介紹。
  • 樹莓派怎樣連接多個I2C設備
    根據表,i2c地址為0x76。請記下該地址。 對所有i2c設備執行此操作。i2c總線可以處理多個設備,但是它們應具有不同的i2c地址。有些i2c設備具有用於設置其他i2c地址的跳線,但許多設備卻沒有。在這種情況下,您可以使用i2c多路復用器(硬體)來旋轉i2c SDA(數據)和SCL(時鐘),也可以創建其他i2c總線或更多。
  • Linux下I2C總線EEPROM驅動程序設計方法
    因為i2c-core提供了統一的接口,所以也為設計這兩類驅動提供了方便。   4 開發實例   Linux內核已經提供了I2C驅動中所需要的基本模塊。i2c-core、i2c-dev和i2c-proc是總線控制器和I2C設備所需要的核心模塊。
  • 玄空風水基礎知識入門
    揭秘玄空風水神秘的面紗,本文進行玄空風水基礎知識入門介紹。玄空之道,其大無邊,玄空學就是一門研究時間和空間風水,為人趨吉避兇為人改造命運的風水學問。   玄空飛星則是以地運、坐星、向星以及年月飛星的組合生克來斷住宅吉兇,玄空風水基礎知識入門介紹到此為此,後續可繼續關注本站深入解析。
  • 什麼是計算機網絡 計算機網絡入門的基礎知識
    本篇將介紹關於計算機網絡入門基礎知識的分享,有興趣的朋友可以了解一下!首先我們要對計算機網絡有個定義:計算機網絡就是將分布在不同地理位置並具有獨立功能的多臺計算機,通過通信設備和線路連接起來,在功能完善的網絡軟體(網絡協議及網絡作業系統等)支持下,以實現網絡資源共享和數據傳輸為目的的系統。
  • 線性代數入門——矩陣的按行、列分塊及其簡單應用
    文章中的例題大多為紮實基礎的常規題目和幫助加深理解的概念辨析題,並有相當數量的歷年考研試題。對於一些難度較大或對理解所學知識有幫助的「經典好題」,我們會詳細講解。閱讀更多「線性代數入門」系列文章,歡迎關注數學若只如初見!
  • 汽車基礎知識入門大全系列
    大家好,今後我將會持續不斷地更新,做有關於汽車基礎知識入門大全系列分享。從最基本的汽車結構知識,名詞含義,理論知識,汽車發展史等各方面跟大家一起交流學習,希望大家對汽車有更深的了解。前兩期跟大家分享了有關於汽車發動機的基礎知識,這期講汽車組成的另外一個部分--車身。
  • 《周易》入門必備的基礎知識,全是精華,建議收藏學習
    今天給夥伴們整理了一些《周易》的入門基礎知識,都是全書中的精華,夥伴們可以收藏自家學習。1、首先,什麼是《周易》《周易》是一本哲學書籍,自古以來的哲學很多都是和宗教或者預測捆綁在一起發展的。由《周易》發展的五行學說,也是樸素唯物主義的代表性學說。
  • 水電安裝基礎知識 裝修入門注意事項
    水電安裝基礎知識 裝修入門注意事項 房天下房天下
  • 英語語法基礎入門 英語入門最基礎的語法知識大全
    英語語法基礎入門 英語入門最基礎的語法知識大全很多人想知道怎麼才能學好英語語法,英語入門基礎語法有哪些呢?下面小編為大家介紹一下!初學英語語法如何入門1、 對於一個初學者來說,剛開始不應過度在意語法。
  • 弱電電工基礎技術手冊,新手從入門到精通利器!
    弱電電工基礎技術手冊,新手從入門到精通利器!大家熟悉的電工,一般都是從事高壓強電方面的工作,但是弱電電工的概念人們並不是很清楚,弱電電工是指從事建築物內部以及內部和外部間的信息交換與信息傳遞工程安裝維修工作的電工。如今,信息化發展越來越好,弱電電工在建築領域中起到的作用也越來越大。很多朋友都想要從事或者轉行做弱電,那麼如何進行更好地學習呢?
  • 示波器和I2C時序波形圖的關係分析
    huz_hello_i2c/n」); len=strlen(buf); //deviceid: 0x3c write_i2c(0x3c, buf , len); 接收端的代碼比較簡單,就不貼了 將示波器的X和Y分別接到SDA和SCL,得到波形並分析如圖:
  • 線性代數入門——計算方陣乘冪的基礎方法及典型例題
    系列簡介:這個系列文章講解線性代數的基礎內容,注重學習方法的培養。
  • RStudio介紹及入門
    Hello,這裡是行上行下,我是喵君姐姐~上一期寫了R語言的入門及安裝,得到了很多小夥伴的喜歡。在忙完了畢業之後,終於有時間可以抽空寫R語言系列的教程啦!那今天就請Ten years old詳細講解一下,RStudio介紹及入門。R是統計領域廣泛使用的工具,屬於GNU系統的一個自由、免費、原始碼開放的軟體,是用於統計計算和統計繪圖的優秀工具。
  • 0基礎新手電工如何快速入門?電工快速入門方法
    初學電工,必須從電工基礎知識學起,建議可以先買一本電工基礎專業書籍。也可以在網上看一些大學出的電工學方面的教學視頻。基礎理論很重要,電氣各種控制理論要搞明白。一年左右時間掌握系統理論是沒問題的。搞電氣,關鍵是實踐,有理論作為指導,多多動手。前提是,你必須對電氣有濃厚的興趣愛好,這樣進步就很快了。
  • 命理學入門基礎知識!
    _ 二零二零 開啟鴻運 _ 道 教 文 化 研 究 會 為方便想學習命理學的朋友,現整理下列命理學入門基礎知識。
  • 計算機的基礎知識,很簡單但有必要了解
    各位小夥伴們,大家好,這次小編要介紹一些計算機的基礎知識,內容比較簡單,但是,小編覺得很有必要了解。首先,我們來了解一下二進位,我們都知道,計算機的語言是用二進位來表示的,只有0和1兩個數,逢二進一,比如1+1=10.在十進位中是逢十進一,但是在計算機中,是逢二進一。
  • 數據分析必備——統計學入門基礎知識 - 人人都是產品經理
    編輯導語:不論在什麼崗位,都要懂得本崗位的基礎知識,打牢基礎後面才能穩步發展;數據分析也是如此,數據分析必須要掌握統計學的基礎知識;本文是作者分享的關於統計學入門基礎的知識,我們一起來學習一下吧。要做好數據分析,除了自身技術硬以及數據思維靈活外,還得學會必備的統計學基礎知識!
  • 了解這些基礎的動物學知識就能很快入門
    貝加爾海豹Pusa sibirica人和人不一樣,對於科普這件事,有人喜歡茶餘飯後看看簡單的小科普當作消遣,也有人喜歡偏重某一方面然後稍加深入地去了解,還有人很喜歡硬核一些的乾貨,會去認真學習和鑽研,把科普到的知識完全掌握
  • 43.95G名校電氣工程師全套視頻教程,公共+專業基礎,入門到高手
    43.95G名校電氣工程師全套視頻教程,公共+專業基礎,入門到高手註冊電氣工程師 公共基礎包含:材料力學,電工電子,法律法規,高數,工程經濟 ,化學,計算機,理論力學,流體力學,教程涵蓋了電氣工程師需要掌握的基礎知識和進階技能,講解全面詳細,內容由淺入深,語言通俗易懂, 課件採用雙色印刷,對重點內容突出標記,方便讀者學習。