在应该收到 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文章
1483浏览量
123501 -
系统
+关注
关注
1文章
1012浏览量
21327
发布评论请先 登录
相关推荐
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)
评论