I2C基礎知識

引言

? ? ? 這里祝大家新年快樂!前面我們介紹了串口通訊協議,現在我們繼續來介紹另一種常見的簡單的串行通訊方式——I2C通訊協議


一、什么是I2C

? ? ? ? I2C 通訊協議(Inter-Integrated Circuit)是由Phiilps公司在上個世紀80年代開發的,其英文翻譯過來實際上是【內部集成電路】,所以他就是為內部集成電路與其他各種模塊進行簡單的串口通訊設置的這樣一個協議

關于I2C的叫法,簡單說明一下:

? ? ? ?根據英文縮寫,應該是寫成IIC,不過通常我們讀的時候會把兩個I讀成I2(I的平方的意思,標準寫法的2應該是在I的右上角)。之所以平時描述時直接寫I2C,主要是因為打角標相對麻煩,所以就出現這樣的寫法。當然了,字母旁邊跟著的“2”一般是表示“to”,所以很多時候會看見比如【P2P】這樣的寫法,這其實就是【Point to Point點對點】的意思。同時有些老外也會直接叫“I to C”,主要原因還是因為“I方C”說起來的話那個平方square念起來比較長,顯得麻煩,所以為了簡單就直接叫I to C了,所以關于I2C的叫法主要會存在這兩種說法。

? ? ? ?總的來說,關于I2C的叫法標準來說就是“I方C”,叫“I2C”相對顯得沒那么準確,也問題不大


二、I2C有什么特點

? ? ? ?I2C主要優點是引腳少、硬件單路實現比較簡單、可擴展性強,其通訊相對來說還是非常穩定的。后來飛利浦公司將其知識產權完全放開,任何人都能隨意使用,成為了一個通用的通訊協議。不需要 USART、CAN等通訊協議的外部收發設備,加之其簡單易用等特點,因此現在被廣泛的使用在系統內多個集成電路(IC)間的低速串行通訊當中。

I2C是一種簡單的雙向兩線制總線協議標準,支持同步串行半雙工通訊。也就是說I2C通訊使用兩根線實現數據的傳輸;同時他是雙向的,既可以收,也可以發。由于其支持的是同步通訊,因此兩根線中必有一根是時鐘信號線,因此只有一條線進行數據的收發,因此其只能支持串行半雙工通訊,這也是I2C通訊與串口通訊的一個顯著區別。

三、I2C通訊的速度如何

? ? ? ?I2C通訊其在標準模式下的傳輸速率為100kbit/s快速模式下傳輸速率為400kbit/s高速模式下可達到3.4Mbit/s,目前大多I2C設備上不支持高速模式。

可見,I2C通訊的速度實際上也比較慢,畢竟其硬件簡單,對比串口通訊,前面設置的波特率一般是115200,也就是115.2,速率也差不多,最快的是450,理論上串口還會比I2C快一點點,當然也都快的有限,所以他們都算是一種低速串行通訊。所以I2C的硬件可能會更簡單,而串口通訊可能還相對復雜一點,主要是因為其同時又要收又要發,所以有一個通用的異步收發器UART在里面。

四、I2C的物理層

這里,我們來了解一下I2C的物理層,看看其硬件設備到底是如何進行設計的。

1、兩種總線

先介紹兩種總線,分別是SCL和SDA

SCL:Serial CLock,串行時鐘總線,用于數據的收發同步

SDA:Serial DAta,串行數據總線,用高低電平表示數據

2、通訊設備的連接

? ? ? ? 知道了使用的兩根線,那么設備他是怎么連接的呢?前面介紹串口通訊時我們知道,串口兩根線連接設備時是點對點的連接,有一個對應關系。而這里I2C通訊我們就一根數據線SCL,很顯然我們這里將會把各種設備掛在一根線上,進行數據的收或發。

? ? ? ?如上圖,也就是說,這實際上是一種總線連接的傳輸方式。也就是我們可以在SCL時鐘線和SDA數據線之間掛載多個I2C通訊設備。當然了,所有的這些I2C設備就相當于電路上的一種并聯的方式將通訊設備連接在了總線上。

? ? ? ?其可以連接多個I2C設備,其中多個設備中必須要有一個主設備,另外其他的可以是從設備。同時I2C通訊協議支持一主多從,也支持多主多從

這里簡單解釋一下,什么叫主從設備?

主從設備是指總線上連接的設備,按其對總線有無控制功能可分為主設備和從設備兩種。


主設備,英文名Master,主人,起到一個控制的作用。這里主要是控制時鐘信號,相當于跑步時喊121的人,控制一個整體的節奏。

從設備,就相當于是聽指令的人,主從設備相當于一種主仆關系

這里有一個疑問:如果多個設備同時要收發數據的話,全部在總線上進行,那數據不會亂嗎?

實際上,為了避免這種問題,我們I2C通訊協議規定,為了區分不同的設備,每個設備都會有一個唯一的地址,主設備會通過這個地址來與相應的從機進行通訊。然后總線連接方式下,我們使用的工作模式應該是開漏輸出,默認會處于一個高阻態,這時候就需要在外面接一個上拉電阻。

還有一個疑問:如果現在有多個主設備和從設備之間要進行數據的傳遞,全都要占用總線,那怎么辦呢?

? ? ? ?首先,總線是不能直接讓所有的設備都占用的,所以默認情況下總線會處于高阻態。總線通過上拉電阻接到電源。設備空閑時,輸出高阻態;當所有設備都空閑時,都輸出高阻態時,由上拉電阻把總線拉成高電平。

? ? ? ?當總線上有一個設備為0,就相當于設備接地,這時候整個數據總線上就都會被接地拉低,置為0,告訴數據總線上的其他所有設備該設備將要占用總線,然后就開始輸出數據。

一般情況下,主從設備是不能占用時鐘信號線的

? ? ? ?但在特殊情況下,也可以往時鐘線上輸出0:在STM32的I2C模塊中有一個特殊的功能——時鐘擴展,即在I2C的主從通信過程中,總線上的SCL時鐘總是由主機來產生和控制的,但如果從機跟不上主機的速率,I2C協議規定:在開啟時鐘延展功能后,從機可以通過將SCL時鐘線拉低來暫停一個傳輸的,直到從機釋放掉SCL線,傳輸繼續進行。

五、I2C的協議層

? ? ? ?為了了解I2C通訊的數據傳輸需要怎么做,具體怎么樣規定要開始發送、結束發送、以什么樣的方式進行傳輸,數據是否有效等等問題的答案,我們需要來看看關于I2C通訊的相關協議部分。

1、位傳輸

? ? ? 前面提到,I2C通訊也是一種低速串行通訊方式。所以在數據傳輸方式上,作為串行通信,I2C時按照位進行傳輸,一般時高位先行。(與串口通訊是相反的)

2、起始信號

? ? ? ?知道數據時如何傳輸后,接下來我們就要討論數據什么時候開始傳輸了。也就是當出現什么信號后,就預示著我們要開始進行數據傳遞了。

? ? ? ?由于在沒有設備進行數據傳遞,也就是總線處于空閑時,總線上是處于高阻態,同時外接了上拉電阻接到電源,因此在沒有發送數據傳遞時總線或者說SDA線上應該處于高電平。因此我們可以給SDA低電平作為開始發送數據傳遞的起始信號。當然了,為了保證起始信號的獨特性,避免SDA線的低電平被視作一位數據,前提需要時鐘線SCL是處于高電平,這樣才能作為I2C通訊傳遞信號的起始信號。

簡單來說,起始信號:SCL是高電平時,SDA線從電平向電平切換。? 用start的S表示

3、停止信號

同理,停止信號就是SDA線由低電平又變成高電平,出現的上升沿信號。

即,停止信號:SCL是高電平時,SDA線從電平向電平切換。用stop的P表示

4、傳輸地址

? ? ? ?知道了什么時候進行或者結束數據傳遞后,我們當然就要開始進行數據傳遞了,這時候就會出現一個問題:我們和誰進行數據傳遞?此時就涉及到通訊設備的地址了。

? ? ? ?為了對應設備進行數據傳遞,主機會通過SDA信號線發送設備地址(SLAVE_ADDRESS)來查找從機。其中,I2C協議規定設備地址可以是7位或10位,實際中7位的地址應用比較廣泛。可見,7位設備地址就可以有2^7種設備同時去進行通信,再不夠可以擴展成10位,即2^10種設備同時進行數據傳遞。

? ? ? ?如上圖所示,一般設備地址占7位,然后緊跟著的一個數據位用來表示數據傳輸方向,他是數據方向位(R/W),通常是第8位或第11位。其中,數據方向位為“1”時表示主機由從機讀數據,該位為“0”時表示主機向從機寫數據。

5、數據的有效性

? ? ? ?確定了設備地址,那就真的要開始進行數據傳遞了。這時候就會涉及到另一個問題:系統他不會隨隨便便把一個信號當做傳遞的數據,所以I2C協議規定了什么情況下的數據才是有效數據。

? ? ? ?I2C協議規定SDA線的高低電平狀態只有在SCL時鐘信號線處于低電平才能改變,同時SDA線上的數據必須在SCL時鐘信號線處于高電平周期保持穩定

? ? ? ?也就是說,SCL線上處于高電平的時候,SDA線上的數據必須要保持穩定,相當于要做一個數據信號線的采樣;如果此時SDA線上處于一個下降沿,就意味著要開始傳遞數據;如果此時SDA線上處于一個上升沿,就意味著要停止傳遞數據。然后SCL線處于低電平時,SDA線上才能進行電平轉換。

6、響應

? ? ? I2C協議規定,當數據發送方發送數據以后,如果接收方收到了數據就必須給發送方一個響應(ACKnowledge),表示接收方收到數據了。

由上圖可知,按照主機控制的時鐘信號,每次時鐘信號高電平時在數據信號線上進行數據采樣,然后當數據線產生停止信號時表示數據傳遞結束,釋放SDA線。此時接收方就要發出響應,這里有兩種響應

? ? ? ?1、應答響應ACK:接收器會給發送方一小段低電平信號;

? ? ? ?2、非應答響應NACK:接收器會給發送方一個高電平信號。


以上便是本次文章的所有內容,歡迎各位朋友在評論區討論,本人也是一名正在學習的小白,愿大家共同努力,一起進步吧!

鑒于筆者能力有限,難免出現一些紕漏和不足,望大家在評論區批評指正,謝謝!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67590.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67590.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67590.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習 DAY3:NLP發展史

NLP發展史 NLP發展脈絡簡要梳理如下: (遠古模型,上圖沒有但也可以算NLP) 1940 - BOW(無序統計模型) 1950 - n-gram(基于詞序的模型) (近代模型) 2001 - Neural language models&am…

CSS 背景與邊框:從基礎到高級應用

CSS 背景與邊框:從基礎到高級應用 1. CSS 背景樣式1.1 背景顏色示例代碼:設置背景顏色 1.2 背景圖像示例代碼:設置背景圖像 1.3 控制背景平鋪行為示例代碼:控制背景平鋪 1.4 調整背景圖像大小示例代碼:調整背景圖像大小…

HarmonyOS簡介:應用開發的機遇、挑戰和趨勢

問題 更多的智能設備并沒有帶來更好的全場景體驗 連接步驟復雜數據難以互通生態無法共享能力難以協同 主要挑戰 針對不同設備上的不同操作系統,重復開發,維護多套版本 多種語言棧,對人員技能要求高 多種開發框架,不同的編程…

【Linux】列出所有連接的 WiFi 網絡的密碼

【Linux】列出所有連接的 WiFi 網絡的密碼 終端輸入 sudo grep psk /etc/NetworkManager/system-connections/*會列出所有連接過 Wifi 的信息,格式類似 /etc/NetworkManager/system-connections/AAAAA.nmconnection:pskBBBBBAAAAA 是 SSID,BBBBB 是對…

如何使用tushare pro獲取股票數據——附爬蟲代碼以及tushare積分獲取方式

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、pandas是什么?二、使用步驟 1.引入庫2.讀入數據 總結 一、Tushare 介紹 Tushare 是一個提供中國股市數據的API接口服務,它允許用戶…

觀察者模式和訂閱發布模式的關系

有人把觀察者模式等同于發布訂閱模式,也有人認為這兩種模式存在差異,本質上就是調度的方法不同。 發布訂閱模式: 觀察者模式: 相比較,發布訂閱將發布者和觀察者之間解耦。(發布訂閱有調度中心處理)

linux 環境安裝 dlib 的 gpu 版本

默認使用 pip 安裝的 dlib 是不使用 gpu 的 在國內社區用百度查如何安裝 gpu 版本的 dlib 感覺信息都不太對,都是說要源碼編譯還有點復雜 還需要自己安裝 cuda 相關的包啥的,看著就頭大 于是想到這個因該 conda 自己就支持了吧,然后查了一下…

【HarmonyOS之旅】基于ArkTS開發(三) -> 兼容JS的類Web開發(二)

目錄 1 -> HML語法 1.1 -> 頁面結構 1.2 -> 數據綁定 1.3 -> 普通事件綁定 1.4 -> 冒泡事件綁定5 1.5 -> 捕獲事件綁定5 1.6 -> 列表渲染 1.7 -> 條件渲染 1.8 -> 邏輯控制塊 1.9 -> 模板引用 2 -> CSS語法 2.1 -> 尺寸單位 …

三路排序算法

三路排序算法 引言 排序算法是計算機科學中基礎且重要的算法之一。在數據分析和處理中,排序算法的效率直接影響著程序的執行速度和系統的穩定性。本文將深入探討三路排序算法,包括其原理、實現和應用場景。 一、三路排序算法的原理 三路排序算法是一…

Python的那些事第五篇:數據結構的藝術與應用

新月人物傳記:人物傳記之新月篇-CSDN博客 目錄 一、列表(List):動態的容器 二、元組(Tuple):不可變的序列 三、字典(Dict):鍵值對的集合 四、集合&#xf…

【AI】DeepSeek 概念/影響/使用/部署

在大年三十那天,不知道你是否留意到,“deepseek”這個詞出現在了各大熱搜榜單上。這引起了我的關注,出于學習的興趣,我深入研究了一番,才有了這篇文章的誕生。 概念 那么,什么是DeepSeek?首先百…

MapReduce簡單應用(一)——WordCount

目錄 1. 執行過程1.1 分割1.2 Map1.3 Combine1.4 Reduce 2. 代碼和結果2.1 pom.xml中依賴配置2.2 工具類util2.3 WordCount2.4 結果 參考 1. 執行過程 假設WordCount的兩個輸入文本text1.txt和text2.txt如下。 Hello World Bye WorldHello Hadoop Bye Hadoop1.1 分割 將每個文…

Dest1ny漏洞庫:用友 U8 Cloud ReleaseRepMngAction SQL 注入漏洞(CNVD-2024-33023)

大家好,今天是Dest1ny漏洞庫的專題!! 會時不時發送新的漏洞資訊!! 大家多多關注,多多點贊!!! 0x01 產品簡介 用友U8 Cloud是用友推出的新一代云ERP,主要聚…

使用where子句篩選記錄

默認情況下,SearchCursor將返回一個表或要素類的所有行.然而在很多情況下,常常需要某些條件來限制返回行數. 操作方法: 1.打開IDLE,加載先前編寫的SearchCursor.py腳本 2.添加where子句,更新SearchCursor()函數,查找記錄中有<>文本的<>字段 with arcpy.da.Searc…

使用國內鏡像加速器解決 Docker Hub 拉取鏡像慢或被屏蔽的問題

一、問題背景 Docker Hub 是 Docker 默認的鏡像倉庫&#xff0c;但由于網絡限制&#xff0c;國內用戶直接拉取鏡像可能面臨以下問題&#xff1a; 下載速度極慢&#xff08;尤其是大鏡像&#xff09;。連接超時或完全被屏蔽&#xff08;部分網絡環境&#xff09;。依賴國外源的…

AI大模型開發原理篇-4:神經概率語言模型NPLM

神經概率語言模型&#xff08;NPLM&#xff09;概述 神經概率語言模型&#xff08;Neural Probabilistic Language Model, NPLM&#xff09; 是一種基于神經網絡的語言建模方法&#xff0c;它將傳統的語言模型和神經網絡結合在一起&#xff0c;能夠更好地捕捉語言中的復雜規律…

2.1.2 Bayer陣列與去馬賽克

文章目錄 Bayer陣列去馬賽克方法 Bayer陣列 由于傳感器只能感受到光的強度&#xff0c;而無法感知顏色&#xff0c;所以需要用紅、綠、藍顏色的濾光片將光中的R、G、B亮度濾出&#xff0c;再通過R、G、B的組合得到各種色彩。Bayer陣列是使用一個傳感器獲得彩色圖像的方法&#…

紅黑樹的學習

紅黑樹的概念 紅黑樹&#xff0c;是一種二叉搜索樹&#xff0c;但在每個結點上增加一個存儲位表示結點的顏色&#xff0c;可以是Red或 Black。 通過對任何一條從根到葉子的路徑上各個結點著色方式的限制&#xff0c;紅黑樹確保沒有一條路徑會比其他路徑長出倆倍&#xff0c;因…

2025年01月31日Github流行趨勢

項目名稱&#xff1a;Qwen2.5項目地址url&#xff1a;https://github.com/QwenLM/Qwen2.5項目語言&#xff1a;Shell歷史star數&#xff1a;13199今日star數&#xff1a;459項目維護者&#xff1a;jklj077, JustinLin610, bug-orz, huybery, JianxinMa項目簡介&#xff1a;Qwen…

Java基礎面試題總結(題目來源JavaGuide)

問題1&#xff1a;Java 中有哪 8 種基本數據類型&#xff1f;它們的默認值和占用的空間大小知道不&#xff1f; 說說這 8 種基本數據類型對 應的包裝類型。 在 Java 中&#xff0c;有 8 種基本數據類型&#xff08;Primitive Types&#xff09;&#xff1a; 基本數據類型關鍵…