99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

無法讀取I2C地址的調(diào)試案例

CHANBAEK ? 來源:硬件系統(tǒng)架構(gòu)師 ? 作者: Timothy ? 2023-11-02 18:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

引言:調(diào)試I2C從器件的第一步就是嘗試去讀它的地址,如果無法讀取地址或者向其發(fā)送讀寫命令卻沒有收到ACK回饋,都說明與器件通訊失敗。常規(guī)發(fā)生無法讀取I2C地址的情況時,第一懷疑點往往是硬件互聯(lián)出現(xiàn)問題,本節(jié)分享一個和軟件相關(guān)的調(diào)試案例。

1.問題背景

一枚視頻轉(zhuǎn)換芯片的I2C連接前端MCU上,調(diào)試時發(fā)現(xiàn)I2C通訊失敗,同一總線上的另外兩個器件地址均正常。發(fā)送讀寫命令波形也沒有ACK反饋,檢查過硬件互聯(lián)和Reset配置,均沒有問題。

2.懷疑點和排除過程

總線器件過多

考慮到一個I2C上掛載了三個從器件,分支和節(jié)點過多,并且走線也不短,所以懷疑是從器件過多導(dǎo)致Cload過大,無法和遠(yuǎn)端通訊成功。于是摘掉和另外兩個器件的互聯(lián)電阻,再次嘗試,依然無法通訊,并且測量得到的波形質(zhì)量并不差,如圖1-所示,我們向地址0X8A發(fā)送命令,卻沒有ACK回饋,說明并不是總線負(fù)載電容問題。

圖片

圖1-1:向設(shè)備發(fā)送讀寫命令波形

復(fù)位操作

雖然上電后復(fù)位Reset就為高電平,但是嘗試在從器件啟動后再復(fù)位一次,再嘗試讀取I2C地址,依然無法讀到,側(cè)面說明和時序沒有關(guān)系。為了驗證無法通訊是不是器件本身的問題,將其與MCU斷開,直接飛線I2C通過盒子連接到上位機,發(fā)現(xiàn)可以讀到地址,并且讀寫寄存器均正常,如下圖1-2是邏輯分析儀抓取到的波形圖,有明顯的ACK標(biāo)志。

圖片

圖1-2:與上位機通訊抓取的讀寫波形

排除掉硬件互聯(lián)和引腳配置以及器件本身的問題,那么只有一個問題就是MCU端的I2C參數(shù)配置出現(xiàn)問題。

主器件I2C參數(shù)

那么主器件I2C涉及哪些參數(shù)呢,總線速度100KHz(標(biāo)準(zhǔn)),400KHz(快速),1MHz(超快速)、Data setup Time、Data hold Time等等這些參數(shù)可調(diào),如圖1-4抓取上位機和器件通訊成功的波形,測試的Data hold Time大概為560ns,遠(yuǎn)遠(yuǎn)大于圖1-5器件手冊中的10-250ns,說明手冊中的此參數(shù)標(biāo)注和實際不符,而MCU端I2C配置的是100ns,所以才通訊失敗。

圖片

圖1-3:與上位機通訊波形時間參數(shù)測量

圖片
圖1-4:與上位機通訊波形時間參數(shù)測量

圖片

圖1-5:器件手冊I2C時間參數(shù)

3.如何修正

如表1-5聯(lián)系原廠核對修改后的參數(shù),修改主機I2C設(shè)置的Data hold time即可。

圖片

圖1-6:更正后的時間參數(shù)

4.總結(jié)

對于支持不同通訊速率的I2C設(shè)備,高速率的往往可以兼容低速率的,比如1MHz-I2C的A器件,它可以接收來自100KHz、400KHz、1MHz的速率信息,但是如果與它互聯(lián)的B器件只支持400KHz,那么B只能接收A發(fā)送100KHz、400KHz的信息。而100KHz、400KHz、1MHz的時間參數(shù)都有差異,在調(diào)試時不僅速率要匹配,與速率相關(guān)的時間參數(shù)也必須修改以保持兼容,因為芯片里面的I2C收發(fā)器ADC轉(zhuǎn)換速率與頻率f息息相關(guān),而ADC轉(zhuǎn)換速率就決定著這些時間參數(shù)。

圖片

圖1-7:I2C主從機基本結(jié)構(gòu)

從圖1-8可以明顯看出,三種速率下的數(shù)據(jù)保持時間和數(shù)據(jù)設(shè)置時間均有明顯的差異,以上述參數(shù)為例,Data hold time實際為560ns,說明器件僅支持到快速模式,但實際設(shè)置為100ns,而器件并不能支持這么快的采樣速度,所以無法識別Bit位,因此僅僅保持SCK一致,通訊也會fail。

圖片

圖片

圖1-8:幾種I2C模式的時間參數(shù)

另外有的器件支持好幾種系統(tǒng)時鐘(Syetem Clock),這時候其I2C時間參數(shù)可能就以System Clcok為單位,而不是直觀的us/ms,如圖1-9所示:

圖片

圖1-9:和系統(tǒng)時間掛鉤的I2C參數(shù)

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

    關(guān)注

    146

    文章

    17984

    瀏覽量

    367217
  • 調(diào)試
    +關(guān)注

    關(guān)注

    7

    文章

    612

    瀏覽量

    34741
  • 通訊
    +關(guān)注

    關(guān)注

    9

    文章

    927

    瀏覽量

    35678
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2960

    瀏覽量

    89788
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1541

    瀏覽量

    127905
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    MM32F013x上實現(xiàn)I2C地址的功能應(yīng)用

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

    I2C地址跳變問題的調(diào)試案例

    引言:I2C作為使用最為廣泛的通訊接口,調(diào)試各類I2C器件,大家應(yīng)該都很輕車熟路。一般對于外掛電阻配置器件的I2C地址,例如電阻上拉之后,器
    的頭像 發(fā)表于 11-22 10:51 ?2695次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>地址</b>跳變問題的<b class='flag-5'>調(diào)試</b>案例

    I2C地址切換電路

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

    arduino讀取I2C總線上連接設(shè)備的地址

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

    mpu6050對應(yīng)i2c地址是什么_如何讀取數(shù)據(jù)

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

    如何將I2C地址左移1位

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

    I2C/SMBus地址轉(zhuǎn)換器

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

    嵌入式linux應(yīng)用讀寫i2c示例

    long arg);cmd有I2C_SLAVE,I2C_SLAVE_FORCE,I2C_TENBIT,I2C_SET_SPEED幾個選項;I2C
    發(fā)表于 11-01 16:57 ?12次下載
    嵌入式linux應(yīng)用讀寫<b class='flag-5'>i2c</b>示例

    I2C總線讀取MPU6050

    基于MSP430處理器的 I2C總線讀取MPU6050傳感器數(shù)據(jù)
    發(fā)表于 12-06 13:36 ?15次下載
    <b class='flag-5'>I2C</b>總線<b class='flag-5'>讀取</b>MPU6050

    I2C掃描儀之如何在Arduino上查找I2C地址

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

    如何提高I2C調(diào)試效率?

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

    Android Things I2C地址掃描器

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

    I2CI3C的區(qū)別有哪些

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

    i2c采樣是上升沿嗎?

    i2c采樣是上升沿嗎?? I2C采樣是指在I2C總線上對數(shù)據(jù)進(jìn)行采樣。在I2C總線上,數(shù)據(jù)的傳輸是通過2條線傳遞。一條是時鐘線(SCL),另
    的頭像 發(fā)表于 09-19 17:16 ?3703次閱讀

    I2C總線設(shè)備地址設(shè)置方法

    I2C總線是一種廣泛使用的串行通信協(xié)議,它允許多個設(shè)備在兩條線上(數(shù)據(jù)線SDA和時鐘線SCL)進(jìn)行通信。每個設(shè)備都有一個唯一的地址,以確保數(shù)據(jù)能夠正確地發(fā)送到目標(biāo)設(shè)備。 I2C地址概述
    的頭像 發(fā)表于 01-17 15:17 ?4253次閱讀