如何解决主机发送地址之后 从机没有发出ACK应答信号给主机

1,iic总线从机没有返回应答给主机

我用的一个带有iic接口电量计和我的单片机通讯,我用逻辑分析仪分析数据发现主机写一个字节数据后从机并没有返回一个ack给主机,导致我后面读取从机的数据时全部是ff,请问各位iic大神,我该怎么去查问题呢?

硬件上检查下iic设备有没有虚焊,总线有没有冲突,示波器点下scl和sda线有没有半高电平;
如果你的代码不保证是成熟的,建议示波器触发一下看看时序满不满足iic协议要求;
读出的数据是总线默认状态ff,说明设备没响应,最有可能:
地址不对;
时序不对;
速率不匹配

1、当从机不能响应从机地址时(例如它正忙于其他事而无法响应IIC总线的操作,或者这个地址没有对应的从机),在第9个SCL周期内SDA线没有拉低,即没有ACK信号。这时,主机发出一个P信号终止传输或者重新发出一个S信号开始新的传输。
2、如果从机接收器在传输过程中不能接收更多的数据时,它不会发出ACK信号。这样,主机就可以意识到这点,从而发出一个P信号终止传输或者重新发出一个S信号开始新的传输。
3、主机接收器在接收到最后一个字节后,也不会发出ACK信号。于是,从机发送器释放SDA线,以允许主机发出P信号结束传输

2,I2C通信,有时会出现主机收不到从机ACK响应的情况,这时SDA线也会被拉死(低电平),大家给支支招啊!

https://bbs.csdn.net/topics/300222638

是不是时序有问题啊,你把timeout设置大点看看,再找原因

确定I2C的几个寄存器设置没有问题?

抓一下I2C的时序看一下吧,主送的时序没有问题的话,没有应答很可能是从的问题。

3,对IIC总线时序的一点理解以及ACK和NACK(NAK)

https://blog.csdn.net/weixin_34357928/article/details/85618325

总结下,IIC通讯中,SDA 和 SCL 都是有主机控制的,从设备只是能够将SDA线拉低而已。对于SCL线,从机是没有任何能力去控制的。从机只能被动跟随SCL。

一句话:SCL是单向的,由master控制。而SDA是双向的,master可以控制,slaver也可以控制。

4,对I2C总线中ACK的理解(通俗易懂)

https://wenku.baidu.com/view/ee41bc881eb91a37f1115ce2.html

猜你喜欢

转载自blog.csdn.net/chenhuanqiangnihao/article/details/115000657
今日推荐