IIC接口调试总结--协议理解
IIC协议在低速通信中用处较多,特别是一些光模块的接口和一些电源模块接口(使用的是SMBus 类似IIC),接口简单只需要一个时钟SCL和一个数据SDA;IIC协议中约定了通信的起始、结束、数据的建立保持时间、应答ACK和时钟拉伸clock stretching等内容;
IIC 与PMBus时序:
SFF-8636光模块中IIC时序参数如下:
PMBus时序参数如下:
时钟拉伸:
在IIC通信中,主设备决定了时钟速率。IC总线提供了时钟clk信号来使主从设备同步并达到预定的波特率;
有一些情况下IIC从设备不能及时响应主设备提供的时钟速率,需要把时钟降低一些;这就需要通过时钟拉伸这种机制来实现;
若从设备需要降低时钟速率可以把时钟拉低。对应的主设备在释放时钟到高祖态时还需要检测时钟信号的电平是否被从设备拉为低电平;若是低电平则需要等待并计时,当时钟信号被从设备释放或者计时超时计数器停止,通过这种时钟拉伸机制达到了主从同步。
在高速率模式下,时钟拉伸发生在ACK bit(第九个时钟)之后和下个字节的第一个bit之前;
上板调试:
之前没有关注时钟拉伸,认为IIC主设备输出SCL和SDA就可以和IIC从设备通信了,使用100KHz频率和光模块通信中也是这样做的,通信也没有异常,最近调试电源芯片UCD90120时发现通信异常,即使降低速率到50KHz也会出现异常,示波器截图如下,时钟信号出现了半高电平!