在應該收到 ACK 信號的時候沒有收到 ACK 信號,i2c controller 就會產生一個 ACK error 的中斷,告訴 i2cdriver 發生了 ACK error。通常情況是 slave 本身的問題。
1、檢查 device 是否存在,i2c bus number 和 device address 是否正確。示例如下:i2c number 為6,addr 為 0x28:
[31.092951][xxx]i2c i2c-6:addr:0x28,ACK error
2、檢查 device 是否已經上電使能,以及正確的 init
3、檢查 i2c speed 是否適配,speed 大于 device 支持的 max speed 也會造成 ACKError。降低速度,如果仍然可以工作的話就說明是 clk 相關問題。
4、檢查 i2c device 信號電平是否與 AP 匹配。
5、GPIO check 以下幾個部分
GPIO 電流驅動能力
GPIO 工作模式是否是 I2C 模式
GPIO 是否有內部上拉電阻
GPIO 默認電平狀態
從 i2c spec 看,如下情況 NACK
I2C 寫
主機向從機發送數據時,最后一個 Byte數據時,從機可能應答也可能非應答,但不怎樣主機都可以產生停止條件,如果主機在向從機發送數據(甚至包括從機地址在內)時檢測到從機非應答,則會及時停止傳輸。
I2C 讀
主機從從機接收數據時,最后一個 Byte 數據時,主機不回應該從機,即 NACK.
-
I2C
+關注
關注
28文章
1490瀏覽量
124025 -
系統
+關注
關注
1文章
1017瀏覽量
21376
發布評論請先 登錄
相關推薦
評論