STM32 I2C模块的的时钟延展功能 您所在的位置:网站首页 iic扩展怎么打开 STM32 I2C模块的的时钟延展功能

STM32 I2C模块的的时钟延展功能

2024-03-07 13:08| 来源: 网络整理| 查看: 265

时钟延展是从的一项功能,该功能可以使得从设备具有拉低主时钟的能力,以应对从设备写数效率低时让主机等待而不是继续往发时钟,进而接收到错误的数据。

之所以出现从设备写数效率低,源自于从设备可能比较老旧,工作的主频低于或远低于主设备,此时只要有时钟延展功能,就不用害怕主从无法通讯。

举例子:

从设备采用STM32F407IGT6芯片的I2C模块,其I2C模块默认开启时钟延展功能,用该设备与另外一个相同的芯片通讯,但其速率比从设备快。

通讯采用主发从手,主设备将通过识别自身TXE进行发数,接收方只能通过识别BTF来接收数据,因为主设备的主频快,发送速度快,若接收方通过识别RXNE进行收数则将导致漏掉很多数,BTF在接收一个数没读时又收到一个数就会拖住时钟,从而让主设备停下来等等从设备。

若 从发主收,从的发送效率低,而主的时钟在收到数以后就会不停地出,但从设备只要数据寄存器一空,然后移位寄存器里没东西,那BTF立马就起了,起了就把主的时钟拖住了,这样主就不会接收到无效的数据,等从反应过来了把数放进数据寄存器了那就继续通信。

上面是数据通信时,但在建立通讯时主发送地址,若主向做发送,主如何确认自己可以发数据了,若主做接收,从什么时候发送?

那么就有需要一个能够在确认建立通信后能够拖住时钟的信号,那就是ADDR,该位在时钟延展开启的情况下只有清除了才能继续通信。

该流程确保了建立通讯,通讯过程的信息准确性,但对于通讯的结束还有一个问题,如果主只接收两个数,我在什么地方置位STOP,在ADDR置位后设置STOP,这就只能接收一个数了,若在BTF置位设置主STOP和主ACK就会多收取一个数(因为要想产生STOP只能等从回复NACK,夺回控制权后),这个时候就多了个控制位POS,他可以让ADDR处清除的ACK进而产生的NACK在第二个数,而不是第一个数,这个时候STOP就产生在第二个数,主的BTF也是在这里置位,等STOP产生后主再读取这两个数。

如果接收2N个数也类似于上述流程,如果接收奇数个那么就在BTF置位后清除主ACK以及产生STOP,那么自然就接收奇数个了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有