RK 平臺(tái) I2C debug
1、I2C 通信失敗,出現(xiàn) log: “timeout, ipd: 0x00, state: 1”
請(qǐng)檢查硬件上拉是否給電。
2、調(diào)用 i2c_transfer 返回值為 -6?
返回值為 -6 表示為 NACK 錯(cuò)誤,即對(duì)方設(shè)備無應(yīng)答響應(yīng),這種情況一般為外設(shè)的問題,常見的有以下幾種情況:
- I2C 地址錯(cuò)誤,解決方法是測(cè)量 I2C 波形,確認(rèn)是否 I2C 設(shè)備地址錯(cuò)誤;
- I2C slave 設(shè)備不處于正常工作狀態(tài),比如未給電,錯(cuò)誤的上電時(shí)序等;
- 時(shí)序不符合 I2C slave 設(shè)備所要求也會(huì)產(chǎn)生 Nack 信號(hào)。
3、當(dāng)外設(shè)對(duì)于讀時(shí)序要求中間是 stop 信號(hào)不是 repeat start 信號(hào)的時(shí)候,該如何處理?
這時(shí)需要調(diào)用兩次 i2c_transfer, I2C read 拆分成兩次,修改如下:
static int i2c_read_bytes(struct i2c_client *client, u8 cmd, u8 *data, u8 data_len) {struct i2c_msg msgs[2];
int ret;
u8 *buffer;
buffer = kzalloc(data_len, GFP_KERNEL);
if (!buffer)
return -ENOMEM;
msgs[0].addr = client- >addr;
msgs[0].flags = client- >flags;
msgs[0].len = 1;
msgs[0].buf = &cmd;
ret = i2c_transfer(client- >adapter, msgs, 1);
if (ret < 0) {
dev_err(&client- >adapter- >dev, "i2c read failedn");
kfree(buffer);
return ret;
}
msgs[1].addr = client- >addr;
msgs[1].flags = client- >flags | I2C_M_RD;
msgs[1].len = data_len;
msgs[1].buf = buffer;
ret = i2c_transfer(client- >adapter, &msgs[1], 1);
if (ret < 0)
dev_err(&client- >adapter- >dev, "i2c read failedn");
else
memcpy(data, buffer, data_len);
kfree(buffer);
return ret;
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
通信
+關(guān)注
關(guān)注
18文章
6393瀏覽量
140073 -
I2C
+關(guān)注
關(guān)注
28文章
1556瀏覽量
131271 -
DEBUG
+關(guān)注
關(guān)注
3文章
95瀏覽量
21392
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
無法讀取I2C地址的調(diào)試案例
引言:調(diào)試I2C從器件的第一步就是嘗試去讀它的地址,如果無法讀取地址或者向其發(fā)送讀寫命令卻沒有收到ACK回饋,都說明與器件通訊失敗。常規(guī)發(fā)生無法讀取I2C地址的情況時(shí),第一懷疑點(diǎn)往往是硬件互聯(lián)出現(xiàn)問題,本節(jié)分享一個(gè)和軟件相關(guān)的調(diào)
i2c總線ppt(I2C總線器件應(yīng)用)
I2C總線器件應(yīng)用第一節(jié) I2C總線器件應(yīng)用概述I2C總線工作原理I2C總線系統(tǒng)結(jié)構(gòu)I2C總線系統(tǒng)結(jié)構(gòu)如圖7-1所示。其中,SCL是時(shí)鐘線,
發(fā)表于 08-13 17:34
?0次下載
I2C總線規(guī)范與I2C器件C51讀寫程序
I2C總線規(guī)范與I2C器件C51讀寫程序:本文簡(jiǎn)要介紹了I2C總線,并給出了I2C器件的C51讀
發(fā)表于 08-22 17:51
?95次下載
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總線的基本通信總結(jié)
公司在1980年開發(fā)的兩線式串行總線,至今已經(jīng)發(fā)展30多年的歷史了。古老的電子產(chǎn)品中就已經(jīng)在使用I2C總線了。I2C總線在所有總線中是最簡(jiǎn)單,最穩(wěn)定的一種,由于發(fā)展歷史久遠(yuǎn),所以I2C總線出現(xiàn)
硬件I2C與模擬I2C
硬件I2C對(duì)應(yīng)芯片上的I2C外設(shè),有相應(yīng)I2C驅(qū)動(dòng)電路,其所使用的I2C管腳也是專用的,因而效率要遠(yuǎn)高于軟件模擬的I2C;一般也較為穩(wěn)定,但
發(fā)表于 12-28 19:14
?82次下載
Linux ftrace工具抓 i2c trace
抓 i2c trace adb rootecho nop > /sys/ kernel/debug/tracing/current_tracer //清空以前的跟蹤信息 echo 1 > /sys
I2C傳輸發(fā)生timeout時(shí)
順序 log 中第一個(gè)發(fā)生 timeout 的 slave 有 power 控制和 reset 控制的 slave other slave 復(fù)現(xiàn)問題后,可以手動(dòng)將相應(yīng)外設(shè)去掉,確認(rèn)是哪個(gè)外設(shè)將 i2c bus 拉住,再與供應(yīng)商溝通,debug 一下該 IC 狀態(tài),理清拉
I2C子系統(tǒng)debug的常見問題
常見問題 1、同一條 i2c bus 上所有的外設(shè)的 i2c addr 要不同 1)相同 address 注冊(cè)時(shí)沖突 [ 2.059184 ][xxx]i2c i2c- 1 :Fail
如何解決I2C器件死鎖的問題?
如何解決I2C器件死鎖的問題? I2C總線是一種流行的串行通信協(xié)議,在許多嵌入式系統(tǒng)中使用。I2C可以連接多個(gè)從屬設(shè)備到一個(gè)主控設(shè)備上,簡(jiǎn)化了系統(tǒng)設(shè)計(jì)和管理。然而,當(dāng)I2C總線上的從屬
i2c采樣是上升沿嗎?
i2c采樣是上升沿嗎?? I2C采樣是指在I2C總線上對(duì)數(shù)據(jù)進(jìn)行采樣。在I2C總線上,數(shù)據(jù)的傳輸是通過2條線傳遞。一條是時(shí)鐘線(SCL),另
什么是I2C協(xié)議 I2C總線的控制邏輯
在實(shí)際使用過程中,I2C比較容易出現(xiàn)的一個(gè)問題就是死鎖 ,死鎖在I2C中主要表現(xiàn)為:I2C死鎖時(shí)表現(xiàn)為SCL為高,SDA一直為低。
發(fā)表于 03-12 09:17
?2545次閱讀
I2C總線故障排除技巧
I2C總線是一種廣泛使用的串行通信協(xié)議,它允許多個(gè)設(shè)備在兩條線上(數(shù)據(jù)線SDA和時(shí)鐘線SCL)進(jìn)行通信。由于其簡(jiǎn)單性和靈活性,I2C總線在嵌入式系統(tǒng)中非常流行。然而,當(dāng)I2C總線出現(xiàn)問題
I2C debug出現(xiàn)問題怎么解決
評(píng)論