起始信号:当SCL为高期间,SDA由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号。
停止信号:当SCL为高期间,SDA由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。
//产生IIC起始信号
void IIC_Start(void)
{
SDA_OUT(); //sda线输出
IIC_SDA=1; // 拉高数据线
IIC_SCL=1; // 拉高时钟线
delay_us(4); //延迟 ,延迟是有必要的,参照I2C协议写的
IIC_SDA=0; //START:when CLK is high,DATA change form high to low ,触发通讯
delay_us(4);
IIC_SCL=0; / / ?钳住I2C总线,准备发送或接收数据,方便数据线上的数据变化
}
//产生IIC停止信号
void IIC_Stop(void)
{
SDA_OUT();//sda线输出
IIC_SCL=0; // ?
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;//发送I2C总线结束信号
delay_us(4);
}
REF
https://zhuanlan.zhihu.com/p/338377414