接收地址包(SCLSM=0)
当SCLSM是0,I2C从机延伸SCL依据下图。当I2C从机是正确地配置,它将等待开始状态被检测。当一个开始状
态被检测,后继的地址包将被接收并且被地址匹配逻辑检测。如果接收到的地址不匹配,这个包将拒绝并且
I2C从机等待一个新的开始状态。当一个开始状态及可用的地址包被检测出I2C从机在中断标志寄存器地址匹
配比特(INTFLAG.AMATCH)被设置。SCL将被延伸直到I2C从机清除INTFLAG.AMATCH。因为I2C从机保持时钟通过
强制SCL为低,软件给予足够长的时间响应地址。
传输的方向的检测是通过读状态寄存器读/写方向比特(STATUS.DIR),并且比特将被更新当有效的地址包被接
收。
如果在状态寄存器(STATUS.COLL)中的传输冲突比特被设置,这指示了最后包到I2C从机的有一个包冲突。一
个冲突导致SDA和SCL线被释放,没有对软件有任何声明。接下来AMATCH中断是,由于,前一个包冲突的指示
。冲突遵守SMBus地址解决方案(ARP).
在地址包被从I2C主机接收后,两种情况之一将要发生根据传输方向。
情况一:地址包接收---读标志设置
STATUS.DIR比特是1,指示一个I2C主机读操作。SCL线被强迫拉低,延伸总线时钟。如果应答被发出,I2C从
机硬件将要在中断标志寄存器设置数据准备好比特(INTFLAG.DRDY),指示数据需要被传输。如果非应答被发出
,I2C从机将等待一个新的开始状态和地址匹配。
典型地,软件将立刻通过发应答或非应答比特来应答地址包。I2C从机命令 CTRL.CMD = 3 能被用来读和写的
操作由于命令执行依据STATUS.DIR比特。
写一个1到INTFLAG.AMATCH也将导致一个应答/非应答被送出到相应的CTRLB.ACKACT比特。
情况二:地址包接收---写标志设置
STATUS.DIR比特被清除,指示一个I2C主机写操作,SCL线被强制拉低,延伸总线时钟。如果一个应答被发送
,I2C从机将等待数据接收,数据,重复开始或停止能被接收。
如果非应答被发送,I3C从机将等待一个新的开台状态和地址匹配。
典型地,软件将立刻通过发送应答/非应答应答地址包。I2C从机命令CTRLB.CMD=3能被用来读和写操作,这
依据STATUS.DIR。
写一个1到INTFLAG.AMATCH也将导致一个应答/非应答被发送到相应的CTRLB.ACKACT比特。
|