I2C从机 - 时钟延长

时间:2014-07-21 10:00:13

标签: stm32 i2c

你们知道如何启用I2C slave的时钟延长吗?

将这个函数I2C_StretchClockCmd(I2C2, ENABLE)放在I2C的初始化中是否足够?

时钟拉伸如何正常工作?

2 个答案:

答案 0 :(得分:12)

对我来说似乎是的,这就够了。这是一个背景:

时钟生成

SCL时钟始终由I2C主设备生成。该规范要求时钟信号的低相位和高相位的最小周期。因此,实际时钟速率可能低于标称时钟速率,例如,在I2C总线中由于高电容而具有较大的上升时间。

时钟拉伸

I2C器件可以通过拉伸SCL来降低通信速度:在SCL低电平阶段,总线上的任何I2C器件都可以另外按住SCL以防止它再次上升,使它们降低SCL时钟速率或停止I2C通信一段时间。这也称为时钟同步。

注意:I2C规范没有为时钟延长指定任何超时条件,即任何设备都可以按照SCL的长度来保持SCL。

在I2C通信中,主设备确定时钟速度。与RS232不同,I2C总线提供显式时钟信号,使主机和从机无法完全同步到预定义的波特率。

但是,有些情况下,I2C从设备无法与主设备提供的时钟速度协作,需要稍微减速。这是通过称为时钟拉伸的机制完成的。

如果需要降低总线速度,则允许I2C从器件按住时钟。另一方面,主机需要在将时钟信号释放到高电平状态后读回时钟信号,并等到线路实际变为高电平。

I2C时钟速度如何影响I2C从器件引入的时钟延长持续时间?

时钟延长是I2C从器件在每次I2C数据传输的第9个时钟(在ACK阶段之前)将SCL线拉低的现象。当CPU处理I2C中断时,时钟被拉低,以评估地址或处理从主机接收的数据,或在主机从从机读取数据时准备下一个数据。

时钟拉低的时间取决于CPU处理中断所需的时间,因此取决于CPU速度而不是I2C时钟速度。

答案 1 :(得分:0)

为什么我们需要拉伸时钟?在第9位时钟确认从机时可以实现同样的目的。

通过保持数据线直到从属内部进程结束来实现目标。

相关问题