I2C 从机发送完数据后,接收不到主机(接收到倒数第二个数据后)发送的停止条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了I2C 从机发送完数据后,接收不到主机(接收到倒数第二个数据后)发送的停止条件相关的知识,希望对你有一定的参考价值。

STM32调试I2C。主机接收数据,从机发送数据。主机在接收到倒数第二个数据后发送NA和P,但是从机接收不到P(EV中断进不去),查看寄存器发现AF也未清零(ER中断clear清了无效)。求助啊!

你的时序太死板,不能判断从机是否释放总线(从机空闲)。从机可能在发送数据时需要提前准备数据,并可能校验CRC,这个时间可能会比较长,超出了设定的频率。一般人写的程序非常死板,不考虑从机的性能和移植性,加入的时序延时可能这个从机可以正常通讯,换一个从机就傻眼了。
再说,收不到P可以直接按NACK做算法,直接结束这次通讯,返回初始状态,不会有任何问题
参考技术A 可以查一下例程,接收2个和以下字节数据的情况需要注意读取SR2和SR1的次序。追问

在线调试看从机的AF已经清零了,就是P无法中断。可是SDA 和SCL都处于高电平,说明从机已经将SDA线释放了啊,为何没有P中断呢?

追答

停止条件是在倒数第二个字节接受完后发送。

参考技术B 你的发送与接收的时序肯定有问题的,查一下,,还有硬件也有可能..追问

时序应该是没有问题的。示波器看,当发送接收玩最后一个数据后,SDA 和SCL都处于高电平。但从机就是进不了P中断,主机也无法继续下一次的通信

追答

接收完最后一位数据后,从机进入中断干麻呀?就按I2C的协议进行收发数据就行了,,收发数据不用进中断的呀..

以上是关于I2C 从机发送完数据后,接收不到主机(接收到倒数第二个数据后)发送的停止条件的主要内容,如果未能解决你的问题,请参考以下文章

驱动开发之I2C总线

STM32IIC接收到的数据都是0x40怎么办

STM32通信硬件 I2C

单片机的SPI通信怎么用

STC单片机 SPI通讯,主机不能从从机读取正确的数

由于用mpu6050模块,所以要用上i2c通信原理。