利用单片机的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的时序不同???) |