一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

IIC你吃透了嗎?建議收藏

哈哈hfgfdf ? 來源:嵌入式學習資料 ? 作者:嵌入式學習資料 ? 2023-02-09 01:22 ? 次閱讀

1、概述

I2C總線是一種十分流行并且強大的總線,其多用于一個(或多個)主機與單個或多個從設備通訊的場景。圖1表明了多種不同的外設可以共享這種只需要兩根線便可以連接到處理器的總線,相對于其他接口來說,這也是I2C總線可以提供的最大優(yōu)勢之一。 這篇應用筆記的目標是幫助大家理解I2C總線是如何工作的。
圖1展示了一個典型的用于嵌入式系統(tǒng)中的I2C總線,其上掛載了多種從設備。作為I2C主機的從微控制器控制著IO拓展、不同傳感器、EEPROM、多個ADC/多個DAC、等等。所有這些設備只需要通過來自主機的兩根引腳來控制。

1c451900-a7d5-11ed-92c9-dac502259ad0.png

1、電特性

I2C總線使用開漏輸出控制器,在同一線路上帶有一個輸入緩沖器,這樣便可以允許在單根數(shù)據(jù)線上實現(xiàn)雙向數(shù)據(jù)流傳輸。

1.1 用于雙向通訊的開漏極

開漏輸出極允許將總線上的電壓拉低(大多數(shù)情況下是到地),或釋放總線以允許其被上拉電阻拉高。當總線被主機或從機釋放,線上的上拉電阻負責將線上電壓上拉到電源軌。由于并沒有設備可以在總線上輸出高電平,這也就意味著總線在通訊中,將不會碰到一個設備輸出高,而另一個設備試圖輸出低所導致的短路問題(電源軌到地)。I2C總線要求處于多主機環(huán)境下的單個主機在輸出高而讀回的實際總線電平為低時(這意味著另一個設備拉低了它)中止通訊,因為另一個設備正在使用總線。采用推挽輸出方式的接口就沒有這么自由了,這也正是I2C總線的一個優(yōu)先。

1c5573e0-a7d5-11ed-92c9-dac502259ad0.png

圖2展示了位于SDA/SCL線上的主從設備的內部簡化結構,其由一個用于讀取數(shù)據(jù)的緩沖器,以及一個用于發(fā)送數(shù)據(jù)的下拉場效應管組成。一個設備只被允許拉低總線(規(guī)定為短路到地)或釋放總線(對地呈現(xiàn)高阻態(tài))以允許上拉電阻拉升總線電平。當處理I2C設備時,有一個重要的概念需要闡明:沒有設備可以保持總線為高。這個特性使得雙向通訊得以實現(xiàn)。

1.1.1 開漏極拉低

正如前面章節(jié)所述,開漏輸出只能將總線拉低,或者釋放總線然后依靠上拉電阻拉高總線。圖3展示了總線拉低時的電流流向。當邏輯電路想要發(fā)送一個低電平時,其會使能下拉場效應管,場效應管會通過短路到地的方式拉低線路。

1c62d68e-a7d5-11ed-92c9-dac502259ad0.png

1.1.2 開漏極釋放總線

當從機或主機想要傳輸一個邏輯電平高,它只能通過使能場效應管的方式釋放總線。這將會使得總線處于浮空狀態(tài),同時上拉電阻將會將總線電平拉高到供電軌,此電平被當作高電平看待。圖4展示了電流如何流過用于拉高總線的上拉電阻。

1c705bce-a7d5-11ed-92c9-dac502259ad0.png

2、I2C接口

2.1 I2C的常用操作

I2C總線是一種雙向接口,其使用被稱為主機的控制器與從設備進行通訊。從機不會主動傳輸任何數(shù)據(jù),除非其被主機尋址。每個處于I2C總線上的設備均有獨有的設備地址,以用于與位于同一總線上的其他設備做區(qū)分。很多從機需要在啟動后進行配置以設置設備行為。這通常在主機訪問從機的內部寄存器映射時完成,這些寄存器均有獨一無二的寄存器地址。單個設備可以具有一個或多個寄存器,這些寄存器可以用來存儲或讀寫數(shù)據(jù)。
I2C總線的物理接口由串行時鐘線(SCL)和串行數(shù)據(jù)線(SDA)組成。SCL和SDA均需要通過上拉電阻連接到Vcc。上拉電阻的大小由I2C線路上的等效電容大小決定(想要了解更多,可以參考I2C Pull-up Resistor Calculation這份文檔,文檔號:SLVA689)。數(shù)據(jù)傳送只能在總線空閑時初始化。如果SDA和SCL在一個STOP標志后均處于高電平狀態(tài),這時可以認為總線處在空閑狀態(tài)。
主機訪問從機的大體流程如下所示:

假設一個主機想要向從機發(fā)送數(shù)據(jù):

發(fā)送方主機發(fā)送一個START標志并且尋址接收方從機

發(fā)送方主機發(fā)送數(shù)據(jù)到接收方從機

發(fā)送方主機通過發(fā)送STOP標志結束傳輸

如果主機想要從從機接收/讀取數(shù)據(jù):

接收方主機發(fā)送START標志并尋址發(fā)送方從機

接收方主機發(fā)送需要讀取的寄存器地址到發(fā)送方從機

接收方主機從發(fā)送方從機接收數(shù)據(jù)

接收方主機通過發(fā)送STOP標志結束通訊

2.1.1 START與STOP標志

主機可以通過發(fā)送START標志初始化與設備的I2C通訊,或者發(fā)送STOP標志結束通訊。當SCL處于高電平時,SDA上的下降沿意味著一個START標志,而SDA上的上升沿意味著一個STOP標志。

1c839ed2-a7d5-11ed-92c9-dac502259ad0.png

2.1.2 重復的START標志

重復的START標志與通常的START標志作用類似,其用于STOP標志后緊接START標志的情況時,用于代替這兩者。它看上去與START標志一致,但是與START標志不同的是,重復的START標志在STOP標志之前出現(xiàn)(也就是總線不處于空閑狀態(tài)時)。當主機希望開始一次新的通訊,但又不希望發(fā)送STOP標志使總線進入空閑狀態(tài)時這會非常管用,這樣可以防止當前主機的總線控制權被其他主機搶奪(當處于多主機環(huán)境下)。

2.2 數(shù)據(jù)有效性與字節(jié)格式

數(shù)據(jù)位伴隨著SCL上的每一個時鐘脈沖被傳輸。單個字節(jié)由SDA線上的8位數(shù)據(jù)組成,其可以是設備地址、寄存器地址或者讀自/寫入設備的數(shù)據(jù)。數(shù)據(jù)以大端在前(MSB)的方式傳輸。在START標志與STOP標志之間可以傳輸任意數(shù)量的數(shù)據(jù)字節(jié)。SDA線上的數(shù)據(jù)必須在時鐘電平為高時保持穩(wěn)定,因為SCL線為高時,SDA線上的變動將會被當作控制指令(START或STOP)。

1c9bed70-a7d5-11ed-92c9-dac502259ad0.png

2.3 應答(ACK)和非應答(NACK)

數(shù)據(jù)的每一字節(jié)(包括地址字節(jié))后總是伴隨著來自接收方的1位ACK位。ACK位使得接收方可以告知發(fā)送方當前字節(jié)已成功接收,并且可以發(fā)送下一字節(jié)。
在接收方發(fā)送ACK位前,發(fā)送方必須釋放總線。接收方通過在ACK/NACK時鐘周期(第9時鐘周期)的低電平相位拉低SDA線來發(fā)送一個ACK位,如此一來,SDA線將會在ACK/NACK時鐘周期的高電平相位保持為低電平。設置與保持時間必須著重注意。
如果SDA線在ACK/NACK時鐘周期保持為高電平,這將會被作為NACK。有好幾種狀態(tài)將會導致NACK的產(chǎn)生:

接收方無法進行接收或發(fā)送,因為其正在執(zhí)行一些實時性功能(real-time function),無法與主機進行通訊。

在發(fā)送期間,接收方收到了無法識別的數(shù)據(jù)或指令。

在發(fā)送期間,接收方無法接收更多數(shù)據(jù)字節(jié)(也就是緩沖區(qū)滿了)。

作為接收方的主機完成了數(shù)據(jù)讀取,因此通過發(fā)送一個NACK通知從機。

1cb833cc-a7d5-11ed-92c9-dac502259ad0.png

3、總線數(shù)據(jù)

數(shù)據(jù)可以寫入/讀自從機,但是這是通過讀寫從設備內部的寄存器完成的。
包含信息的寄存器處于從機的內存中,無論這些信息是配置信息還是一些需要回發(fā)給主機的采樣數(shù)據(jù)。為了指示從機去執(zhí)行某一任務,主機必須向這些寄存器內寫入信息。
雖然通常來說I2C從機是具有多個寄存器的,但也需要注意并不是所有從機都是這樣。對于一個只具有單個寄存器的簡易從機來說,可以通過在從機地址后直接發(fā)送數(shù)據(jù)的方式來直接寫這個單一的寄存器,而不需要再對寄存器進行尋址。一個通過I2C總線控制的8位I2C開關可以很好的作為單寄存器設備的例子。由于它通過1位來使能/失能一個通道,因此只需要1個寄存器,主機可以在從機地址后直接寫入寄存器數(shù)據(jù),跳過寄存器編碼部分。

3.1 寫位于I2C總線上的從機

要在I2C總線上執(zhí)行寫操作,主機會發(fā)送一個START標志以及從機地址到總線上,并且將最后1位(讀寫位)設為0以表明這是寫操作。當從機發(fā)送應答位之后,主機便發(fā)送希望寫入的寄存器地址。從機再一次應答,通知主機從機已準備好。這之后,主機開始發(fā)送寄存器數(shù)據(jù)到從機。當主機發(fā)送完所有需要發(fā)送的數(shù)據(jù)(有時只是一個字節(jié)),其將會通過發(fā)送STOP標志結束通訊。
圖8展示了一個寫入單個字節(jié)到從機寄存器的例子。

1cd00740-a7d5-11ed-92c9-dac502259ad0.png

3.2 讀位于I2C總線上的從機

從從機讀取數(shù)據(jù)與寫入數(shù)據(jù)類似,但是有一些額外的步驟。為了讀取從機,主機必須先指示從機自己想要讀取哪個寄存器。這一步通過執(zhí)行與寫操作類似的開始通訊步驟完成,發(fā)送讀寫位為0的設備地址(意味著一次寫操作),緊跟著希望讀的寄存器的地址。一旦從機應答了此地址,主機將會再一次發(fā)送START標志,并發(fā)送讀寫位為1的設備地址(意味著一次讀操作)。這時,從機將會應答讀請求,同時主機釋放總線但是保持到從機的時鐘供應。在通訊流程的這一部分,主機將會作為接收方主機,同時從機將會作為發(fā)送方從機。 主機將會繼續(xù)發(fā)送時鐘脈沖,但是會釋放SDA線以便于從機傳輸數(shù)據(jù)。在每個字節(jié)數(shù)據(jù)的結尾,主機將會發(fā)送一個ACK到從機,讓從機知道主機準備好接收更多的數(shù)據(jù)。一旦主機接收完成期待的字節(jié)數(shù)量,它將會發(fā)送一個NACK,通知從機終止通訊并要求從機釋放總線。緊接著主機將會發(fā)送一個STOP標志結束通訊。
圖9展示了從從機寄存器讀取單個字節(jié)的例子。

1ce826ea-a7d5-11ed-92c9-dac502259ad0.png

這是對德州儀器的應用文檔SLVA704的中文翻譯,原文標題為:Understanding the I2C Bus。相比于飛利浦出品的幾十頁的I2C標準文檔,此文檔只有8頁,但是對于想要了解標準I2C總線并應用的人來說,這個已經(jīng)夠用了。

審核編輯黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5402

    瀏覽量

    122885
  • 總線
    +關注

    關注

    10

    文章

    2936

    瀏覽量

    89187
  • IIC
    IIC
    +關注

    關注

    11

    文章

    304

    瀏覽量

    39051
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Microchip無感BLDC資料合集,強烈建議收藏

    本帖最后由 jf_89421697 于 2025-3-12 17:38 編輯 合集包含了一些Microchip無感BLDC相關資料,建議可打包收藏
    發(fā)表于 03-12 17:22

    收藏的一些庫存,直流無刷技術+源碼+論文(建議打包)

    這也是我網(wǎng)絡上淘過來收藏的一些資料,免費跟大家一起分享一下,建議下載哦,收藏不易
    發(fā)表于 03-17 20:17

    收藏建議

    不知道是不是我沒發(fā)現(xiàn)我覺得需要增加一個收藏功能,也就是看到好的帖子,可以收藏下來,想看時就不用找那么久??戳四敲淳弥豢吹?b class='flag-5'>收藏本版的功能?。?!{:45:}{:45:}{:45:}真的是我沒發(fā)現(xiàn)么呵呵
    發(fā)表于 11-10 19:40

    小小的電阻,您真的吃透了它的用法嗎

    小小的電阻,您真的吃透了它的用法嗎
    發(fā)表于 05-28 22:39

    關于“收藏”設置的建議

    在論壇里會看到很精彩的文章,就會收藏保存,以后從新溫習,,但是收藏不能分組,所有的收藏文件都擠在一起,所以實在是太亂了,找到哪一個文件的話,非常的不方便,,,建議能夠進行分組歸類,,這
    發(fā)表于 06-12 10:02

    真的吃透了電阻的用法?

    電阻作為一種最基本電子元器件,廣泛運用在各種電路中,通常我們也認為電阻是用法最簡單的一種電子元器件,除了功率外,沒有過多的講究。如果今天我說就這個小小的電阻,許多資深電子工程師都不一定真正懂得如何用,您相信嗎?在選用電阻的時候,如果避除高頻電路的特殊應用,一般我們只考慮電阻的功率,對于普通工程師,只要能通過流過電阻的電流選擇合適的功率,就可算做合格,如果能考慮到瞬時功率,就可以算做不錯的工程師。但要能真正正確使用電阻,只有做到這兩點還不夠,看了下面的文字您就會明白,原來用電阻還有這么多講究。注:后面內容是我個人對一些實際應用做出的理解,不一定完全正確,只做參考。先看一個簡單的電路圖,是通過采樣電阻R1和R2對流過LED燈的電流采樣,然后調整PWM輸出,以保證不同電壓下流過LED燈的電流恒定。 這個電路圖有一個讓人納悶的地方,為什么采樣電阻要用兩個?兩個3.9歐的電阻,好像用一個2歐的電阻也沒什么問題???就算是電流比較大,我們可以選用更大功率的電阻來解決,裝一個電阻比裝兩個電阻要簡單方便,這樣的電路著實讓人有點迷糊。 以我個人的理解,這種電路形式有以下優(yōu)點: 1. 多個電阻更利于散熱,兩個1W的2歐電阻并聯(lián)使用和一個2W的1歐電阻單獨使用,流過同樣的電流,大多數(shù)時候兩個電阻并聯(lián)使用溫升要小,電阻在溫度高(比如高于70攝氏度)的條件下可以承受的功率會明顯下降,這樣兩個電阻并聯(lián)的電路效果會更好。 2.多個電阻可以通過電阻的組合得出更理想的電阻值,比如實際應用中1.95歐電阻比2歐電阻更合適,如果想直接買一個1.95歐的電阻肯定沒有兩個3.9歐的電阻方便,因為3.9歐是標準阻值,而1.95歐不是。 再看一個電源類產(chǎn)品中常見的電路,這個電路就更加“古怪”,圖中是R4和R5串聯(lián)、R6和R7串聯(lián)、R8和R9串聯(lián)。這個電路中R4和R5的阻值之和通常為1M~1.5M,也就是說只要這兩個電阻的阻值和在這個范圍內都可以接受,對電路功能沒有明顯影響。于是這里就引出一個疑問,為什么這里要用兩個電阻串聯(lián)呢? 如果是功率原因,就算是230V的交流,一個1M的電阻承受的功率會符合此公式:P=(230*1.414)*(230****=0.105625W,只要選用一個1/8的電阻就夠用了,用功率來解釋說不通。 這種電路涉及到電阻兩個容易被大家忽略的參數(shù)“最大耐壓值”和“最大工作電壓”,電阻除了阻值、額定功率外,還有兩個重要參數(shù)是最大耐壓值和最大工作電壓,比如常見的1/4W插件電阻,通常最大耐壓值是500V、最大工作電壓為250V。 再來看上面的電路,如果我們把R4和R5合并成一個1/4W 1M的插件電路,功率上講是沒有問題的,但是230V交流通過整流橋后可以產(chǎn)生最高325V的直流電壓,這樣就會讓這個電阻長時間工作在300V左右的電壓下,時間一長,就會損壞這個電阻,但如果是用兩個510K的電阻串聯(lián),每個電阻只分到大約150V的電壓,就可以保證電路長時間穩(wěn)定工作。
    發(fā)表于 03-26 08:22

    電功率理解透了嗎?怎么算功率因數(shù)?

    原標題:電功率理解透了嗎?怎么算功率因數(shù)?1度電是多少?1.電功率電功率即電流在單位時間內所做的功,也就是說電流在1S內做的功。在交流電路中,電功率分為視在功率、有功功率和無功功率。 1.1有功
    發(fā)表于 07-09 07:09

    基于由入門到精通吃透PID

    基于由入門到精通吃透PID
    發(fā)表于 10-15 10:34 ?9次下載
    基于由入門到精通<b class='flag-5'>吃透</b>PID

    阻抗的概念,真的懂了嗎?

    阻抗的概念,真的懂了嗎?
    的頭像 發(fā)表于 07-02 11:40 ?1.6w次閱讀

    【CC2530授課筆記】課程列表匯總 【超級干貨】【建議收藏

    【CC2530授課筆記】課程列表匯總 【超級干貨】【建議收藏
    發(fā)表于 11-29 19:36 ?0次下載
    【CC2530授課筆記】課程列表匯總 【超級干貨】【<b class='flag-5'>建議</b><b class='flag-5'>收藏</b>】

    AUTOSAR中的IIC如何實現(xiàn)和配置

    也許會很好奇,為啥?MCAL和CDD有啥不一樣?如果是初學者,建議先把這問題放一放,看我下面的講解。 2. IIC的MCAL實現(xiàn)方式
    的頭像 發(fā)表于 12-12 09:25 ?6272次閱讀

    年度爆款技術好文Top 10,建議收藏!

    點擊藍字?關注我們 點個 星標 ,茫茫人海也能一眼看到我 贊 一個唄,讓大家知道 在看 點擊" 閱讀原文 ",同步 領取福利 原文標題:年度爆款技術好文Top 10,建議收藏! 文章出處:【微信公眾號:安森美】歡迎添加關注!文
    的頭像 發(fā)表于 01-19 19:25 ?829次閱讀

    Linux 命令大全建議收藏

    本文為 Linux 命令大全,從 A 到 Z 都有總結,建議大家收藏以便查用,或者查漏補缺!
    的頭像 發(fā)表于 05-12 10:53 ?1065次閱讀

    建議收藏)使用示波器必懂的基礎知識匯總

    ,想要加群學習討論/領取文檔資料的同學都可以掃描圖中運營二維碼一鍵加入哦~? (廣告、同行勿入 原文標題:(建議收藏)使用示波器必懂的基礎知識匯總 文章出處:【微信公眾號:張飛實戰(zhàn)電子】歡迎添加關注!文章轉載請注明出處。
    的頭像 發(fā)表于 07-10 19:40 ?965次閱讀
    (<b class='flag-5'>建議</b><b class='flag-5'>收藏</b>)使用示波器必懂的基礎知識匯總

    最新!智慧燈桿在水域中的應用案例匯總(建議收藏

    最新!智慧燈桿在水域中的應用案例匯總(建議收藏
    的頭像 發(fā)表于 01-07 10:28 ?324次閱讀
    最新!智慧燈桿在水域中的應用案例匯總(<b class='flag-5'>建議</b><b class='flag-5'>收藏</b>)