IIC通信协议总结

上传人:jiups****uk12 文档编号:37828422 上传时间:2018-04-23 格式:DOC 页数:6 大小:264.50KB
返回 下载 相关 举报
IIC通信协议总结_第1页
第1页 / 共6页
IIC通信协议总结_第2页
第2页 / 共6页
IIC通信协议总结_第3页
第3页 / 共6页
IIC通信协议总结_第4页
第4页 / 共6页
IIC通信协议总结_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《IIC通信协议总结》由会员分享,可在线阅读,更多相关《IIC通信协议总结(6页珍藏版)》请在金锄头文库上搜索。

1、 IIC 通信协议一概述IIC 总线的优点:I2C 总线是各种总线中使用信号线最少,并具有自动寻址、多主机 时钟同步和仲裁等功能的总线。二硬件结构I2C 串行总线一般有两根信号线,一根是双向的数据线 SDA,另一根是时钟线 SCL。所有接到 I2C 总线设备上的串行数据 SDA 都接到总线的 SDA 上,各设备的时 钟线 SCL 接到总线的 SCL 上。SDA 数据线:数据线:设备上的串行数据线 SDA 接口电路应该是双向的,输出电路用于向 总线上发送数据,输入电路用于接收总线上的数据。SCL 时钟线:时钟线:而串行时钟线也应是双向的,作为控制总线数据传送的主机,一方面 要通过 SCL 输出电

2、路发送时钟信号;另一方面还要检测总线上的 SCL 电平,以决定 什么时候发送下一个时钟脉冲电平,作为接受主机命令的从机,要按总线上的 SCL 信号发出或接收 SDA 上的信号,也可以向 SCL 线发出低电平信号以延长总线时钟信 号周期。空闲时候总线的状态:空闲时候总线的状态:总线空闲时,因各设备都是开漏输出,上拉电阻 Rp 使 SDA 和 SCL 线都保持高电平。任一设备输出的低电平都将使相应的总线信号线变低,也 就是说:各设备的 SDA 是“与”关系,SCL 也是“与”关系。主机:主机:总线的运行(数据传输)由主机控制。所谓主机是指启动数据的传送(发出 启动信号) 、发出时钟信号以及传送结束

3、时发出停止信号的设备,通常主机都是微处 理器。从机:从机:被主机寻访的设备称为从机。为了进行通讯,每个接到 I2C 总线的设备都有 一个唯一的地址,以便于主机寻访。三:数据的传输开始和停止条件的确定:开始和停止条件的确定:在 I2C 总线传输过程中,将两种特定的情况定义为开始 和停止条件(见图 3):当 SCL 保持“高”时,SDA 由“高”变为“低”为开始条件;当 SCL 保持“高”且 SDA 由“低”变为“高”时为停止条件。开始和停止条件均由主控制器产 生。使用硬件接口可以很容易地检测到开始和停止条件,没有这种接口的微机必须以 每时钟周期至少两次对 SDA 取样,以检测这种变化。传输注意事

4、项: 1.SDA 线上的数据在时钟“高”期间必须是稳定的,只有当 SCL 线上的时钟信号 为低时,数据线上的“高”或“低”状态才可以改变。因此在 IIC 总线上胡数据传输过程中,数据信号线 SDA 的变化只能发生在 SCL 为低电 平的期间内。从上图中可以清楚的看到这一点。响应信号 ACK 宽度为 1 位,紧跟在 8 个数据位后面,所以发送 1 字节的数据需要 9 个 SCL 时钟脉冲。响应时钟脉冲也是由主机产生的,主机在响应时钟脉冲期间释放主机在响应时钟脉冲期间释放 SDA 线,线, 使其处在高电平使其处在高电平(见图见图 163 上面的信号上面的信号)。而在响应时钟脉冲期间,接收方需要将。

5、而在响应时钟脉冲期间,接收方需要将 SDA 拉拉 低,使低,使 SDA 在响应时钟脉冲高电平期间保持稳定的低电平在响应时钟脉冲高电平期间保持稳定的低电平(见图 163 中间结束的信号)。 低电平用 ACK 表示,代表有应答;高电平用 nACK 表示,代表无应答。应答信号在应答信号在 I2C 总线的数据传输过程中起着非常重要的作用,它将决定总线及连接在总线上设备下一步的总线的数据传输过程中起着非常重要的作用,它将决定总线及连接在总线上设备下一步的状态和动作。一旦在应答信号上发生错误,例如接收方不按规定返回或返回不正确的应答状态和动作。一旦在应答信号上发生错误,例如接收方不按规定返回或返回不正确的

6、应答 信号,以及发送方对应答信号的误判,都将造成总线通信的失败。信号,以及发送方对应答信号的误判,都将造成总线通信的失败。2.输出到 SDA 线上的每个字节必须是 8 位,高位在前,低位在后。每次传输每次传输 的字节不受限制,但每个字节必须要有一个应答的字节不受限制,但每个字节必须要有一个应答 ACK。如果一接收器件在 完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可 以保持时钟线 SCL 为低,以促使发送器进入等待状态;当接收器准备好接 受数据的其它字节并释放时钟 SCL 后,数据传输继续进行。 3.数据传送数据传送具有应答是必须的。与应答对应的具有应答是必须的。与应答对应的

7、时钟脉冲时钟脉冲由主控制器产生,发送由主控制器产生,发送 器在应答期间必须下拉器在应答期间必须下拉 SDA 线。线。 4.当寻址的被控器件不能应答时,数据保持为高并使主控器产生停止条件而终 止传输。 5.在传输的过程中,在用到主控接收器的情况下,主控接收器必须发出一数据在传输的过程中,在用到主控接收器的情况下,主控接收器必须发出一数据 结束信号给被控发送器,从而使被控发送器释放数据线,以允许主控器产结束信号给被控发送器,从而使被控发送器释放数据线,以允许主控器产 生停止条件。生停止条件。 开始传输:I2C 总线在开始条件后的首字节决定哪个被控器将被主控器选择,例 外的是“通用访问”地址,它可以

8、在所有期间寻址。当主控器输出一地址时,系统 中的每一器件都将开始条件后的前 7 位地址和自己的地址进行比较。如果相同, 该器件即认为自己被主控器寻址,而作为被控接收器或被控发送器则取决于 R/W 位。四例子(用 GMS97C2051 的通用 I/O 口来作为 I2C 总线接口,并由软件控制实现数据传送) 接 I2C 总线规定:SCL 线和 SDA 线是各设备对应输出状态相“与”的结果, 任一设备都可以用输出低电平的方法来延长 SCL 的低电平时间,以迫使高速 设备进入等待状态,从而实现不同速度设备间的时钟同步。 因此,即使时钟脉冲的高、低电平时间长短不一,也能实现数据的可靠 传送,可以用软件控

9、制 I/O 口做 I2C 接口。传输的整个过程:传输的整个过程:前面已经介绍过 I2C 总线是支持多机通信的数据总线,每一个连接在总线上 的从机设备或器件都有一个唯一独立的地址,以便于主机寻访。 I2C 总线上的数据通信过程是由主机发起的,以主机控制总线,发出起始信号 作为开始。在发送起始信号后,主机将发送一个用于选择从机设备的地址字节, 以寻址总线中的某一个从机设备,通知其参与同主机之间的数据通信。地址字节 的格式如下:地址字节的高 7 位数据是主机呼叫的从机地址,第 8 位用于标示紧接下来的数据 传输方向:“0”表示要从机准备接收主机下发数据(主机发送从机接收);而“l, ,则表示主机向从

10、机读取数据(主机接收从机发送)。 当主机发出地址字节后,总线上所有的从机都将起始信号后的 7 位地址与自己的地址 进行比较:如果相同,则该从机确认自己被主机寻址;而那些本机地址与主机下发的 寻呼地址不匹配的从机,则继续保持在检测起始信号的状态,等待下一个起始信号的 到来。 被主机寻址的从机,必须在第 9 个 SCK 时钟脉冲期间拉低 SDA,给出 ACK 回应,以 通知主机寻址成功。然后,从机将根据地址字节中第 8 他的指示,将自己转换成相应 的角色(0从机接收器;1从机发送器),参与接下来的数据传输过程。 图 164 所示为在 I2C 总线上一次数据传输的示例,它实现了简单的操作:主机向从

11、机读取 1 字节。图中描述了整个数据传输的全部过程,给出了 I2C 总线上的时序变化, SDA 上的数据情况、以及发送、接收双方相互转换与控制 SDA 的过程。主机控制 SDA。在 I2C 总线上产生起始信号,同时控制 SCL,发送时钟脉冲。在整个 传输过程中,SCL 都是由主机控制的。主机发送器发送地址字节。地址字节的第 8 位为“1” 。表示准备向从机读取数据。 主 机在字节发送完成后,放弃对 5DA 的控制,进入接收检测 ACK 的状态。所有从机在起始信号后为从机接收器,接收地址字节,与自己地址比对。 被寻址的从机在第 9 个 SCL 时钟脉冲期间控制 SDA将其拉低,给出 ACK 应答

12、。主机检测到从机的 ACK 应答后、转换成主机接收器。准备接收从机发出的数据。从机则根据第 8 位“1”的设定,在第 2 个字节的 8 个时钟脉冲期间作为从机发送器控 制 SDA。发送 1 字节的数据。发送完成后放弃对 SDA 的控制,进入接收检测 ACK 的状态。在第 2 个字节的 8 个传输时钟脉冲期间,主机接收器接收从机发出的数据。当接收到 d0 位后,主机控制 SDA,将其拉低,给出 ACK 应答。 从机接收检测主机的从机接收检测主机的 ACK 应答应答 c 如果是如果是 ACK,则难备发送,则难备发送 1 个新的字节数据;如果是个新的字节数据;如果是 nACK,则转入检测下一个起始信

13、号的状态。,则转入检测下一个起始信号的状态。 在这个示例中,主机收到在这个示例中,主机收到 l 字节数据后,转成主机发送器控制字节数据后,转成主机发送器控制 SDA,在发出,在发出 ACK 应答应答 信号后,马上发出停止信号,通知本次数据传输结束。信号后,马上发出停止信号,通知本次数据传输结束。 从机检测到停止信号,转入检测下一个起始信号的状态。从机检测到停止信号,转入检测下一个起始信号的状态。 以上介绍了 I2C 总线基本的特性、操作时序和通信规范,这些概念对了解、掌握、应 用 I2C 总线尤为重要。这是因为 I2C 总线在硬件连接上非常简单,只要将所有器件和设备 的 SDA、SCL 并在一

14、起就可以了,但复杂的通信规范的实现,往往需要软件的控制。尽管 AVR 的 TWI 接口在硬件层面上实现了更多的 I2C 底层协议和数据传送与接收的功能,但 对于什么时间发出起始信号、停止信号,如何返回应答信号,以及主从机之间的发送 接收器的相互转换,还是需要程序员根据实际情况,编写相应的、正确的系统程序才能实 现。 关于 I2C 总线更多的特性,例如多主机的总线竞争与仲裁等,本书将不做介绍,有兴趣的 读者可以通过本书所附光盘中的参考资料I2C 总线规范进一步地深入学习。使用 C 语言在 C51 的环境下对 IIC 的编程范例/ IIC 开始void Start()SDA=1;SCL=1;NOP

15、4();SDA=0;NOP4();SCL=0;/ IIC 结束void Stop()SDA=0;SCL=0;NOP4();SCL=1;NOP4();SDA=1;/ IIC 读取应答void RACK()SDA=1;NOP4();SCL=1;NOP4();SCL=0;/ IIC 发送非应答void NO_ACK()SDA=1;SCL=1;NOP4();SCL=0;SDA=0;/ IIC 向从设备的指定地址写入数据向从设备的指定地址写入数据void Write_IIC(uchar addr,uchar dat)Start();Write_A_Byte(0xa0);Write_A_Byte(addr);Write_A_Byte(dat);Stop();DelayMS(10);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号