I2C总线详细讲述ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(i=0;i<8;i++)
{
scl=1;
delay();
rec=(rec<<1)|sda;//read in the sda
scl=0;
delay();
}
return(rec);
}
六、串行E2PROM AT24C02与单片机的通信
六、串行E2PROM AT24C02与单片机的通信
寻址字节的位定义
D7~D1位组成从机的地址。D0位是数据传送方向位,为“0” 时表示主机向从机写数据,为“1”时表示主机由从机读数据。
主控器发送开始信号后,立即发送寻址字节,这 时,总线上的所有器件都将寻址字节中的7位地址与自 己器件地址比较。如果两者相同,则该器件认为被主 控器寻址,并发送应答信号,被控器根据读,写位确 定自身是作为发送器还是接收器。
2、起始、终止信号和应答信号
起始信号(START):如下图所示,当SCL为高 电平时,SDA由高电平向低电平跳变,主机就向 从机产生开始信号。当总线空闲的时候,主机通 过发送开始(START)信号建立通信。
停止信号(STOP):如下图所示,当SCL 为高电平时,SDA由低电平向高电平跳变,
产生停止信号。主机通过发送停止信号, 结束数据通信。
起始和终止信号都是由主机发出的,在 起始信号产生后,总线就处于被占用的状态, 其它器件不能再产生开始信号。 在终止信号 产生后,总线就处于空闲状态。
连接到I2C总线上的器件,若具有I2C总 线的硬件接口,则很容易检测到起始和终止 信号。
应答信号:
应答信号(A):接收数据的IC在接收到8位数据后,向发送 数据的IC发出的低电平脉冲应答。每一个数据字节后面都要跟 一位应答信号,表示已收到数据。应答信号在第9个时钟周期 出现(scl=1),这时发送器必须在这一时钟位上释放数据线, 由接收设备拉低SDA电平来产生应答信号。所以,一个完整的 字节数据传输需要9个时钟脉冲。
I2C串行总线通信原理
采用串行总线技术可以使系统的硬件设计大大
简化、系统的体积减小、可靠性提高。同时,系统 的更改和扩充极为容易。
常用的串行扩展总线有: I2C (Inter IC BUS) 总线、单总线(1-WIRE BUS)、SPI(Serial Peripheral Interface)总线等。本章仅讨论I2C串行 总线。
(1)主机向从机写入一个字节数据的操作过程
START 从 0 A 被访 A 数据 A STO
机
问子
P
地
地址
址
W
应答
主机写 的一个 字节数 据
主机要向从机写1个字节数据时,主机首先 产生START信号,然后紧跟着发送一个从机地址, 这个地址共有7位,紧接着的第8位是数据方向位 (R/W),0表示主机发送数据(写),1表示主机接 收数据(读),这时候主机等待从机的应答信号(A), 当主机收到应答信号时,发送要访问的子地址, 继续等待从机的应答信号,当主机收到应答信号 时,发送1个字节的数据,继续等待从机的应答 信号,当主机收到应答信号时,产生停止信号, 结束传送过程。
上拉电阻一般为10k
(一)、I2C总线的数据传送
1、总线上数据的有效性规定 IIC总线是以串行方式传输数据, I2C总线进行数据传
送时,从数据字节的最高位开始传送,每一个数据位在SCL 上都有一个时钟脉冲相对应。时钟信号为高电平期间,数 据线上的数据必须保持稳定,只有在时钟线上的信号为低 电平期间,数据线上的高电平或低电平状态才允许变化。
一、典型信号模拟
为了保证数据传送的可靠性,标准的I2C总线的数 据传送有严格的时序要求。I2C总线的起始信号、终 止信号、应答发送“0”及非应答发送“1”的模拟时
序:
单片机在模拟IIC总线通信时,需要写出如下几 个关键部分的程序:总线初始化、启动信号、应 答信号、停止信号、写一个字节、读一个字节, 下面结合前面的时序图及文字描述写出这些相应 的子函数
3、终止信号 void Stop(void) {
SDA = 0; SCL = 1; delay(); SDA = 1; delay(); }
4、应答信号
Void ack( ) {
uchar i; scl=1; while((sda==1)&&(i<200))i++; scl=0; delay( ); }
四、IIC总线工作原理
下图给出一个由MCU作为主机,通过IIC总 线带3个从机的单主机IIC总线系统。这是最常用、 最典型的IIC总线连接方式。
IIC系统由一条串行数据线SDA和一条串行时钟 线SCL组成。 I2C总线通过上拉电阻接正电源。当总 线空闲时,两根线均为高电平。连到总线上的任一器 件输出的低电平,都将使总线的信号变低,即各器件 的SDA及SCL都是线“与”关系。
接收完成后,主机发送非应答信号,表示不再接 收数据,主机进而产生停止信号,结束传送过程。
5、从机的寻址约定
为了消除IIC总线系统中主控器与被控器的地址选择线, 最大限度地简化总线连接线,IIC总线采用了独特的寻址约定, 规定了开始信号后的第一个字节为寻址字节,用来寻址被控 器件,并规定数据传送方向。
一、IIC概述
IIC(Inter-Integrated Circuit)总线,许多文献写作 I2C, 主要用于同一电路板内各集成电路模块(IC)之 间的连接。IIC采用双向2线制串行数据传输方式, 简化IC之间的通信连接。IIC协议是PHILIPS公司于 二十世纪八十年代初提出,其后,PHILIPS和其他 厂商提供了种类丰富的IIC兼容芯片。目前,IIC总 线标准已经成为世界性的工业标准。各大半导体公 司推出了大量的带有IIC接口的芯片,如RAM、 EEPROM、Flash ROM、A/D、D/A转换、 LED/LCD驱动、I/O接口、实时时钟等。
3、数据传送格式
I2C总线发送器送到SDA线上的每个字节必须为8位 长,传送时高位在前,低位在后。与之对应,主器件在 SCL线上产生8个脉冲;第9个脉冲低电平期间,发送器释 放SDA线,接收器把SDA线拉低,以给出一个接收确认 位;每传1个字节需要9个时钟脉冲
4、主机向从机读写数据的过程
I2C总线上传送的数据信号是广义的,既包括地址 信号,又包括真正的数据信号。
(2)主机要从从机读出1个字节数据的操作过程
应答信号 应答信号
非应答信号
star 从 0 A 被 A star 从 1 A 数
ST
t机 地
访
t机
问
地
据 A OP
址
子
址
地
址
W
R
主机读入 的一个字
节数据
主机要从从机读1个字节数据时,主机首先产 生START信号,然后紧跟着发送一个从机地址, 注意此时该地址的第8位为0,表明是向从机写命 令,这时候主机等待从机的应答信号(A),当主机
①主机(主控器):在IIC总线中,提供时钟信 号,对总线时序进行控制的器件。主机负责总线 上各个设备信息的传输控制,检测并协调数据的 发送和接收。主机对整个数据传输具有绝对的控 制权,其它设备只对主机发送的控制信息作出响 应。如果在IIC系统中只有一个MCU,那么由 MCU担任主机。
②从机(被控器):在IIC系统中,除主机外的 其他设备均为从机。主机通过从机地址访问从机, 对应的从机作出响应,与主机通信。从机之间无 法通信,任何数据传输都必须通过主机进行。
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;//r8位数据传送完之后要进行总线的释放
delay();
}
6、读出一个字节子函数
uchar i2creceive8bit(void)
{
uchar i, rec;
scl=0;
delay();
sda=1;
delay(); //we should release the bus before the receive beginning
收到应答信号时,发送要访问的地址,继续等待
从机的应答信号,当主机收到应答信号后,主机 要改变通信模式(主机将由发送变为接收,从机将 由接收变为发送)所以主机发送重新开始信号,然
后紧跟着发送一个从机地址,注意此时该地址的 第8位为1,表明将主机设置成接收模式开始读取
数据,这时候主机等待从机的应答信号,当主机 收到应答信号时,就可以接收1个字节的数据,当
另外IIC总线能在总线竞争过程中进行总线 控制权的仲裁和时钟同步,并且不会造成数据丢 失,因此由IIC总线连接的多机系统可以是一个多 主机系统,支持多主控。
串行的8位双向数据传输位速率在标准模式下 可达100kbit/s,快速模式下可达400kbit/s,高速 模式下可达3.4Mbit/s。
三、IIC总线的相关术语
5、写入一个字节子函数
void i2csend8bit(uchar date)
{
uchar i, temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;// pay attention to the clock sign
delay();
sda=CY;
非应答信号:如果接收设备保持SDA的高电平则产生非应 答信号。
如果从机作为接收方 向主机发送非应答信号,这样,主 机方就认为此次数据传输失败;
如果是主机作为接收方,在从机发送器发送完一个字节数 据后,发送了非应答信号,从机就认为数据传输结束,并释放 SDA线。不论是以上哪种情况都会终止数据传输。
应答信号由接收器产生,总线上带有IIC总线接口的器件 很容易检测到这些信号。
1、总线初始化
Void init( ) {
SCL=1; SDA=1; delay( );//将总线拉高以释放总线 }
2 、起始信号
பைடு நூலகம்
Void T2CStart(void)
{
SDA=1;
SCL = 1;
delay( );
SDA = 0;
delay();//scl高电平器件,sda一
个
下降沿启动信号
}
③地址:每一个IIC器件都有自己的地 址,以供自身在从机模式下使用。在标准 的IIC中定义从机地址是7位(扩展IIC允许10 位地址)。
④发送器:发送数据到总线的器件。
⑤接收器:从总线接收数据的器件。
⑥SDA(Serial DAta):串行数据线。 ⑦SCL(Serial CLock):串行时钟线。
储区的首地址,收到存储器器件的应答后,单片机就逐个发 送各数据字节,但每发送一个字节后都要等待应答。
AT24C系列器件片内地址在接收到每一个数据字节地址后 自动加1,在的芯片“一次装载字节数”(不同芯片字节数不 同)限度内,只需输入首地址。装载字节数超过芯片的“一 次装载字节数”时,数据地址将“上卷”,前面的数据将被 覆盖。
从机的地址由固定部分和可编程部分组成。在一 个系统中可能希望接入多个相同的从机,从机地址中 可编程部分决定了可接入总线该类器件的最大数目。 如一个从机的7位寻址位有4位是固定位,3位是可编程 位,这时仅能寻址8个同样的器件,即可以有8个同样的 器件接入到该I2C总线系统中。
五、8051单片机模拟IIC总线通信协议
ATMEL公司的AT24C系列:
AT24C01:128字节(128×8位); AT24C02:256字节(256×8位); AT24C04:512字节(512×8位) AT24C08:1K字节(1K×8位); AT24C16:2K字节(2K×8位);
(2)写入过程
AT24C系列E2PROM芯片地址的固定部分为1010, A2、A1、A0引脚接高、低电平后得到确定的3位编 码。形成的7位编码即为该器件的地址码。
单片机进行写操作时,首先发送该器件的7位地址 码和写方向位“0”(共8位,即一个字节),发送完 后释放SDA线并在SCL线上产生第9个时钟信号。被 选中的存储器器件在确认是自己的地址后,在SDA 线上产生一个应答信号作为相应,单片机收到应答 后就可以传送数据了。
传送数据时,单片机首先发送一个字节的被写入器件的存
二、IIC总线特点
在硬件结构上,它采用数据(SDA)和时钟 (SCL)两根线来完成数据的传输及外围器件的扩展, 任何一个具有IIC总线接口的外围器件,不论其功 能差别有多大,都具有相同的电气接口,因此都 可以挂接在总线上,使其连接方式变得十分简单。
对各器件的寻址是软寻址方式,因此节点上 没有必须的片选线,器件地址给定完全取决于器 件类型与单元结构,这也简化了IIC系统的硬件连 接。