I2C子系统ACK error

描述

在应该收到 ACK 信号的时候没有收到 ACK 信号,i2c controller 就会产生一个 ACK error 的中断,告诉 i2cdriver 发生了 ACK error。通常情况是 slave 本身的问题。

I2C

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 写

I2C

主机向从机发送数据时,最后一个 Byte数据时,从机可能应答也可能非应答,但不怎样主机都可以产生停止条件,如果主机在向从机发送数据(甚至包括从机地址在内)时检测到从机非应答,则会及时停止传输。

I2C 读

I2C

主机从从机接收数据时,最后一个 Byte 数据时,主机不回应该从机,即 NACK.

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分