"也許你聽說過I2C,或者你也正在使用I2C,但你有沒有了解過什么是I2C?I2C是如何工作的?讓我們一起了解一下什么是I2C?以及它的工作原理吧!"
什么是I2C
I2C(Inter-Integrated Circuit)是一種使用多主從結構的串行通信總線。它是由飛利浦在20世紀80年代初設計的。I2C對于主板、嵌入式系統或手機和外圍元件之間的通信是很方便的。由于其簡單性,I2C被廣泛用于微控制器和傳感器、顯示器、物聯網設備、EEPROM等的通信。I2C由兩條線組成,SCL和SDA,這兩條數據線需要連接到上拉電阻,當總線處于空閑狀態時,SCL和SDA處于高電平,I2C總線按照一定的協議工作。
接下來,讓我們看一下I2C協議。I2C支持多個從屬設備,也就是說,多個I2C從屬設備可以連接到一個I2C控制器上。這些不同的I2C從屬設備有不同的設備地址,這樣I2C主控制器可以通過I2C設備的設備地址訪問指定的設備地址,一條I2C總線連接多個I2C設備,如圖所示:
SDA和SCL鏈接必須連接到一個上拉電阻,通常是4.7KΩ。其余的I2C從機與SDA和SCL線相連接,這樣就可以通過SDA和SCL線訪問多個I2C設備。
I2C的特點
1. 只需要一條數據線SDA和一條時鐘線SCL,SDA(串行數據線)和SCL(串行時鐘線)都是雙向的I/O線
SCL(串行時鐘):串行時鐘線,用于傳輸CLK信號,一般由主設備提供給從設備
SDA(串行數據):串行數據線,傳輸通信數據
2. 實現真正的多主總線,任何設備都可以同時作為主設備和從設備,但同時只能有一個主設備
3. 可以通過外部連接進行檢測,便于系統故障診斷和調試
4. 連接在同一總線上的IC只受限于總線的最大電容,串行8位雙向數據傳輸比特率在標準模式下可達100Kbit/s,在快速模式下可達400Kbit/s,在高速模式下可達3.4Mbit/s。
5. 總線上消耗的電流非常小。因此,在總線上擴展的設備數量主要由電容性負載決定,它可以抵抗高噪音干擾。增加一個總線驅動器可以使總線電容擴大10倍,傳輸距離可以達到15米;兼容不同電壓等級的設備,工作溫度范圍廣
6.接口電路是一個開路輸出。它需要通過一個上拉電阻連接到電源VCC。當總線處于空閑狀態時,兩條線都是高電平。連接到總線上的外部器件是CMOS器件。輸出端也是一個開路電路。
CORPORATE CULTURE
數據傳輸
主設備和從設備遵循以下協議格式進行數據傳輸。數據在主設備和從設備之間通過SDA數據線傳輸0和1的串行數據,一個串行數據序列的結構可以分為:
起始位
地址位(7bit或10bit)。
讀和寫位(1bit)
響應位(1bit)
數據位+響應位(數據位8bit;響應位1bit;數據+響應可反復多次傳輸,直至遇到停止位)
停止位
啟動位
當主設備決定開始通信時,它需要發送一個啟動信號,并需要進行以下操作
首先,將SDA從VOH切換到VOL
然后將SCL從VOH切換到VOL
在主設備發出信號和啟動條件后,所有的從屬設備即使在睡眠模式下也會變得活躍,并等待接收一個地址位。
地址位
地址位支持7位和10位,如果主站需要向從站發送/接收數據,必須先發送地址,然后從站才會對應,再與安裝在總線上的從站地址相匹配。
響應位
響應位有2種類型:
ACK:從機正確接收數據或地址位+讀寫位
NACK:從機不回答,工作不正常。
每次主設備發送數據和讀寫位時,它將等待從屬設備的響應信號ACK。
如果從屬設備發來響應位信號ACK
如果沒有響應信號NACK,SDA將輸出一個VOH,這將導致主設備重新啟動或停止
數據位
每次傳輸的數據總共有8位,由發送方設置,它需要將數據位傳輸給接收方。
傳輸后有一個ACK/NACK位,如果接收方成功接收了數據,從屬方就發送一個ACK。否則,從機發送一個NACK。
數據可以多次發送,直到收到一個停止位。
停止位
當主設備決定結束通信時,它需要發送結束信號,并需要執行以下操作。
首先將SDA從VOL切換到VOH
然后SCL從VOH切換到VOL
下面是顯示完成的I2C時序圖:
SCL線的同步化(時鐘同步化)
SCL的同步是由于總線線 "AND"(開漏輸出)的邏輯功能,也就是說,只要有一個節點發送低電平,總線就會顯示為低電平。只有當所有節點都發送高電平時,總線才能出現高電平。正是由于線路 "AND "邏輯功能的原理,當多個節點同時發送時鐘信號時,總線上會顯示一個統一的時鐘信號,這就是SCL的同步原理。
CORPORATE CULTURE
SDA仲裁
SDA仲裁
SDA線的仲裁也是基于總線具有線路 "AND "邏輯功能的原則。節點發送1位數據后,比較總線上呈現的數據是否與它發送的內容一致(類似于CAN總線的回讀機制),一致繼續發送否則退出競爭。SDA線的仲裁可以確保I2C總線系統正常通信,當多個主節點試圖同時控制總線時,數據不會丟失。總線系統通過仲裁只允許一個主節點繼續占用總線。
仲裁過程
DATA1和DATA2分別是主節點發送給總線的數據信號,SDA是總線上呈現的數據信號,SCL是總線上呈現的時鐘信號。當主節點1和2同時發送啟動信號時,兩個主節點都發送高電平信號,這時,總線上的信號為高電平,兩個主節點檢測到總線上的信號與自己發送的信號相同,繼續發送數據。在第二個時鐘周期,兩個主節點都發送低電平信號,總線上呈現的信號為低電平,繼續發送數據。在第3個時鐘周期,主節點1發送一個高電平信號,而主節點2發送一個低電平信號,根據總線的 "AND "線的邏輯功能,總線上的信號是低電平。這時,主節點1檢測到總線上的數據與自己發送的數據不同,并斷開數據的輸出階段,轉向從機接收狀態,這樣主節點2贏得了總線數據沒有丟失,即總線上的數據與主節點2發送的數據相同,主節點1轉為從節點后繼續接收數據,也沒有丟失SDA線。因此在仲裁過程中,數據不會丟失。
小結:SDA仲裁和SCL時鐘同步處理不是順序進行的,而是同時進行的。在實際使用中,I2C很容易出現死鎖。有兩種常見的情況會發生死鎖:
一種情況是,當從屬設備回復ACK時,主設備異常復位。
另一種情況是,當從屬設備回復的數據位為0時,主設備異常復位。
這兩種情況的相同點是,當主設備被異常復位時,SDA處于被從屬設備拉低的狀態,而SCL在主設備復位后處于VOH(空閑狀態)。此時,從設備將等待主設備將SCL拉低,以獲取ACK或數據位,而主設備將等待從設備釋放SDA線。主設備和從設備互相等待,在空中互相對視,進入死鎖狀態。
下面是一些解決死鎖問題的常用方法:主設備檢測到SDA線后,從設備就會釋放SDA線。
主設備檢測到SDA被拉低超過一段時間后,會主動復位從設備釋放SDA。這種方法的前提是,從屬設備有一個復位引腳,MCU可以控制從屬設備的復位引腳使其復位。
在主設備檢測到SDA被拉低超過一段時間后,它向時鐘總線推送9個時鐘,并占用從屬設備的ACK位,這樣從屬設備就會釋放SDA到一個VOH。
在主設備和從設備之間串聯一個I2C緩沖器,它可以自動檢測死鎖情況。當檢測到死鎖時,它將主動斷開與主設備的連接,并向從設備發送9個時鐘。在從屬設備釋放SDA線后,它將重新與主設備建立連接。
I2C死鎖問題不能從根本上避免,除了由MCU的異常復位引起的I2C死鎖外,在正常的通信過程中,從屬設備也可能異常地拉下SDA而引起死鎖。因此,當死鎖發生時,軟件應設計成能夠從死鎖中恢復,從而使I2C通信能夠繼續。
CORPORATE CULTURE 時鐘拉伸
時鐘拉伸
什么是I2C時鐘拉伸?在I2C的主從通信過程中,總線上的SCL時鐘總是由主站產生和控制,但如果從站不能跟上主站的速度,I2C協議規定從站可以拉低SCL時鐘線。傳輸會暫停,直到從機釋放SCL線,然后繼續傳輸。
時鐘拉伸是從屬設備的一個可選配置。如果不啟用,從機不能控制SCL;如果啟用,從機可以通過強行將SCL拉低來降低傳輸速度。在SCL為VOL的期間,主機只能等待從機釋放SCL。
CORPORATE CULTURE
重復啟動
有時,主站需要在一次通信中進行多次信息交換,如與不同的從站傳輸信息,或切換讀寫操作,而又不想在此期間被其他主站干擾,那么可以使用 "重復啟動條件"--在一次通信中,主站可以產生多個啟動條件來完成多個信息交換,最后產生一個停止條件來結束整個通信過程。由于在此期間沒有停止條件,所以主站一直占據著竊聽器,而其他主站無法切換進來。
CORPORATE CULTURE
下面是UART、I2c和SPI之間的區別
你可能想知道,這三種通信方式中哪一種是最好的?是UART、I2C,還是SPI?
實際是沒有最好的通信外設,每個通信外設都有自己的優點和缺點。
因此,用戶應該選擇最適合他們項目的通信外設。例如,如果你想要最快的通信外設,SPI將是最理想的。另一方面,如果用戶想連接多個設備而又不太復雜,I2C將是最理想的,因為它可以連接多達127個設備,而且易于管理。
以下是一些支持I2C通信協議的產品:
Seeeduino XIAO 系列
所有支持I2C、UART或SPI的XIAO系列單片機,這里有鏈接你可以查看Seeed Studio XIAO系列產品。
以下是XIAO系列的一些特點
拇指大小的外形尺寸,只有20×17.5毫米。專為空間受限的情況而制造。
多達11個可用IO支持多種接口,包括模擬、數字、IIC、UART、SPI等。
強大的內核,性能強大,適合多樣化和復雜的應用。
輕松地將XIAO集成到其他板子上,實現大規模生產。
Wio Terminal
Wio Terminal是一個基于ATSAMD51的微控制器,具有藍牙和Wi-Fi無線連接功能,由Realtek RTL8720DN提供支持,與Arduino和MicroPython兼容。
以下是Wio終端的一些特點
強大的MCU:Microchip ATSAMD51P19的ARM Cortex-M4F內核,運行頻率為120MHz。
可靠的無線連接:配備Realtek RTL8720DN,雙頻2.4Ghz/5Ghz Wi-Fi
完整的系統配備有屏幕+開發板+輸入/輸出接口+外殼
與樹莓派40針兼容的GPIO,可以作為樹莓派的外圍設備進行安裝
支持Arduino、CircuitPython、Micropython、ArduPy(什么是ArduPy)、AT固件、Visual Studio代碼
支持USB OTG
CORPORATE CULTURE
寫在最后
I2C(Inter-Integrated circuit)協議是電子傳輸信號中常用的一種協議。
它是一種兩線式串行雙向總線,用于連接微控制器和外部設備,也因為它所需的引腳數只需要兩條(CLK和DATA),硬件實現簡單,可擴展性強,所以被廣泛應用于系統內多個集成電路IC間的通信。
審核編輯:湯梓紅
-
控制器
+關注
關注
112文章
16332瀏覽量
177806 -
通信協議
+關注
關注
28文章
879瀏覽量
40297 -
總線
+關注
關注
10文章
2878瀏覽量
88051 -
I2C
+關注
關注
28文章
1484瀏覽量
123619 -
SDA
+關注
關注
0文章
124瀏覽量
28127
原文標題:網絡通信 | I2C通信協議及其工作原理
文章出處:【微信號:ChaiHuoMakerSpace,微信公眾號:柴火創客空間】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論