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

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

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

I2C子系統(tǒng)debug的常見問題

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:嵌入式Linux系統(tǒng)開 ? 2023-07-22 14:52 ? 次閱讀

常見問題

1、同一條 i2c bus 上所有的外設(shè)的 i2c addr 要不同

1)相同 address 注冊時沖突

[2.059184][xxx]i2c i2c-1:Failed to register i2c client 24c02 at 0x51(-16) 
[2.059189][xxx]i2c i2c-1:Can't create device at 0x51

對應(yīng)的錯誤碼是 -16

/kernel-5.10/include/uapi/asm-generic/errno-base.h

#define EPERM   1 /* Operation not permitted */
#define ENOENT   2 /* No such file or directory */
#define ESRCH   3 /* No such process */
#define EINTR   4 /* Interrupted system call */
#define EIO   5 /* I/O error */
#define ENXIO   6 /* No such device or address */
#define E2BIG   7 /* Argument list too long */
#define ENOEXEC   8 /* Exec format error */
#define EBADF   9 /* Bad file number */
#define ECHILD  10 /* No child processes */
#define EAGAIN  11 /* Try again */
#define ENOMEM  12 /* Out of memory */
#define EACCES  13 /* Permission denied */
#define EFAULT  14 /* Bad address */
#define ENOTBLK  15 /* Block device required */
#define EBUSY  16 /* Device or resource busy */
......

可以執(zhí)行 ls /sys/bus/i2c/devices 查看對應(yīng)的 i2c-1 下是否已經(jīng)有注冊相同的 address 的外設(shè)

若返回 -11,-EAGAIN。代表總線正忙,或無法申請到總線鎖。如果總線正忙,請 retry 等待,或查看是哪個 device 一直在發(fā)送。如果無法申請到總線鎖,請查看是否在中斷函數(shù)或原子上下文調(diào)用了 i2c_transfer。

2)隱藏的 i2c address,即外設(shè)存在多個 i2c addr 或外設(shè) HW bug,導(dǎo)致 i2c 通訊異常。

示例:eeprom 在 i2c-1 上注冊了 0x50 地址,而 type c 雖然注冊到 0x60 地址,但對 0x50 也能產(chǎn)生響應(yīng),type c 拉低了 SDA ,從而 timeout 。

debug 方法:

  1. 軟件上確認(rèn)數(shù)據(jù)及對應(yīng)的 driver 是否正確。
  2. 硬件上逐一去掉外設(shè),確認(rèn)是哪個外設(shè)導(dǎo)致。

2、示波器 ACK 的地方有毛刺

slave 在第 9 個 clk 產(chǎn)生 ACK 應(yīng)答后,換成 mater 端來控制時產(chǎn)生的毛刺。此毛刺不會影響 I2C 總線讀寫時序,無需處理。

即 slave 和 master 控制總線切換間隔,沒有人控制總線,帶來的毛刺。

**3、**半高電平

在外接上拉電阻的情況下,有 enable 內(nèi)部下拉電阻,導(dǎo)致總線上有半高電平。

4、總線上電平拉不到地。

  1. master 端發(fā)送數(shù)據(jù)時電平拉不到地,可以增大驅(qū)動電流或者上拉電阻。
  2. slave 端拉不到地,可以咨詢供應(yīng)商看是否能增大 slave 端驅(qū)動電流或者上拉電阻。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1452

    瀏覽量

    122250
  • DEBUG
    +關(guān)注

    關(guān)注

    3

    文章

    89

    瀏覽量

    19775
  • 系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    1002

    瀏覽量

    21219
收藏 人收藏

    評論

    相關(guān)推薦

    Linux內(nèi)核中I2C系統(tǒng)的設(shè)計思路

    [ 導(dǎo)讀] 本文通過閱讀內(nèi)核代碼,來梳理一下I2C子系統(tǒng)的整體視圖。在開發(fā)I2C設(shè)備驅(qū)動程序時,往往缺乏對于系統(tǒng)整體的認(rèn)識,沒有一個清晰的思路。所以從高層級來分析一下
    發(fā)表于 09-06 09:40 ?390次閱讀
    Linux內(nèi)核中<b class='flag-5'>I2C</b><b class='flag-5'>系統(tǒng)</b>的設(shè)計思路

    linux I2C子系統(tǒng)的相關(guān)資料分享

    文章目錄linux I2C子系統(tǒng)框架在設(shè)備樹中添加從設(shè)備信息,mpu5060I2C driver 程序的編寫mpu6050 I2C程序具體實現(xiàn)linux
    發(fā)表于 02-10 06:06

    i2c總線ppt(I2C總線器件應(yīng)用)

    I2C總線器件應(yīng)用第一節(jié) I2C總線器件應(yīng)用概述I2C總線工作原理I2C總線系統(tǒng)結(jié)構(gòu)I2C總線
    發(fā)表于 08-13 17:34 ?0次下載

    I2C Guid I2C指南

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

    i2c

    單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;
    發(fā)表于 05-17 11:09 ?35次下載

    Linux內(nèi)核中I2C子系統(tǒng)的整體視圖

    本文通過閱讀內(nèi)核代碼,來梳理一下I2C子系統(tǒng)的整體視圖。在開發(fā)I2C設(shè)備驅(qū)動程序時,往往缺乏對于系統(tǒng)整體的認(rèn)識,沒有一個清晰的思路。所以從高層級來分析一下
    的頭像 發(fā)表于 12-31 10:40 ?2084次閱讀
    Linux內(nèi)核中<b class='flag-5'>I2C</b><b class='flag-5'>子系統(tǒng)</b>的整體視圖

    linux I2C子系統(tǒng)(及相關(guān)程序設(shè)計MPU6050)

    文章目錄linux I2C子系統(tǒng)框架在設(shè)備樹中添加從設(shè)備信息,mpu5060I2C driver 程序的編寫mpu6050 I2C程序具體實現(xiàn)linux
    發(fā)表于 12-06 13:36 ?9次下載
    linux <b class='flag-5'>I2C</b><b class='flag-5'>子系統(tǒng)</b>(及相關(guān)程序設(shè)計MPU6050)

    嵌入式內(nèi)核及驅(qū)動開發(fā)-09IIC子系統(tǒng)框架使用(I2C協(xié)議和時序,I2C驅(qū)動框架,I2C從設(shè)備驅(qū)動開發(fā),MPU6050硬件連接

    文章目錄I2c協(xié)議和時序I2c介紹I2c硬件連接I2c總線的信號I2c總線寫時序I2c總線讀時序
    發(fā)表于 12-06 14:06 ?17次下載
    嵌入式內(nèi)核及驅(qū)動開發(fā)-09IIC<b class='flag-5'>子系統(tǒng)</b>框架使用(<b class='flag-5'>I2C</b>協(xié)議和時序,<b class='flag-5'>I2C</b>驅(qū)動框架,<b class='flag-5'>I2C</b>從設(shè)備驅(qū)動開發(fā),MPU6050硬件連接

    硬件I2C與模擬I2C

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

    可編程USB轉(zhuǎn) UART/I2C Wire常見問題及注意事項

    可編程USB轉(zhuǎn) UART/I2C /SMBusS/SPI/CAN/1 -Wire適配器USB2S 常見問題及注意事項
    的頭像 發(fā)表于 08-23 14:38 ?1336次閱讀

    I2C子系統(tǒng)ACK error

    在應(yīng)該收到 ACK 信號的時候沒有收到 ACK 信號,i2c controller 就會產(chǎn)生一個 ACK error 的中斷,告訴 i2cdriver 發(fā)生了 ACK error。通常
    的頭像 發(fā)表于 07-22 14:39 ?1560次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>子系統(tǒng)</b>ACK error

    I2C debug出現(xiàn)問題怎么解決

    RK 平臺 I2C debug 1、I2C 通信失敗,出現(xiàn) log: “timeout, ipd: 0x00, state: 1” 請檢查硬件上拉是否給電。 2、調(diào)用
    的頭像 發(fā)表于 07-22 15:00 ?3139次閱讀

    I2C子系統(tǒng)SW Architecture

    I2C SW Architecture 【driver 驅(qū)動層】由普通驅(qū)動工程師負(fù)責(zé),【i2c 核心層】由 Linux 提供,【i2c 核心層】以下由芯片原廠負(fù)責(zé)。 I2C
    的頭像 發(fā)表于 07-22 16:01 ?796次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>子系統(tǒng)</b>SW Architecture

    I2C子系統(tǒng)幾個主要的結(jié)構(gòu)體

    I2C Data Structure 我們要搞懂一個 Linux 子系統(tǒng),必須研究它的數(shù)據(jù)結(jié)構(gòu),搞懂每個結(jié)構(gòu)體存儲了什么東西,才能梳理清楚該子系統(tǒng)的架構(gòu)。 I2C
    的頭像 發(fā)表于 07-22 16:04 ?682次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>子系統(tǒng)</b>幾個主要的結(jié)構(gòu)體

    I2C轉(zhuǎn)UART子系統(tǒng)設(shè)計

    電子發(fā)燒友網(wǎng)站提供《I2C轉(zhuǎn)UART子系統(tǒng)設(shè)計.pdf》資料免費下載
    發(fā)表于 08-28 10:27 ?0次下載
    <b class='flag-5'>I2C</b>轉(zhuǎn)UART<b class='flag-5'>子系統(tǒng)</b>設(shè)計