RK 平臺 I2C debug
1、I2C 通信失敗,出現 log: “timeout, ipd: 0x00, state: 1”
請檢查硬件上拉是否給電。
2、調用 i2c_transfer 返回值為 -6?
返回值為 -6 表示為 NACK 錯誤,即對方設備無應答響應,這種情況一般為外設的問題,常見的有以下幾種情況:
- I2C 地址錯誤,解決方法是測量 I2C 波形,確認是否 I2C 設備地址錯誤;
- I2C slave 設備不處于正常工作狀態,比如未給電,錯誤的上電時序等;
- 時序不符合 I2C slave 設備所要求也會產生 Nack 信號。
3、當外設對于讀時序要求中間是 stop 信號不是 repeat start 信號的時候,該如何處理?
這時需要調用兩次 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;
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
通信
+關注
關注
18文章
6041瀏覽量
136124 -
I2C
+關注
關注
28文章
1490瀏覽量
123983 -
DEBUG
+關注
關注
3文章
94瀏覽量
19935
發布評論請先 登錄
相關推薦
無法讀取I2C地址的調試案例
引言:調試I2C從器件的第一步就是嘗試去讀它的地址,如果無法讀取地址或者向其發送讀寫命令卻沒有收到ACK回饋,都說明與器件通訊失敗。常規發生無法讀取I2C地址的情況時,第一懷疑點往往是硬件互聯出現問題,本節分享一個和軟件相關的調
用STM8S207硬件I2C調試用輪詢的方式,一旦加入中斷,I2C的時序就出現了問題,為什么?
用STM8S207 硬件I2C調試用輪詢的方式發現如果不加入其它中斷可以正常運行,一旦加入中斷,I2C的時序就出現了問題,比如用定時器如果設置成1MS定時每次都是錯誤的,定時100MS基本還是可以正常運行不過偶爾也會
發表于 04-19 07:49
i2c總線ppt(I2C總線器件應用)
I2C總線器件應用第一節 I2C總線器件應用概述I2C總線工作原理I2C總線系統結構I2C總線系統結構如圖7-1所示。其中,SCL是時鐘線,
發表于 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
發表于 04-23 13:55
?36次下載
I2C總線的基本通信總結
公司在1980年開發的兩線式串行總線,至今已經發展30多年的歷史了。古老的電子產品中就已經在使用I2C總線了。I2C總線在所有總線中是最簡單,最穩定的一種,由于發展歷史久遠,所以I2C總線出現
硬件I2C與模擬I2C
硬件I2C對應芯片上的I2C外設,有相應I2C驅動電路,其所使用的I2C管腳也是專用的,因而效率要遠高于軟件模擬的I2C;一般也較為穩定,但
發表于 12-28 19:14
?81次下載
Linux ftrace工具抓 i2c trace
抓 i2c trace adb rootecho nop > /sys/ kernel/debug/tracing/current_tracer //清空以前的跟蹤信息 echo 1 > /sys
I2C傳輸發生timeout時
順序 log 中第一個發生 timeout 的 slave 有 power 控制和 reset 控制的 slave other slave 復現問題后,可以手動將相應外設去掉,確認是哪個外設將 i2c bus 拉住,再與供應商溝通,debug 一下該 IC 狀態,理清拉
I2C子系統debug的常見問題
常見問題 1、同一條 i2c bus 上所有的外設的 i2c addr 要不同 1)相同 address 注冊時沖突 [ 2.059184 ][xxx]i2c i2c- 1 :Fail
如何解決I2C器件死鎖的問題?
如何解決I2C器件死鎖的問題? I2C總線是一種流行的串行通信協議,在許多嵌入式系統中使用。I2C可以連接多個從屬設備到一個主控設備上,簡化了系統設計和管理。然而,當I2C總線上的從屬
i2c采樣是上升沿嗎?
i2c采樣是上升沿嗎?? I2C采樣是指在I2C總線上對數據進行采樣。在I2C總線上,數據的傳輸是通過2條線傳遞。一條是時鐘線(SCL),另
什么是I2C協議 I2C總線的控制邏輯
在實際使用過程中,I2C比較容易出現的一個問題就是死鎖 ,死鎖在I2C中主要表現為:I2C死鎖時表現為SCL為高,SDA一直為低。
發表于 03-12 09:17
?1096次閱讀
評論