在应该收到 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文章
1484浏览量
123625 -
系统
+关注
关注
1文章
1014浏览量
21332
发布评论请先 登录
相关推荐
评论