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 从机发送完数据后,接收不到主机(接收到倒数第二个数据后)发送的停止条件的主要内容,如果未能解决你的问题,请参考以下文章