串行I2C总线E2PROM 24CXX.doc_第1页
串行I2C总线E2PROM 24CXX.doc_第2页
串行I2C总线E2PROM 24CXX.doc_第3页
串行I2C总线E2PROM 24CXX.doc_第4页
串行I2C总线E2PROM 24CXX.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

花了几天时间,一直在研究24CXX的读取操作,今天终于搞明白了,刚开始在网上早了很多资料,还下了别人程序看,基本上有个概念了,就在书上抄了一段程序自己调调看,写好后,下载进去不行,测试了好久没有调出来,看了好几次程序也没有发现问题后来开始怀疑书上的程序有问题,真是晕了。昨天请教同事,说要在写周期延时5-10MS,啊!不会吧,我的程序里好像没有延时哦,马上用“单片机小精灵”算了5MS塞进去,下载试试看吧,还真的行了,哈哈。后来仔细看看了说明书,还真的要延时哦,刚开始没有仔细看,看来下次不能全相信书上的。我把资料整理了一下,感觉还是比较全的,正在做这个朋友可以参考一下,我把测试好源程序也放上去了,有需要朋友可以下过去看看。串行I2C总线E2PROM24CXXAT24CXX系列E2PROM是典型的I2C总线接口器件。其特点是:单电源供电;采用低功耗CMOS技术;工作电压范围宽(1.85.5V);自定时写周期(包含自动擦除)、页面写周期值最大10ms;具有硬件写保护。型号为AT24CXX的器件内部结构如图1,引脚排列如图2所示。其中,SCL为串行时钟引脚;SDA为串行数据/地址引脚;WP为写保护(当WP为高电平时,存储器只读;当WP为低电平时,存储器可读可写);A0、A1、A2为片选或块选。器件的SDA为漏极开路引脚,需要接上拉电阻到VCC,其数据的结构为8位。输入引脚内接有滤波器,能有效抑制噪声。自动擦除(逻辑“1”)在每一个写周期内完成。AT24CXX采用I2C规约,采用主/从双向通信,主器件通常为单片机。主器件产生串行时钟(SCL),发出控制字,控制总线的传送方向,并产生开始和停止条件。串行E2PROM为从器件。无论主器件还是从器件,接收一字节后必须发出一个应答信号ACK。内部结构图:引脚图:1、控制字要求开始位以后,主器件送出一个8位的控制字节,以选择从器件并控制总线传送的方向。控制字节的结构如下所示:其中:控制字节的位7位4为从器件地址位,确认器件的类型。此4位码由Philips公司的I2C规约决定。1010码即从器件为串行EEPROM将一直处于等待状态,直到1010发送到总线上为止。当1010码发送到总线上时,其他非串行EEPROM从器件将不会响应。 控制字节的位3位1为18片的片选或存储器内的块地址选择位。此3个控制位用于片选或者内部块选择。控制字节的A2、A1、A0必须与外部A2、A1、A0引脚的硬件连接或者内部块选择匹配,A2、A1、A0引脚无内部连接的。则这3位无关紧要。须作器件选择的,其A2、A1、A0引脚可接高电平或低电平。控制字节位0为读/写操作控制码。如果此位为1,则下一字节进行读操作(R);若此位为0,则下一字节进行写操作(W)。 AT24CXX的存储器矩阵内部分为若干块,每一块有若干页面,每一页面有若干字节。内部页缓冲器只能写入一页的数据字节,24C16则可看成8片24C02为一体,主机发送不同的器件地址则是访问24C16内部的不同区块,24C32以上的芯片由于其内部地址编码分两字节,突破了地址编码资源11位(3位器件地址+8位内部地址)的限制,因此总线容量也获得了扩充。当串行E2PROM产生控制字节并检测到应答信号以后,主器件将传送相应的字地址或数据信息。2、起始信号、停止信号和应答信号起始信号:当SCL处于高电平时,SDA从高到低的跳变作为I2C总线的起始信号,起始信号应该在读/写操作命令之前发出。停止信号:当SCL处于高电平时,SDA从低到高的跳变作为I2C总线的停止信号,表示一种操作的结束。SDA和SCL线上通常接有上拉电阻。当SCL为高电平时,对应的SDA线上的数据有效;而只有当SCL为低电平时,才允许SDA线上的数据位改变。数据和地址是以8位信号传送。在接收一字节后,接收器件必须产生一个应答信号ACK,主器件必须产生一个与此应答信号相应的额外时钟脉冲,在此时钟脉冲的高电平期间,拉SDA线为稳定的低电平,为应答信号(ACK)。若不在从器件输出的最后一个字节中产生应答信号,则主器件必须给从器件发一个数据结束信号。在这种情况下,从器件必须保持SDA线为高电平(用NO ACK表示),使得主器件能产生停止条件。根据通信规约,起始信号、停止信号和应答信号的时序如图所示。I2C总线产生起始信号、停止信号和应答的时序3、写操作 AT24CXX系列E2PROM的写操作有字节写和页面写2种。(1)字节写 在指定地址写入1字节数据。首先主器件发出起始号S后,发送写控制字节,即1010A2A1A0(最低位置0,即R/W读/写控制位为低电平0),然后等待应答信号,指示从器件被寻址,由主器件发送的下一字节为字地址,为将被写入到AT24CXX的地址指针;主接收来自AT24CXX的另一个应答信号,将发送数据字节,并写入到寻址的存储器地址;AT24CXX再次发出应答信号,同时主器件产生停止信号P。注意写完一个字节后必须要有一个5ms的延时。AT24CXX字节写的时序如图下所示。(2)页面写 页面写和字节写操作类似,只是主器件在完成第一个数据传送之后,不发送停止信号,而是继续发送待写入的数据。先将写控制字节,字地址发送到AT24CXX,接着发X个数据字节,主器件发送不多于一个页面的数据字节到AT24CXX。这些数据字节暂存在片内页面缓存器中,在主器件发送停止信息以后写入存储器。接收每一字节以后,低位顺序地址指针在内部加1,高位顺序字地址保持为常数。如果主器件在产生停止信号以前发送了多于一页的数据字节,地址计数器将会循环归0,并且先接收到的数据将被覆盖。像字节写操作一样,一旦停止信号被接收到,则开始内部写周期(5ms)。AT24CXX页面写的时序如图所示:4、读操作 当从器件地址的R/W位被置为1时,启动读操作。AT24CXX系列的读操作有3种类型:读当前地址内容、读指定地址内容、读顺序地址内容。(1)读当前地址内容 AT24CXX芯片内部有一个地址计数器,此计数器保持被存取的最后一个字的地址,并自动加1。因此,如果以前读/写操作的地址为N,则下一个读操作从N1地址中读出数据。在接收到从器件的地址中R/W位为1的情况下,AT24CXX发送一个应答信号(ACK)并且送出8位数据字后,主器件将不产生应答信号(相当于产生NO ACK),但产生一个停止条件,AT24CXX不再发送数据。AT24CXX读当前地址内容的时序如图所示。(2)读指定地址内容 这是指定1个需要读取的存储单元地址,然后对其进行读取的操作。操作时序如下图所示。 其操作步骤是,首先主器件给出一个起始信号S,然后发出从器件地址1010A2A1A00(最低位置0),再发需要读的存储器地址;在收到从器件的应答信号ACK后,产生一个开始信号S,以结束上述写过程;再发一个读控制字节,从器件AT24CXX再发ACK信号后发出8位数据,如果接收数据以后,主器件发NO ACK后再发一个停止信号S,AT24CXX不再发后续字节。(3)读顺序地址的内容 读顺序地址内容的操作与读当前地址内容的操作类似,只是在AT24CXX发送一个字节以后,主器件不发NO ACK和STOP,而是发ACK应答信号,控制AT24CXX发送下一个顺序地址的8位数据字。这样可读X个数据,直到主器件不发送应答信号(NO ACK),而发一个停止信号。AT24CXX读顺序地址内容的时序如图所示。/*本程序功能:一上电单片机将软件中已经准备好的16个数字写入24C16(按页写入),*随后单片机再从24C16中把16个数读出来,通过串口发送给PC机,通过串口监控助手显示。*/user1/6248/index.html*/#include #include #define uchar unsigned char#define uint unsigned intsbit SDA=P20;sbit SCL=P21;/uchar code Number16=1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4;uchar Buffer16=0;/* 函数名:delay *功能:延时 *参数:无 *返回:无 *日期:*/void delay(uint x) uchar j; while(x-) for(j=0;j125;j+) ;/* 函数名:nop *功能:延时 *参数:无 *返回:无 *日期:*/void nop() _nop_(); _nop_(); _nop_(); _nop_(); _nop_();/* 函数名:send_char *功能:发送字符串 *参数:da *返回:无 *日期:*/void send_char(uchar *da) uchar jj=0; ES=0; /关闭串口中断 do SBUF=*da; while(!TI); TI=0; da+; jj+; while(jj!=16); ES=1; /打开串口中断 /* 函数名:InitUART *功能:串口初始化波特9600 *参数:无 *返回:无 *日期: */void InitUART() TMOD = 0x20; SCON = 0x50; TH1 = 0xFD; TL1 = 0xFD; PCON = 0x00; EA = 1; ES = 1; TR1 = 1;/* 函数名:start_iic *功能:产生总路起始信号S *参数:无 *返回:无 *日期: */void start_iic() SDA=1; /发送起始条件数据信号 SCL=1; nop(); /起始建立时间大于4.7 SDA=0; /发送起始信号 nop(); SCL=0; /箝位 /* 函数名:stop_iic *功能:产生总线停止信号P *参数:无 *返回:无 *日期: */void stop_iic() SDA=0; /发送停止条件的数据信号 SCL=1; /发送停止条件的时钟信号 nop(); /停止建立时间大于4 SDA=1; /发送停止信号 nop(); /* 函数名:ack_iic *功能:产生总线停止信号 *参数:无 *返回:无 *日期: */void ack_iic() SDA=0;nop(); SCL=1; nop(); SCL=0; /* 函数名:nack_iic *功能:产生总线非应答信号*参数:无 *返回:无 *日期: */void nack_iic() SDA=1;nop(); SCL=1; nop(); SCL=0; SDA=0;/* 函数名:write_byte *功能:向虚拟总线上发送1字节数据*参数:无 *返回:无 *日期: */void write_byte(uchar c)uchar i;for(i=0;i8;i+) if(c&0x80) SDA=1; /判断发送位else SDA=0; SCL=1; /时钟线为高,通知从器件开始接收数据 nop(); SCL=0; c=c1; /准备下一位 SDA=1; /释放数据线,准备接收应答信号SCL=1;nop(); if(SDA=1) F0=0; /判断是否收到应答信号 else F0=1; SCL=0;/* 函数名:read_byte *功能:从虚拟总线上读取1字节数据*参数:无 *返回:无 *日期: */uchar read_byte() uchar i;uchar r=0;SDA=1; /置数据线为输入方式for(i=0;i8;i+) r=r1; /左移补0 SCL=1; /置时钟线为的高,数据有效 nop(); if(SDA=1) r+; SCL=0; /当数据线为高时,加1 return r;/* 函数名:write_nbyte *功能:向虚拟总线上发送N字节数据*参数:控制字slave,字地址addr,发送的数据*s,数量numb *返回:0/1 *日期: */bit write_nbyte(uchar slave,uchar addr,uchar *s,uchar numb)uchar i;start_iic(); /发送起始信号write_byte(slave); /发送从器件地址if(F0=0) return 0;write_byte(addr); /发送器件内部地址if(F0=0) return 0;for (i=0;inumb;i+) write_byte(*s); /发送数据 if(F0=0) return 0;s+; stop_iic(); /发送停止信号 delay(5);return(1);/* 函数名:read_nbyte *功能:从虚拟总线上读取N字节数据*参数:控制字slave,字地址addr,接收的数据*s,数量numb *返回:0/1 *日期: */bit read_nbyte(uchar slave,uchar addr,uchar *s,uchar numb)uchar i;start_iic(); /发送起始信号write_byte(slave); /发送从器件地址if(F0=0) return 0;write_byte(addr); /发送器件内部地址if(F0=0) return 0;start_iic(); /发送起始信号write_byte(0xa1); /发送从器件地址if(F0=0) return 0;for(i=0;inumb-1;i+) /读取多字节时,读取最后一个字节后,主机要发NO ACK信号给从机 *s=re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论