硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1855|回复: 0
收起左侧

IIC时序详解

[复制链接]

9

主题

3

回帖

30

积分

新手上路

积分
30
发表于 2018-11-26 13:45:45 | 显示全部楼层 |阅读模式
1、概述:
在使用单片机或芯片级通信时,I2C是一种必不可少的通信协议。 I2C只有两线接口:一条数据线 (SDA) ,另一条时钟线 (SCL),通信方式比较简单可靠。但由于SDA、SCL为漏极开路结构(OD),因此硬件设计时必须接有上拉电阻,阻值的大小常为 1k8,2K2,4k7和 10k;当I2C线空闲时,两根线均为高电平。
本文中以自己项目中所用到的具有I2C通信协议的EEPROM芯片24LC64为例,EEPROM芯片硬件电路如图1所示,数据线和时钟线处于空闲状态时,采用LOTO的OSC802示波器测量空闲时的波形如图2所示。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
               图1 I2C芯片电路
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
               图2 示波器测量I2C空闲时状态
2、I2C协议
快速搭建单片机和芯片之间通信,首先要熟悉I2C通信协议,I2C协议主要是怎样判断数据的起始、停止、ACK;下面将一一介绍:
起始信号:当SCL为高电平期间,SDA由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号。
停止信号:当SCL为高电平期间,SDA由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。
   I2C起始和停止信号示意如图3所示;
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
          图3 I2C起止信号
ACK:单片机每发送一个字节,就在时钟脉冲第9个周期期间释放数据线,由EEPROM芯片发送一个应答信号。 应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示EEPROM已经成功地接收了该字节。
  对于反馈有效应答位ACK的要求是,EEPROM在第9个时钟脉冲之前的低电平期间将SDA线拉低或一直保持低电平;并且确保在该时钟的高电平期间为稳定的低电平。(通过示波器捕捉功能,采集到的波形如图4所示)
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif
                    图4 示波器测量I2C总线起始信号
同样应答信号在第9个时钟脉冲为高电平时,规定为非应答位(NACK),表示EEPROM接收该字节没有成功。对于反馈非应答位为NACK时,单片机将会继续发送相同的字节。(测量波形如图5所示)  file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.gif            图5  非应答时信号状态3、数据的有效性
I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
     虽然只要求在高电平期间保持稳定,但是数据在SCL的上升沿到来之前就需准备好,数据是在SCL的上升沿打入到(EEPROM)中的。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image011.gif
4数据传输
在I2C总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。数据位的传输是边沿触发。但一般数据是以时钟脉冲高电平时SDA状态确定的。
单片机收到来自EEPROM发出的应答后就可以发送数据。传送数据时,单片机就逐个发送数据字节,但每发送一个字节后都要等待应答。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image013.jpg
     等待应答时,时钟脉冲将有一定时间处于低电平的延时,为传输下一个字节的数据做准备。采用LOTO示波器捕捉的信号波形如图8所示   
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image015.gif
                     图7  单片机传输连续数据时序     
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image017.gif
                      图8 示波器捕捉数据发送时序               
◆ 发送停止位.
·       EEPROM收到停止信号后,进入到一个内部的写入周期,需要一定时间(芯片不同时间不同),SCL和SDA被释放。此时任何操作都不会被EEPROM响应;(因此以这种方式的两次写入之间要插入一个延时,否则会导致失败)捕捉信号如同9所示
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image019.gif


file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image020.gif1、概述:
在使用单片机或芯片级通信时,I2C是一种必不可少的通信协议。 I2C只有两线接口:一条数据线 (SDA) ,另一条时钟线 (SCL),通信方式比较简单可靠。但由于SDA、SCL为漏极开路结构(OD),因此硬件设计时必须接有上拉电阻,阻值的大小常为 1k8,2K2,4k7和 10k;当I2C线空闲时,两根线均为高电平。
本文中以自己项目中所用到的具有I2C通信协议的EEPROM芯片24LC64为例,EEPROM芯片硬件电路如图1所示,数据线和时钟线处于空闲状态时,采用LOTO的OSC802示波器测量空闲时的波形如图2所示。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
               图1 I2C芯片电路
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
               图2 示波器测量I2C空闲时状态
2、I2C协议
快速搭建单片机和芯片之间通信,首先要熟悉I2C通信协议,I2C协议主要是怎样判断数据的起始、停止、ACK;下面将一一介绍:
起始信号:当SCL为高电平期间,SDA由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号。
停止信号:当SCL为高电平期间,SDA由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。
   I2C起始和停止信号示意如图3所示;
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
          图3 I2C起止信号
ACK:单片机每发送一个字节,就在时钟脉冲第9个周期期间释放数据线,由EEPROM芯片发送一个应答信号。 应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示EEPROM已经成功地接收了该字节。
  对于反馈有效应答位ACK的要求是,EEPROM在第9个时钟脉冲之前的低电平期间将SDA线拉低或一直保持低电平;并且确保在该时钟的高电平期间为稳定的低电平。(通过示波器捕捉功能,采集到的波形如图4所示)
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif
                    图4 示波器测量I2C总线起始信号
同样应答信号在第9个时钟脉冲为高电平时,规定为非应答位(NACK),表示EEPROM接收该字节没有成功。对于反馈非应答位为NACK时,单片机将会继续发送相同的字节。(测量波形如图5所示)  file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.gif            图5  非应答时信号状态3、数据的有效性
I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
     虽然只要求在高电平期间保持稳定,但是数据在SCL的上升沿到来之前就需准备好,数据是在SCL的上升沿打入到(EEPROM)中的。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image011.gif
4数据传输
在I2C总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。数据位的传输是边沿触发。但一般数据是以时钟脉冲高电平时SDA状态确定的。
单片机收到来自EEPROM发出的应答后就可以发送数据。传送数据时,单片机就逐个发送数据字节,但每发送一个字节后都要等待应答。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image013.jpg
     等待应答时,时钟脉冲将有一定时间处于低电平的延时,为传输下一个字节的数据做准备。采用LOTO示波器捕捉的信号波形如图8所示   
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image015.gif
                     图7  单片机传输连续数据时序     
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image017.gif
                      图8 示波器捕捉数据发送时序               
◆ 发送停止位.
·       EEPROM收到停止信号后,进入到一个内部的写入周期,需要一定时间(芯片不同时间不同),SCL和SDA被释放。此时任何操作都不会被EEPROM响应;(因此以这种方式的两次写入之间要插入一个延时,否则会导致失败)捕捉信号如同9所示
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image019.gif


file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image020.gif

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-13 09:31 , Processed in 0.167863 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表