吴忠躺衫网络科技有限公司

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

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

3天內不再提示

I2C地址跳變問題的調試案例

CHANBAEK ? 來源:硬件系統架構師 ? 作者:Timothy ? 2023-11-22 10:51 ? 次閱讀

引言:I2C作為使用最為廣泛的通訊接口,調試各類I2C器件,大家應該都很輕車熟路。一般對于外掛電阻配置器件的I2C地址,例如電阻上拉之后,器件的地址就會固定下來不再變動,但是今天給大家分享一個自己的調試案例,即I2C地址跳變問題。

1.問題背景

該器件對外一起只有四個引腳:SDA、SCL、INT、RESET,其中對外輸出中斷引腳INT兼具器件地址設定功能,將INT上拉至VDDIO,地址為0X8A,INT無上拉,地址為0X88。

圖片

圖3-1:控制線部分原理圖

在上電啟動之后,連續運行Linux地址查詢命令,如圖3-2所示,查詢地址為0X45(7位地址,按8位即0X8A)。

圖片

圖3-2:讀取地址為0X45

斷電再重啟,然后運行查詢命令,如圖3-3所示,會偶發檢測到地址跳變為0X44(0X88)。

圖片

圖3-3:重新下電上電后讀取地址

此時正確地址應該是0X45,所以偶發檢測地址跳變為0X44說明器件上電初始對INT處的配置發生了誤判。

2.懷疑點和排除過程

前端設備的高低電平影響

因為INT引腳是兼具I2C地址配置,如果INT存在初始拉低等情況,就會影響器件判斷地址,在Application里面講到:TP2912A通過在復位期間捆扎INT引腳來提供兩個設備地址,0x88或0x8A。引腳上的上拉電阻器使設備地址為0x8A,如果電阻器不存在,則內部下拉電阻器的設備地址將為0x88。在選擇設備地址時要注意,在判斷復位期間,一些前端芯片可以強制驅動INT信號的邏輯低或高。在這種情況下,設備地址的檢測可能是錯誤的,因為前端芯片驅動的邏輯電平與上拉或下拉電阻器無關,如果無法避免這些情況,則如果設備地址選擇正確,則可以通過讀取寄存器0xfe中的設備ID來實現軟件工作。

圖片

圖3-4:推薦INT Mode下讀取地址程序

最開始測量INT點的電平,大約1.4V,所以其實INT引腳一直是高電平沒有問題,然后斷開INT與SOC的連接,繼續上下電讀地址,依然有I2C地址跳變問題存在,并且斷開后單獨測量SOC端的INT,為低電平0V,說明SOC沒有配置這個引腳,沒有使用到INT功能(軟件端也確認過),所以排除前端設備影響INT的配置。

引腳耦合

引腳耦合這個理論上存在,但是實際中很難遇到,并且高達1.8V和0V的壓差,耦合能量達到這么多幾乎不可能,所以理論上排除引腳耦合問題。

上拉閾值臨界

手冊上的VDDIO是3.3V,并沒有標注1.8V可以使用,使用1.8V是FAE的建議,也為了和前端SOC電平適配,所以是否1.8V處于一個臨界上拉閾值導致器件判斷失真。為了驗證這一疑點,將INT上拉電阻取消,此時INT處于懸空(同時斷開前級),地址應該固定為0X44,但依然存在地址跳變,說明也不是上拉閾值臨界,注意這里的INT懸空并不等同于下拉到GND。

時序排查

考慮到是上下電過程中觸發地址誤判,不斷電情況下地址不會變動,所以會不會存在這樣一種時序情況:在VDDIO還在上電的過程中,器件就開始讀INT的配置,此時電壓臨界。測量器件上電時序如下圖3-5 ,其中C1是DVDD(1.2V),C2是RESET,C3是1.8V,C4是XTI(27MHz晶振輸入)。

圖片

圖3-5:關鍵信號上電時序

從圖中可以看到,在XTI還在起振時,DVDD還處于上升階段,此時芯片邏輯核心可能還沒有開始工作,邏輯核心影響了器件讀I2C地址。Application里面也提到了這一時序要求:由于POC(上電序列)功能在上電/斷電事件期間在芯片內部操作,因此對每個電源樹的上電和斷電序列沒有要求,復位應在晶體振蕩器穩定后至少10個周期保持低電平,如圖3-6所示:

圖片

圖3-6:Application推薦Reset操作

為了驗證這一猜想,首先觸發一次0X44地址,然后不斷電,給RESET一個復位拉低,然后再讀地址,看地址是否會恢復到0X45,當然這里也可以使用手動復位,將RESET引腳手動接一下GND。

圖片

圖3-7:不斷電驗證地址恢復

如圖3-7所示,觸發之后0X44變為0X45,驗證有效,說明和猜想一致,最終確定是時序的問題。

3.如何修正

修正也很簡單,如圖3-8所示,前端SOC在上電之后10ms將Reset拉低,拉低時間≥10us。

圖片

圖3-8:復位時間預估

4.總結

I2C地址跳變的問題比較難遇到,因為大多數器件是獨立配置地址,如果是GND配置,自然不會考慮時序問題,但如果是上拉配置,就需要注意電壓時序問題,在系統起來之前,配置電壓就應該完全到位,如果有類似的情況或者電壓無法調整,此時Reset不失為一種可靠的方法,不斷電的情況下復位系統邏輯,器件就會重新去讀地址然后寫入寄存器,另外這一步需要放置主程序運行之前,否側運行中地址變化會發生通訊中斷。

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

    關注

    7

    文章

    589

    瀏覽量

    34062
  • 引腳
    +關注

    關注

    16

    文章

    1220

    瀏覽量

    50898
  • 通訊接口
    +關注

    關注

    2

    文章

    80

    瀏覽量

    16239
  • I2C器件
    +關注

    關注

    0

    文章

    2

    瀏覽量

    6584
收藏 人收藏

    評論

    相關推薦

    MM32F013x上實現I2C地址的功能應用

    I2C中,通信是借助設備地址尋址實現的,大致可以分為兩類:一對多、多對多通信。在多主機通信時,從機如果想接收多個主機的數據,就需要使用到從機多地址的功能。 本文是針對在MM32F013x上實現
    發表于 01-05 11:43 ?2144次閱讀

    無法讀取I2C地址調試案例

    引言:調試I2C從器件的第一步就是嘗試去讀它的地址,如果無法讀取地址或者向其發送讀寫命令卻沒有收到ACK回饋,都說明與器件通訊失敗。常規發生無法讀取
    的頭像 發表于 11-02 18:24 ?2352次閱讀
    無法讀取<b class='flag-5'>I2C</b><b class='flag-5'>地址</b>的<b class='flag-5'>調試</b>案例

    I2C地址切換電路

    I2C地址切換電路
    發表于 02-22 11:15 ?1534次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>地址</b>切換電路

    arduino讀取I2C總線上連接設備的地址

    這兩天研究了一下I2C總線,發現有好多I2C設備的地址并不知道,當然有的可以在網上查的到,但是如果遇到用過的I2C器件,設備地址被修改過,那
    發表于 11-23 16:58 ?11.2w次閱讀

    mpu6050對應i2c地址是什么_如何讀取數據

    本文主要介紹了mpu6050對應i2c地址是什么,并通過stm32的硬件讀取mpu6050的數據。MPU6050 的 I2C 地址是 0xD0H(11010000B)。
    發表于 12-11 16:04 ?2.5w次閱讀
    mpu6050對應<b class='flag-5'>i2c</b><b class='flag-5'>地址</b>是什么_如何讀取數據

    如何將I2C地址左移1位

      I2C總線讀寫中,新人會比較困惑,為什么I2C地址要左移1位?這是i2c協議決定的,i2c地址
    發表于 08-05 17:34 ?4次下載
    如何將<b class='flag-5'>I2C</b>從<b class='flag-5'>地址</b>左移1位

    I2C/SMBus地址轉換器

    I2C/SMBus地址轉換器
    發表于 04-20 10:44 ?5次下載
    <b class='flag-5'>I2C</b>/SMBus<b class='flag-5'>地址</b>轉換器

    嵌入式linux應用讀寫i2c示例

    long arg);cmd有I2C_SLAVE,I2C_SLAVE_FORCE,I2C_TENBIT,I2C_SET_SPEED幾個選項;I2C
    發表于 11-01 16:57 ?12次下載
    嵌入式linux應用讀寫<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掃描儀之如何在Arduino上查找I2C地址

    電子發燒友網站提供《I2C掃描儀之如何在Arduino上查找I2C地址.zip》資料免費下載
    發表于 01-31 10:19 ?2次下載
    <b class='flag-5'>I2C</b>掃描儀之如何在Arduino上查找<b class='flag-5'>I2C</b><b class='flag-5'>地址</b>

    如何提高I2C調試效率?

    一般情況下,我們想要調試這類 I2C 器件,都需要先找一塊主控 MCU 板卡,用杜邦線將 I2C 器件連接到板卡上,然后編寫 MCU 代碼,需包含 I2C 軟件驅動以及測試用例,最后將
    發表于 06-08 13:00 ?1501次閱讀
    如何提高<b class='flag-5'>I2C</b><b class='flag-5'>調試</b>效率?

    Android Things I2C地址掃描器

    電子發燒友網站提供《Android Things I2C地址掃描器.zip》資料免費下載
    發表于 06-13 17:02 ?0次下載
    Android Things <b class='flag-5'>I2C</b><b class='flag-5'>地址</b>掃描器

    I2C debug出現問題怎么解決

    _transfer 返回值為 -6? 返回值為 -6 表示為 NACK 錯誤,即對方設備無應答響應,這種情況一般為外設的問題,常見的有以下幾種情況: I2C 地址錯誤,解決方法是測量 I2C 波形,確認是否
    的頭像 發表于 07-22 15:00 ?3932次閱讀

    I2CI3C的區別有哪些

    線。 I2C 傳輸速度最高 3.4MHz,I3C 可以 12.5MHz +。 I3C 向下兼容 I2C,但不兼容 10bit 的 I2C
    的頭像 發表于 07-22 16:20 ?7293次閱讀
    <b class='flag-5'>I2C</b>和<b class='flag-5'>I3C</b>的區別有哪些

    I2C總線設備地址設置方法

    I2C總線是一種廣泛使用的串行通信協議,它允許多個設備在兩條線上(數據線SDA和時鐘線SCL)進行通信。每個設備都有一個唯一的地址,以確保數據能夠正確地發送到目標設備。 I2C地址概述
    的頭像 發表于 01-17 15:17 ?292次閱讀
    百家乐官网预测神法| 娱乐城百家乐论坛| 大发888存款| 百家乐官网投注技巧球讯网| 百家乐自动算牌软件| 优博在线娱乐| 百家乐软件官方| tt娱乐城clega| 女神百家乐官网的玩法技巧和规则 | 百家乐官网游戏玩法技巧| 澳门百家乐赌技术| 威尼斯人娱乐城注册送彩金| 12倍百家乐官网秘籍| 百家乐公式软件| 兴城市| 百家乐路单免费下载| 网上百家乐公司| 真人百家乐官网平台下载| 成都百家乐的玩法技巧和规则| 百家乐官网网上投注网站| 百家乐开庄几率| 乐九百家乐官网娱乐城| 迪威百家乐娱乐场| 百家乐官网路单破解器| 做生意摆放风水| bet365足球| 百家乐官网庄最高连开几把 | 24山玄空飞星排盘图| 壹贰博备用网址| 百家乐最长的闲| 银河国际娱乐| 百家乐对打反水| 北碚区| 百家乐的奥秘| 百家乐官网最大的赌局| 威尼斯人娱乐城好玩吗| 百家乐官网牌具公司| 顶级赌场娱乐城| 百家乐节目视频| 根河市| 斗地主百家乐的玩法技巧和规则|