




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
I2C总线与EEPROM,I2C简介,I2C总线是Philips公司开发的一种双向两线串行总线,多用于连接微处理器及其外围芯片。主要特点是接口方式简单,两条线可以挂多个参与通信的器件,即多机模式,任何一个器件都可以作为主机,但同一时刻只能有一个主机。,UART属于异步通信,I2C属于同步通信。,传输速率:标准模式下为100kbit/s;快速模式下为400kbit/s;高速模式下为3.4Mbit/s。,I2C简介,I2C总线采用二线制传输,一根是数据线SDA(SerialDataLine),另一根是时钟线SCL(serialclockline),连接到总线上的所有I2C器件的SCL连在一起,所有SDA连在一起,每一个器件具有一个唯一的地址。,I2C简介,I2C总线是开漏引脚并联的结构,因此外部要接上拉电阻。对于开漏电路外部加上拉电阻,就组成了线“与”的关系。总线上线“与”的关系就是说,所有接入的器件保持高电平,这条线才是高电平,而任何一个器件输出一个低电平,那这条线就会保持低电平,因此可以做到任何一个器件都可以拉低电平,也就是任何一个器件都可以作为主机。,I2C简介,I2C总线是一个多主机总线,总线上可以有一个或多个主机(或称主控制器件),总线运行由主机控制。,主机是指启动数据的传送(发起始信号)、发出时钟信号、发出终止信号的器件。通常,主机由单片机或其它微处理器担任。,被主机访问的器件叫从机(或称从器件),它可以是其它单片机,或者其他外围芯片,如:A/D、D/A、LED或LCD驱动、串行存储器芯片。,I2C简介,I2C总线支持多主(multi-mastering)和主从(master-slave)两种工作方式。,多主方式下,I2C总线上可以有多个主机。I2C总线需通过硬件和软件仲裁来确定主机对总线的控制权。,主从工作方式时,系统中只有一个主机,总线上的其它器件均为从机(具有I2C总线接口),只有主机能对从机进行读写访问,因此,不存在总线的竞争等问题。在主从方式下,I2C总线的时序可以模拟,I2C总线的使用不受主机是否具有I2C总线接口的制约。80C51单片机本身不具有I2C总线接口,可以用其I/O口线模拟I2C总线。,I2C简介,主机,从机,主从工作方式:,I2C简介,I2C总线上的所有器件连接在一个公共的总线上,主器件在进行数据传输前要选择需要通信的从器件,即进行总线寻址。,I2C总线上所有器件都需要有惟一的地址,由器件地址和引脚地址两部分组成,共7位。器件地址出厂时就已经固定,不可更改。引脚地址由I2C器件的地址引脚(A2,A1,A0)决定。,地址位与一个方向位共同构成I2C总线器件寻址字节,寻址字节的格式如下:,I2C简介,具有I2C硬件接口的常用器件,I2C简介,器件地址:0b10100000 x50,AT24C02是Atmel公司生产的具有I2C总线接口功能的串行E2PROM器件。容量大小为2kbits,即256个字节。SDA、SCL:I2C总线接口。A2A0:地址引脚。WP:写保护。当接低电平时,可进行正常读/写操作;接高电平时,只能读取数据。,I2C通信时序,I2C总线规定了严格的数据通信格式,所有具有I2C总线接口的器件都必须遵守。,I2C总线上主机与从机之间一次传送的数据称为一帧,由起始信号、数据传输部分和停止信号组成。数据传送的基本单元为一位数据。对比UART的数据帧格式。,起始信号:I2C通信的起始信号的定义是SCL为高电平期间,SDA由高电平向低电平变化产生一个下降沿。,空闲状态:I2C总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。,停止信号:而I2C通信停止信号的定义是SCL为高电平期间,SDA由低电平向高电平变化产生一个上升沿。,数据传输:时钟线SCL的一个时钟周期只能传输一位数据,即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。在SCL时钟线为高电平期间内,数据线SDA上的数据必须稳定。当SCL时钟线变为低电平时,数据线SDA的状态才能改变。,I2C协议规定,在每个字节传送完毕后,必须有一个应答位。应答位的时钟脉冲由主机产生。在应答时钟有效期间,发送设备把数据线SDA置为高电平;接收设备必须把数据线SDA置为低电平,并且在此期间保持低电平状态,以便产生有效的应答信号。,I2C寻址模式,主机发送起始信号,通知总线上的所有从机数据传输开始了,接下来主机发送从机地址,与这一地址匹配的从机将继续这一传输过程,而其它从机将会忽略接下来的传输并等待下一次传输的开始。主机寻址到从机后,发送它所要读取或写入从机的内部寄存器地址;之后,发送或接收数据。数据接收或发送完毕后,发送停止位。,AT24C02,仿真电路:,器件地址为0 x50,参考程序:,#include#include#defineI2CDelay()_nop_();_nop_();_nop_();_nop_();sbitI2C_SCL=P37;sbitI2C_SDA=P36;sbitLED1=P10;sbitLED2=P15;bitI2CAddressing(unsignedcharaddr);voidmain()bitack1,ack2;,ack1=I2CAddressing(0 x50);/查询地址为0 x50的器件if(ack1=1)LED1=0;elseLED1=1;ack2=I2CAddressing(0 x62);/查询地址为0 x62的器件if(ack2=1)LED2=0;elseLED2=1;while(1);,/*产生总线起始信号*/voidI2CStart()I2C_SDA=1;/首先确保SDA、SCL都是高电平I2C_SCL=1;I2CDelay();I2C_SDA=0;/先拉低SDAI2CDelay();I2C_SCL=0;/再拉低SCL,/*产生总线停止信号*/voidI2CStop()I2C_SCL=0;/首先确保SDA、SCL都是低电平I2C_SDA=0;I2CDelay();I2C_SCL=1;/先拉高SCLI2CDelay();I2C_SDA=1;/再拉高SDAI2CDelay();,/*I2C总线写操作,dat-待写入字节,返回值-从机应答位的值*/bitI2CWrite(unsignedchardat)bitack;/用于暂存应答位的值unsignedcharmask;/用于探测字节内某一位值的掩码变量for(mask=0 x80;mask!=0;mask=1)/从高位到低位依次进行if(mask,I2C_SCL=1;/拉高SCLI2CDelay();I2C_SCL=0;/再拉低SCL,完成一个位周期I2C_SDA=1;/8位数据发送完后,主机释放SDA,以检测从机应答I2CDelay();I2C_SCL=1;/拉高SCLack=I2C_SDA;/读取此时的SDA值,即为从机的应答值I2CDelay();I2C_SCL=0;/再拉低SCL完成应答位,并保持住总线returnack;/返回从机应答值,/*I2C寻址函数,即检查地址为addr的器件是否存在,返回值-从器件应答值*/bitI2CAddressing(unsignedcharaddr)bitack;I2CStart();/产生起始位,即启动一次总线操作ack=I2CWrite(addr=1)/从高位到低位依次进行if(mask,I2C_SCL=0;/再拉低SCL,完成一个位周期I2C_SDA=1;/8位数据发送完后,主机释放SDA,以检测从机应答I2CDelay();I2C_SCL=1;/拉高SCLack=I2C_SDA;/读取此时的SDA值,即为从机的应答值I2CDelay();I2C_SCL=0;/再拉低SCL完成应答位,并保持住总线return(ack);/应答值取反以符合通常的逻辑:/0=不存在或忙或写入失败,1=存在且空闲或写入成功,/*I2C总线读操作,并发送非应答信号,返回值-读到的字节*/unsignedcharI2CReadNAK()unsignedcharmask;unsignedchardat;I2C_SDA=1;/首先确保主机释放SDAfor(mask=0 x80;mask!=0;mask=1)/从高位到低位依次进行I2CDelay();I2C_SCL=1;/拉高SCLif(I2C_SDA=0)/读取SDA的值dat/为1时,dat中对应位置1,I2CDelay();I2C_SCL=0;/再拉低SCL,以使从机发送出下一位I2C_SDA=1;/8位数据发送完后,拉高SDA,发送非应答信号I2CDelay();I2C_SCL=1;/拉高SCLI2CDelay();I2C_SCL=0;/再拉低SCL完成非应答位,并保持住总线returndat;,I2CDelay();I2C_SCL=0;/再拉低SCL,以使从机发送出下一位I2C_SDA=1;/8位数据发送完后,拉高SDA,发送非应答信号I2CDelay();I2C_SCL=1;/拉高SCLI2CDelay();I2C_SCL=0;/再拉低SCL完成非应答位,并保持住总线returndat;,/*I2C总线读操作,并发送应答信号,返回值-读到的字节*/unsignedcharI2CReadACK()unsignedcharmask;unsignedchardat;I2C_SDA=1;/首先确保主机释放SDAfor(mask=0 x80;mask!=0;mask=1)/从高位到低位依次进行I2CDelay();I2C_SCL=1;/拉高SCLif(I2C_SDA=0)/读取SDA的值dat/为1时,dat中对应位置1,I2CDelay();I2C_SCL=0;/再拉低SCL,以使从机发送出下一位I2C_SDA=0;/8位数据发送完后,拉低SDA,发送应答信号I2CDelay();I2C_SCL=1;/拉高SCLI2CDelay();I2C_SCL=0;/再拉低SCL完成应答位,并保持住总线returndat;,Test.c:#includesbitbai=P20;sbitshi=P21;sbitge=P22;externvoidI2CStart();externvoidI2CStop();externunsignedcharI2CReadNAK();externbitI2CWrite(unsignedchardat);unsignedcharE2ReadByte(unsignedcharaddr);voidE2WriteByte(unsignedcharaddr,unsignedchardat);,voiddisplay(void);voiddelay(unsignedinttime);unsignedcharcodedis_code=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90;unsignedcharstr3;,voidmain()unsignedchardat;dat=E2ReadByte(0 x02);/读取指定地址上的一个字节str2=dat/100;str1=dat/10%10;str0=dat%10;dat+;/将其数值+1E2WriteByte(0 x02,dat);/再写回到对应的地址上while(1)display();,/*读取EEPROM中的一个字节,addr-字节地址*/unsignedcharE2ReadByte(unsignedcharaddr)unsignedchardat;I2CStart();I2CWrite(0 x501);/寻址器件,后续为写操作I2CWrite(addr);/写入存储地址I2CStart();/发送重复启动信号I2CWrite(0 x501)|0 x01);/寻址器件,后续为读操作dat=I2CReadNAK();/读取一个字节数据I2CStop();returndat;,/*向EEPROM中写入一个字节,addr-字节地址*/voidE2WriteByte(unsignedcharaddr,unsignedchardat)I2CStart();I2CWrite(0 x501);/寻址器件,后续为写操作I2CWrite(addr);/写入存储地址I2CWrite(dat);/写入一个字节数据I2CStop();,voiddelay(unsignedinttime)unsignedchart;while(time-)for(t=0;t120;t+);,voiddisplay(void)staticunsignedcharnum=0;P0=0 xff;switch(num)Case0:bai=1;shi=0;ge=0;P0=dis_codestr2;num+;delay(10);break;case1:bai=0;shi=1;ge=0;P0=dis_codestr1;num+;delay(10);break;case2:bai=0;shi=0;ge=1;P0=dis_codestr0;num=0;delay(10);break;,第一次运行结果,第二次运行结果,第三次运行结果,EEPROM多字节读写时序,从EEPROM读取多字节数据很简单,EEPROM根据我们所送的时序,直接就把数据送出来即可。向EEPROM发送数据后,先保存在了EEPROM的缓存,EEPROM必须要把缓存中的数据搬移到“非易失”的区域,才能达到掉电不丢失的效果。而往非易失区域写需要一定的时间,每种器件不完全一样,ATMEL公司的24C02的这个写入时间最高不超过5ms。在往非易失区域写的过程,EEPROM是不会再响应单片机的访问,不仅接收不到单片机发送的数据,即使用I2C标准的寻址模式去寻址,EEPROM都不会应答,就如同这个总线上没有这个器件一样。数据写入非易失区域完毕后,EEPROM再次恢复正常,可以正常读写了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供应链管理优化工具介绍及功能点
- 古诗文诵读技巧指导:七年级古诗文阅读课教案
- 《中国成人失眠诊断与治疗指南(2023版)》解读
- 化工厂安全培训报道稿课件
- 化工厂安全培训体会课件
- 2025年中国建筑材料检验认证集团股份有限公司合同检验单
- 厦门安全培训平台课件
- 2025合同样本:食堂食材采购合同范本
- 2025年度石油买卖合同补充协议
- 2025标准版个人开发购房合同
- 2025至2030中国黑水虻养殖行业经营规模分析及投资风险预警报告
- 2025年中学教师资格考试《综合素质》核心考点特训题库(含答案)之教育心理学试题
- 人教版劳动教育四年级上册全册教学设计
- 矿物加工工程专业英语词汇
- T-ZSA 288-2024 餐饮设备智能烹饪机器人系统通.用技术要求
- 档案员近3年年终工作考核情况
- 《建筑材料与构造》课件-1.建筑材料认知
- 2024版济南厂房出租合同(含使用权转让)
- DBJ33T 1307-2023 微型钢管桩加固技术规程
- 行动的力量课件
- 会计信息系统 课件 第0-2章 导学、会计信息系统概述、电商企业会计信息系统搭建
评论
0/150
提交评论