Fork Me on GitHub

源码开放学ARM

LASO - Learn ARM with Source Open

首页         目录索引         资料下载         代码下载         联系作者        
下载PDF打印版本

I2C 时序图

IIC启动和停止信号的定义

在I2C总线传输过程中,将两种特定的情况定义为开始和停止条件:

起始和停止信号

当SCL保持“高”时,SDA由“高”变为“低”为开始条件; 当SCL保持“高”且SDA由“低”变为“高”时为停止条件。

开始和停止条件均由主控制器产生。使用硬件接口可以很容易地检测到开始和停止条件, 没有这种接口的微机必须以每时钟周期至少两次对SDA取样,以检测这种变化。

开始和停止条件

SDA线上的数据在时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时, 数据线上的“高”或“低”状态才可以改变。输出到SDA线上的每个字节必须是8位,每次传输的字节不受限制,但每个字节必须要有一个应答ACK。

如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低, 以促使发送器进入等待状态;当接收器准备好接受数据的其它字节并释放时钟SCL后,数据传输继续进行。

I2C数据总线传送时序

数据传送具有应答是必须的。与应答对应的时钟脉冲由主控制器产生,发送器在应答期间必须下拉SDA线。 当寻址的被控器件不能应答时,数据保持为高并使主控器产生停止条件而终止传输。

在传输的过程中,在用到主控接收器的情况下,主控接收器必须发出一数据结束信号给被控发送器, 从而使被控发送器释放数据线,以允许主控器产生停止条件。

I2C总线在开始条件后的首字节决定哪个被控器将被主控器选择,例外的是“通用访问”地址,它可以在所有期间寻址。 当主控器输出一地址时,系统中的每一器件都将开始条件后的前7位地址和自己的地址进行比较。 如果相同,该器件即认为自己被主控器寻址,而作为被控接收器或被控发送器则取决于R/W位。

随机读时序

字节写时序

一,在主设备发送模式下,它的工作流程为:

1,首先配置IIC模式(包括配置GPE15,GPE14为第二功能 时钟线和数据线,iic中断使能,发送时钟频率等)

2,然后把从设备地址写入接收发送数据移位寄存器IICDS中,再把0xF0写入控制状态寄存器IICSTAT中,这时等待从设备发送应答信号

3,如果想要继续发送数据,那么在接收到应答信号后,再把待发送的数据写入寄存器IICDS中,清除中断标志后,再次等待应答信号;如果不想再发送数据了,那么把0x90写入寄存器IICSTAT中,清除中断标志并等待停止条件后,即完成了一次主设备的发送。

二,在主设备接收模式下,它的工作流程为:

1,首先配置IIC模式,然后把从设备地址写入接收发送数据移位寄存器IICDS中,再把0xB0写入控制状态寄存器IICSTAT中

2,这时等待从设备发送应答信号,如果想要接收数据,那么在应答信号后,读取寄存器IICDS,清除中断标志;如果不想接收数据了,那么就向寄存器IICSTAT写入0x90,清除中断标志并等待停止条件后,即完成了一次主设备的接收。

上一节 | 目录索引 | 下一节

blog comments powered by Disqus