对于双向传输操作,SDA 及SCL 引脚必须配置成开漏模式,形成逻辑线与功能:总线上当有一个器件输出0,总线上就是0电平,所有器件全输出1,总线上才是高电平,需要通过外接上拉电阻把电平拉高。ML51 在设置I2CEN使能I2C功能之前,必须把SCL,SDA的输出锁存在逻辑1的状态。
I2C 空闲时,两条线都为高。这时任一设备都可以做为主机发个起始位 START 开始数据传输,在停止位 STOP 出现之前,总线被认为处于忙状态。主机产生串行时钟脉冲以及起始位和停止位。如果总线上没有START起始信号,则所有总线设备被认为未被寻址从机,硬件自动匹配自己的从机地址或广播呼叫地址,(广播地址可由 GC (I2CnADDRx.0)使能或禁止.)。若地址匹配,就产生中断。
I2C总线上传输的每个字节都包含8个数据位(MSB优先)和一个应答位,共9位。但每次传输的字节个数没有明确界定(起始位 START 和停止位 STOP之间的字节个数) ,但每个字节都应有一个应答位。主机产生8个时钟脉冲,以传输8位数据。在第8个时钟SCL下沿后,由SDA脚输出数据后,SDA转为输入模式在第9个时钟脉冲以读取第9位应答位。在第9个时钟脉冲后,数据接收端若没准备好接收下一个字节,可以拉住时钟线保持低,让传输挂起。接收端释放时钟线SCL以后,传输继续。
|