常見問題
1、同一條 i2c bus 上所有的外設(shè)的 i2c addr 要不同
1)相同 address 注冊(cè)時(shí)沖突
[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
對(duì)應(yīng)的錯(cuò)誤碼是 -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 查看對(duì)應(yīng)的 i2c-1 下是否已經(jīng)有注冊(cè)相同的 address 的外設(shè)
若返回 -11,-EAGAIN。代表總線正忙,或無法申請(qǐng)到總線鎖。如果總線正忙,請(qǐng) retry 等待,或查看是哪個(gè) device 一直在發(fā)送。如果無法申請(qǐng)到總線鎖,請(qǐng)查看是否在中斷函數(shù)或原子上下文調(diào)用了 i2c_transfer。
2)隱藏的 i2c address,即外設(shè)存在多個(gè) i2c addr 或外設(shè) HW bug,導(dǎo)致 i2c 通訊異常。
示例:eeprom 在 i2c-1 上注冊(cè)了 0x50 地址,而 type c 雖然注冊(cè)到 0x60 地址,但對(duì) 0x50 也能產(chǎn)生響應(yīng),type c 拉低了 SDA ,從而 timeout 。
debug 方法:
- 軟件上確認(rèn)數(shù)據(jù)及對(duì)應(yīng)的 driver 是否正確。
- 硬件上逐一去掉外設(shè),確認(rèn)是哪個(gè)外設(shè)導(dǎo)致。
2、示波器 ACK 的地方有毛刺
slave 在第 9 個(gè) clk 產(chǎn)生 ACK 應(yīng)答后,換成 mater 端來控制時(shí)產(chǎn)生的毛刺。此毛刺不會(huì)影響 I2C 總線讀寫時(shí)序,無需處理。
即 slave 和 master 控制總線切換間隔,沒有人控制總線,帶來的毛刺。
**3、**半高電平
在外接上拉電阻的情況下,有 enable 內(nèi)部下拉電阻,導(dǎo)致總線上有半高電平。
4、總線上電平拉不到地。
- master 端發(fā)送數(shù)據(jù)時(shí)電平拉不到地,可以增大驅(qū)動(dòng)電流或者上拉電阻。
- slave 端拉不到地,可以咨詢供應(yīng)商看是否能增大 slave 端驅(qū)動(dòng)電流或者上拉電阻。
-
I2C
+關(guān)注
關(guān)注
28文章
1556瀏覽量
131243 -
DEBUG
+關(guān)注
關(guān)注
3文章
95瀏覽量
21382 -
系統(tǒng)
+關(guān)注
關(guān)注
1文章
1046瀏覽量
22318
發(fā)布評(píng)論請(qǐng)先 登錄
Linux內(nèi)核中I2C系統(tǒng)的設(shè)計(jì)思路
linux I2C子系統(tǒng)的相關(guān)資料分享
i2c總線ppt(I2C總線器件應(yīng)用)
I2C總線應(yīng)用系統(tǒng)設(shè)計(jì)運(yùn)用
Linux內(nèi)核中I2C子系統(tǒng)的整體視圖
linux I2C子系統(tǒng)(及相關(guān)程序設(shè)計(jì)MPU6050)
嵌入式內(nèi)核及驅(qū)動(dòng)開發(fā)-09IIC子系統(tǒng)框架使用(I2C協(xié)議和時(shí)序,I2C驅(qū)動(dòng)框架,I2C從設(shè)備驅(qū)動(dòng)開發(fā),MPU6050硬件連接
硬件I2C與模擬I2C
可編程USB轉(zhuǎn) UART/I2C Wire常見問題及注意事項(xiàng)
I2C子系統(tǒng)ACK error
I2C debug出現(xiàn)問題怎么解決
I2C子系統(tǒng)SW Architecture
I2C子系統(tǒng)幾個(gè)主要的結(jié)構(gòu)體
I2C轉(zhuǎn)UART子系統(tǒng)設(shè)計(jì)
I2C子系統(tǒng)debug的常見問題
評(píng)論