在應該收到 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文章
1495瀏覽量
124591 -
系統
+關注
關注
1文章
1019瀏覽量
21431
發布評論請先 登錄
相關推薦
Linux內核中I2C系統的設計思路
![Linux內核中<b class='flag-5'>I2C</b><b class='flag-5'>系統</b>的設計思路](https://file1.elecfans.com/web2/M00/A3/2D/wKgaomT32W2ADMQNAAAS2dJy9LU699.png)
linux I2C子系統的相關資料分享
I2C Guid I2C指南
linux I2C子系統(及相關程序設計MPU6050)
![linux <b class='flag-5'>I2C</b><b class='flag-5'>子系統</b>(及相關程序設計MPU6050)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
嵌入式內核及驅動開發-09IIC子系統框架使用(I2C協議和時序,I2C驅動框架,I2C從設備驅動開發,MPU6050硬件連接
![嵌入式內核及驅動開發-09IIC<b class='flag-5'>子系統</b>框架使用(<b class='flag-5'>I2C</b>協議和時序,<b class='flag-5'>I2C</b>驅動框架,<b class='flag-5'>I2C</b>從設備驅動開發,MPU6050硬件連接](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
I2C接口配置ES7243錄音芯片,MCU(STM32)收不到I2C ACK的問題
![<b class='flag-5'>I2C</b>接口配置ES7243錄音芯片,MCU(STM32)收不到<b class='flag-5'>I2C</b> <b class='flag-5'>ACK</b>的問題](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
硬件I2C與模擬I2C
![硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
I2C子系統debug的常見問題
I2C子系統SW Architecture
![<b class='flag-5'>I2C</b><b class='flag-5'>子系統</b>SW Architecture](https://file1.elecfans.com/web2/M00/8D/81/wKgaomS7jI6AcVIDAAFQF5uK5G8249.jpg)
評論