I2C的标准模式和快速模式的疑惑??
利用单片机的IO口模拟I2C(在标准模式下,速率100Kbit/s)的时候,其I2C启动代码的信号如下:
void Start_I2c()
{
SDA=1; /*发送起始条件的数据信号*/
_nop_();
SCL=1;
delay_5us();/*起始条件建立时间大于4.7us,延时*/SDA=0;/*发送起始信号*/
delay_5us();/* 起始条件锁定时间大于4μs*/SCL=0; /*钳住I2C总线,准备发送或接收数据 */
_nop_();
_nop_();
}
其中(在100KHz速率的条件下),在SCL高电平期间,SDA由 低 -->高必须保持大于4.7us, 在SCL由高跳到低后,SCL必须保持高电平大于4us才能由高-->低
现在我也是用单片机模拟I2C工作,但是通信的芯片的I2C总线上工作在400KHz的速率下的(芯片资料是这样写的:400KHz I2C serial interface),那么这样的话,I2C总线的时序,如总线启动时序,停止时序,发送数据和接受数据的时序都是需要变的吗?(与100KHz的时序不同???)
[解决办法]
400KHz I2C serial interface
一般这么写意思是最大支持400k的 I2C,而不是必须要求400K。因为I2C速率一般都是在100-400K之间的。
[解决办法]
这个不是绝对严格的要求
只是不超过这个速率,不太低于这个速率即可
[解决办法]
I2C是一种主从式协议,SCK是主机控制的(如果不考虑clock-stretching)。只要主机SCK不操过从机支持的速率就应该不会有问题。