在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

I2C通信沒反應怎么辦?

硬件工程師煉成之路 ? 來源:德州儀器 ? 2023-05-04 11:30 ? 次閱讀

做硬件我們經常會遇到各種各樣的問題,一些通信接口也會出現,I2C自然也不例外。假如遇到I2C沒反應,那么可能會出現這種情況:“軟件工程師說,我軟件都已經配好了,但是就是讀寫不到數據,是不是硬件有問題”。

這個時候,就需要我們了解I2C的通信時序,我們可以通過示波器抓取通信的波形,看是否滿足通信時序要求,主機有沒有發送數據?I2C通信地址對不對?如果主機有發送數據,從機是否有正常應答?通信信號質量是否OK?如此這般,一般是能夠查到問題在哪里的。

基于上面的問題,這會要求我們掌握I2C的通信時序。畢竟,你只有知道它是長什么樣子,你才能知道它對不對。下面就簡單介紹下I2C的通信時序。

概述

I2C總線是一種十分流行并且強大的總線,其多用于一個主機(或多個)與單個或多個從設備通訊的場景。圖1表明了多種不同的外設可以共享這種只需要兩根線便可以連接到處理器的總線,相對于其他接口來說,這也是I2C總線可以提供的最大優勢之一。

這篇應用筆記的目標是幫助用戶理解I2C總線是如何工作的。

圖1展示了一個典型的用于嵌入式系統中的I2C總線,其上掛載了多種從設備。作為I2C主機的從微控制器控制著IO拓展、不同傳感器、EEPROM、多個ADC/多個DAC、等等。所有這些設備只需要通過來自主機的兩根引腳來控制。

41592624-e645-11ed-ab56-dac502259ad0.png

1、電特性

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

用于雙向通訊的開漏極

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

4168a644-e645-11ed-ab56-dac502259ad0.png

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

開漏極拉低

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

417400b6-e645-11ed-ab56-dac502259ad0.png

開漏極釋放總線

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

417b1b62-e645-11ed-ab56-dac502259ad0.png

2、I2C接口

I2C的常用操作

I2C總線是一種雙向接口,其使用被稱為主機的控制器與從設備進行通訊。從機不會主動傳輸任何數據,除非其被主機尋址。每個處于I2C總線上的設備均有獨有的設備地址,以用于與位于同一總線上的其他設備做區分。很多從機需要在啟動后進行配置以設置設備行為。這通常在主機訪問從機的內部寄存器映射時完成,這些寄存器均有獨一無二的寄存器地址。單個設備可以具有一個或多個寄存器,這些寄存器可以用來存儲或讀寫數據。

I2C總線的物理接口由串行時鐘線(SCL)和串行數據線(SDA)組成。SCL和SDA均需要通過上拉電阻連接到Vcc。上拉電阻的大小由I2C線路上的等效電容大小決定(想要了解更多,可以參考TI的I2CPull-up Resistor Calculation這份文檔,文檔號:SLVA689;也可以看我的筆記里面的文章《I2C上升沿過長與上拉電阻》)。數據傳送只能在總線空閑時初始化。如果SDA和SCL在一個STOP標志后均處于高電平狀態,這時可以認為總線處在空閑狀態。

主機訪問從機的大體流程如下所示:

1、假設一個主機想要向從機發送數據:

a、發送方主機發送一個START標志并且尋址接收方從機

b、發送方主機發送數據到接收方從機

c、發送方主機通過發送STOP標志結束傳輸

2、如果主機想要從從機接收/讀取數據:

a、接收方主機發送START標志并尋址發送方從機

b、接收方主機發送需要讀取的寄存器地址到發送方從機

c、接收方主機從發送方從機接收數據

d、接收方主機通過發送STOP標志結束通訊

START與STOP標志

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

418595a6-e645-11ed-ab56-dac502259ad0.png

重復的START標志

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

數據有效性與字節格式

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

41905cde-e645-11ed-ab56-dac502259ad0.png

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

數據的每一字節(包括地址字節)后總是伴隨著來自接收方的1位ACK位。ACK位使得接收方可以告知發送方當前字節已成功接收,并且可以發送下一字節。

在接收方發送ACK位前,發送方必須釋放總線。接收方通過在ACK/NACK時鐘周期(第9時鐘周期)的低電平相位拉低SDA線來發送一個ACK位,如此一來,SDA線將會在ACK/NACK時鐘周期的高電平相位保持為低電平。設置與保持時間必須著重注意。

如果SDA線在ACK/NACK時鐘周期保持為高電平,這將會被作為NACK。有好幾種狀態將會導致NACK的產生:

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

2、在發送期間,接收方收到了無法識別的數據或指令。

3、在發送期間,接收方無法接收更多數據字節(也就是緩沖區滿了)。

4、作為接收方的主機完成了數據讀取,因此通過發送一個NACK通知從機。

419a690e-e645-11ed-ab56-dac502259ad0.png

I2C總線數據

數據可以寫入/讀自從機,但是這是通過讀寫從設備內部的寄存器完成的。

包含信息的寄存器處于從機的內存中,無論這些信息是配置信息還是一些需要回發給主機的采樣數據。為了指示從機去執行某一任務,主機必須向這些寄存器內寫入信息。

雖然通常來說I2C從機是具有多個寄存器的,但也需要注意并不是所有從機都是這樣。對于一個只具有單個寄存器的簡易從機來說,可以通過在從機地址后直接發送數據的方式來直接寫這個單一的寄存器,而不需要再對寄存器進行尋址。一個通過I2C總線控制的8位I2C開關可以很好的作為單寄存器設備的例子。由于它通過1位來使能/失能一個通道,因此只需要1個寄存器,主機可以在從機地址后直接寫入寄存器數據,跳過寄存器編碼部分。

寫位于I2C總線上的從機

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

圖8展示了一個寫入單個字節到從機寄存器的例子。

41a775fe-e645-11ed-ab56-dac502259ad0.png

讀位于I2C總線上的從機

從從機讀取數據與寫入數據類似,但是有一些額外的步驟。

為了讀取從機,主機必須先指示從機自己想要讀取哪個寄存器。這一步通過執行與寫操作類似的開始通訊步驟完成,發送讀寫位為0的設備地址(意味著一次寫操作),緊跟著希望讀的寄存器的地址。一旦從機應答了此地址,主機將會再一次發送START標志,并發送讀寫位為1的設備地址(意味著一次讀操作)。這時,從機將會應答讀請求,同時主機釋放總線但是保持到從機的時鐘供應。在通訊流程的這一部分,主機將會作為接收方主機,同時從機將會作為發送方從機。

主機將會繼續發送時鐘脈沖,但是會釋放SDA線以便于從機傳輸數據。在每個字節數據的結尾,主機將會發送一個ACK到從機,讓從機知道主機準備好接收更多的數據。一旦主機接收完成期待的字節數量,它將會發送一個NACK,通知從機終止通訊并要求從機釋放總線。緊接著主機將會發送一個STOP標志結束通訊。

圖9展示了從從機寄存器讀取單個字節的例子。

41b03b12-e645-11ed-ab56-dac502259ad0.png

這是對德州儀器的應用文檔SLVA704的中文翻譯,原文標題為:Understanding the I2C Bus。

審核編輯:湯梓紅

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

    關注

    2551

    文章

    51099

    瀏覽量

    753574
  • 總線
    +關注

    關注

    10

    文章

    2881

    瀏覽量

    88085
  • I2C
    I2C
    +關注

    關注

    28

    文章

    1487

    瀏覽量

    123759
  • I2C總線
    +關注

    關注

    8

    文章

    391

    瀏覽量

    60938
  • I2C通信
    +關注

    關注

    0

    文章

    22

    瀏覽量

    8835

原文標題:I2C通信沒反應怎么辦?

文章出處:【微信號:gh_3a15b8772f73,微信公眾號:硬件工程師煉成之路】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如果芯片不具有硬件I2C模塊怎么辦

    這樣做的好處是可以突破硬件上的限制,例如芯片不具有硬件 I2C 模塊,或者硬件 I2C 模塊損壞,又或者使用硬件 I2C 模塊時布線非常麻煩。壞處是需要寫代碼模擬時序,根據不同的硬件平臺和不同的時鐘頻率,代碼中的部分參數是不一樣
    的頭像 發表于 10-30 15:59 ?4882次閱讀
    如果芯片不具有硬件<b class='flag-5'>I2C</b>模塊<b class='flag-5'>怎么辦</b>?

    I2C通信介紹及軟測方法

    本文主要講解I2C通信介紹以及如何使用軟件工具抓取通信波形,幫助開發人員更好的去理解I2C通信
    的頭像 發表于 04-17 16:35 ?2895次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>通信</b>介紹及軟測方法

    點擊綁定微信沒反應怎么辦

    請問點擊綁定微信沒反應怎么辦
    發表于 02-03 18:18

    I2C Guid I2C指南

    I2C Guid  I2C指南 The I2C bus is used in a wide rangeof applications because it is simpleand
    發表于 04-23 13:55 ?36次下載

    電腦usb接口不能用沒反應怎么辦

    我們在使用電腦時有時會遇到電腦usb接口不能用或是電腦USB沒反應,可能很大部份人都遇到過這樣的情況。下面是小編整理的電腦usb接口不能用沒反應的解決方法。希望對大家能有所幫
    發表于 11-05 18:11 ?10.8w次閱讀

    labview與i2c通信的編程問題

    labview與i2c通信的編程問題,適合新手看看
    發表于 12-09 15:49 ?205次下載

    STM32F2通信接口I2C

    STM32F2通信接口I2C
    發表于 09-03 11:24 ?31次下載
    STM32F<b class='flag-5'>2</b>—<b class='flag-5'>通信</b>接口<b class='flag-5'>I2C</b>

    防盜門指紋門鎖失靈沒反應的解決方法

    指紋開不了鎖是怎么回事?指紋鎖沒反應怎么辦?防盜門指紋鎖失靈沒反應怎么解決?指紋門鎖是日常使用中比較常見的鎖具類型,通過手指輕點即可實現解鎖過程,十分輕松簡單,也解決了忘帶鑰匙的煩惱,但在日常使用中,由于使用環境、操作不當、使用
    發表于 05-19 16:22 ?7.3w次閱讀

    i2c通信的詳細講解

    I2C屬于串行通信,所有的數據以位為單位在SDA上串行傳輸
    發表于 11-24 14:09 ?1.9w次閱讀
    <b class='flag-5'>i2c</b><b class='flag-5'>通信</b>的詳細講解

    I2C通信的詳細講解

    I2C屬于串行通信,所有的數據以位為單位在SDA線上串行傳輸。
    的頭像 發表于 06-25 17:19 ?13.6w次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>通信</b>的詳細講解

    I2C總線的基本通信總結

    在電子設計開發中I2C大家已經很熟悉了,每一種電子產品小到電子開關,大到衛星通信都會利用的I2C總線。據統計I2C在電子產品中占據了93%的份額,幾乎任何一種電路都要使用。
    的頭像 發表于 08-26 14:08 ?1.8w次閱讀
    <b class='flag-5'>I2C</b>總線的基本<b class='flag-5'>通信</b>總結

    I2C”的那些坑

    ,核查設備的數據手冊,甚至發送和接收的每一條命令與數據都知道是什么意思,仍然無法解決問題,那該怎么辦呢? 本文主要針對 i2c 設備,講解如何解決 i2c 設備主機與從機直接無法正常數據交互
    發表于 11-06 10:05 ?8次下載
    “<b class='flag-5'>I2C</b>”的那些坑

    硬件I2C與模擬I2C

    硬件I2C對應芯片上的I2C外設,有相應I2C驅動電路,其所使用的I2C管腳也是專用的,因而效率要遠高于軟件模擬的I2C;一般也較為穩定,但
    發表于 12-28 19:14 ?81次下載
    硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>

    I2C通信協議:了解I2C Primer、 PMBus和SMBus

    I2C,即Inter-Integrated Circuit,是一種常用的串行通信協議,用于在器件之間——特別是兩個或兩個以上不同電路之間建立通信I2C Primer是最常用的
    的頭像 發表于 06-15 15:29 ?5755次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>通信</b>協議:了解<b class='flag-5'>I2C</b> Primer、 PMBus和SMBus

    I2C接口進入Busy狀態不能退出怎么辦

    電子發燒友網站提供《I2C接口進入Busy狀態不能退出怎么辦.pdf》資料免費下載
    發表于 08-02 10:03 ?3次下載
    <b class='flag-5'>I2C</b>接口進入Busy狀態不能退出<b class='flag-5'>怎么辦</b>
    主站蜘蛛池模板: 美女很黄很黄是免费的·无遮挡网站| 欧美成人免费夜夜黄啪啪| 日本人善交69xxx| 一级做a爱片特黄在线观看| 欧美淫| 亚洲免费福利视频| 免费在线播放视频| 男女交性高清视频无遮挡| 俄罗斯久久| 男人你懂的网站| xvideos国产| 手机看片免费永久在线观看| 亚洲一区免费看| 亚洲激情| 成人女人a毛片在线看| 2020狠狠操| 色偷偷免费| 黄色毛片免费看| 天天看天天爽天天摸天天添| 亚洲欧美日韩一区| 四虎影院国产| 国产一级特黄毛片| 88av免费观看| 色婷婷激情综合| 高清欧美一级在线观看| 热之国产| 亚洲午夜久久久精品影院视色 | 26uuu另类亚洲欧美日本一| 亚洲欧美国产视频| bt天堂资源在线官网bt| 亚洲午夜一区二区三区| 欧美福利片在线观看| 欧美一级看片a免费观看| 亚洲一区免费看| 久久精品男人影院| 亚洲1234区乱码| 一级黄色大全| 好吊操免费视频| 欧美黑人xxxxxxxxxx| 女人张开腿 让男人桶个爽 免费观看| 免费看大美女大黄大色|