串行i2c总线e2prom 24cxx

上传人:wt****50 文档编号:32989247 上传时间:2018-02-13 格式:DOC 页数:9 大小:195.50KB
返回 下载 相关 举报
串行i2c总线e2prom 24cxx_第1页
第1页 / 共9页
串行i2c总线e2prom 24cxx_第2页
第2页 / 共9页
串行i2c总线e2prom 24cxx_第3页
第3页 / 共9页
串行i2c总线e2prom 24cxx_第4页
第4页 / 共9页
串行i2c总线e2prom 24cxx_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《串行i2c总线e2prom 24cxx》由会员分享,可在线阅读,更多相关《串行i2c总线e2prom 24cxx(9页珍藏版)》请在金锄头文库上搜索。

1、花了几天时间,一直在研究 24CXX 的读取操作,今天终于搞明白了 ,刚开始在网上早了很多资料,还下了别人程序看,基本上有个概念了,就在书上抄了一段程序自己调调看,写好后,下载进去不行,测试了好久没有调出来,看了好几次程序也没有发现问题 后来开始怀疑书上的程序有问题,真是晕了 。昨天请教同事,说要在写周期延时 5-10MS,啊!不会吧,我的程序里好像没有延时哦,马上用“单片机小精灵”算了 5MS 塞进去,下载试试看吧,还真的行了, 哈哈。后来仔细看看了说明书,还真的要延时哦,刚开始没有仔细看,看来下次不能全相信书上的。我把资料整理了一下,感觉还是比较全的,正在做这个朋友可以参考一下,我把测试好

2、源程序也放上去了,有需要朋友可以下过去看看。串行 I2C 总线 E2PROM24CXXAT24CXX 系列 E2PROM 是典型的 I2C 总线接口器件。其特点是:单电源供电;采用低功耗 CMOS 技术;工作电压范围宽(1.85.5V);自定时写周期(包含自动擦除)、页面写周期值最大 10ms;具有硬件写保护。型号为 AT24CXX 的器件内部结构如图 1,引脚排列如图 2 所示。其中,SCL 为串行时钟引脚;SDA 为串行数据/ 地址引脚;WP 为写保护(当 WP 为高电平时,存储器只读;当 WP 为低电平时,存储器可读可写);A0、A1、A2 为片选或块选。器件的 SDA 为漏极开路引脚,

3、需要接上拉电阻到 VCC,其数据的结构为 8 位。输入引脚内接有滤波器,能有效抑制噪声。自动擦除(逻辑“1”)在每一个写周期内完成。AT24CXX 采用 I2C 规约,采用主/从双向通信,主器件通常为单片机。主器件产生串行时钟(SCL),发出控制字,控制总线的传送方向,并产生开始和停止条件。串行 E2PROM 为从器件。无论主器件还是从器件,接收一字节后必须发出一个应答信号 ACK。内部结构图:引脚图: 1、 控制字要求开始位以后,主器件送出一个 8 位的控制字节,以选择从器件并控制总线传送的方向。控制字节的结构如下所示:其中:控制字节的位 7位 4 为从器件地址位,确认器件的类型。此 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,则下

5、一字节进行读操作(R);若此位为 0,则下一字节进行写操作(W )。AT24CXX 的存储器矩阵内部分为若干块,每一块有若干页面,每一页面有若干字节。内部页缓冲器只能写入一页的数据字节,24C16 则可看成 8 片 24C02 为一体,主机发送不同的器件地址则是访问 24C16 内部的不同区块,24C32 以上的芯片由于其内部地址编码分两字节,突破了地址编码资源 11 位(3 位器件地址+8 位内部地址)的限制,因此总线容量也获得了扩充。当串行 E2PROM 产生控制字节并检测到应答信号以后,主器件将传送相应的字地址或数据信息。2、起始信号、停止信号和应答信号起始信号:当 SCL 处于高电平时

6、,SDA 从高到低的跳变作为 I2C 总线的起始信号,起始信号应该在读/写操作命令之前发出。停止信号:当 SCL 处于高电平时,SDA 从低到高的跳变作为 I2C 总线的停止信号,表示一种操作的结束。SDA 和 SCL 线上通常接有上拉电阻。当 SCL 为高电平时,对应的 SDA 线上的数据有效;而只有当 SCL 为低电平时,才允许 SDA 线上的数据位改变。数据和地址是以 8 位信号传送。在接收一字节后,接收器件必须产生一个应答信号 ACK,主器件必须产生一个与此应答信号相应的额外时钟脉冲,在此时钟脉冲的高电平期间,拉 SDA 线为稳定的低电平,为应答信号(ACK)。若不在从器件输出的最后一

7、个字节中产生应答信号,则主器件必须给从器件发一个数据结束信号。在这种情况下,从器件必须保持 SDA 线为高电平(用 NO ACK 表示),使得主器件能产生停止条件。根据通信规约,起始信号、停止信号和应答信号的时序如图所示。I2C 总线产生起始信号、停止信号和应答的时序3、写操作AT24CXX 系列 E2PROM 的写操作有字节写和页面写 2 种。(1) 字节写在指定地址写入 1 字节数据。首先主器件发出起始号 S 后,发送写控制字节,即 1010A2A1A0(最低位置 0,即 R/W 读/ 写控制位为低电平 0),然后等待应答信号,指示从器件被寻址,由主器件发送的下一字节为字地址,为将被写入到

8、 AT24CXX 的地址指针;主接收来自 AT24CXX 的另一个应答信号,将发送数据字节,并写入到寻址的存储器地址;AT24CXX 再次发出应答信号,同时主器件产生停止信号 P。注意写完一个字节后必须要有一个 5ms 的延时。 AT24CXX 字节写的时序如图下所示。(2) 页面写页面写和字节写操作类似,只是主器件在完成第一个数据传送之后,不发送停止信号,而是继续发送待写入的数据。先将写控制字节,字地址发送到 AT24CXX,接着发 X 个数据字节,主器件发送不多于一个页面的数据字节到 AT24CXX。这些数据字节暂存在片内页面缓存器中,在主器件发送停止信息以后写入存储器。接收每一字节以后,

9、低位顺序地址指针在内部加 1,高位顺序字地址保持为常数。如果主器件在产生停止信号以前发送了多于一页的数据字节,地址计数器将会循环归 0,并且先接收到的数据将被覆盖。像字节写操作一样,一旦停止信号被接收到,则开始内部写周期(5ms)。AT24CXX 页面写的时序如图所示:4、读操作当从器件地址的 R/W 位被置为 1 时,启动读操作。AT24CXX 系列的读操作有 3 种类型:读当前地址内容、读指定地址内容、读顺序地址内容。(1)读当前地址内容AT24CXX 芯片内部有一个地址计数器,此计数器保持被存取的最后一个字的地址,并自动加 1。因此,如果以前读/写操作的地址为 N,则下一个读操作从 N1

10、 地址中读出数据。在接收到从器件的地址中R/W 位为 1 的情况下,AT24CXX 发送一个应答信号(ACK)并且送出 8 位数据字后,主器件将不产生应答信号(相当于产生 NO ACK),但产生一个停止条件,AT24CXX 不再发送数据。AT24CXX 读当前地址内容的时序如图所示。(2)读指定地址内容这是指定 1 个需要读取的存储单元地址,然后对其进行读取的操作。操作时序如下图所示。其操作步骤是,首先主器件给出一个起始信号 S,然后发出从器件地址 1010A2A1A00(最低位置 0),再发需要读的存储器地址;在收到从器件的应答信号 ACK 后,产生一个开始信号 S,以结束上述写过程;再发一

11、个读控制字节,从器件 AT24CXX 再发 ACK 信号后发出 8 位数据,如果接收数据以后,主器件发NO ACK 后再发一个停止信号 S,AT24CXX 不再发后续字节。(3) 读顺序地址的内容 读顺序地址内容的操作与读当前地址内容的操作类似,只是在 AT24CXX 发送一个字节以后,主器件不发 NO ACK 和 STOP,而是发 ACK 应答信号,控制 AT24CXX 发送下一个顺序地址的 8 位数据字。这样可读 X 个数据,直到主器件不发送应答信号(NO ACK),而发一个停止信号。AT24CXX 读顺序地址内容的时序如图所示。/*本程序功能:一上电单片机将软件中已经准备好的 16 个数

12、字写入 24C16(按页写入),*随后单片机再从 24C16 中把 16 个数读出来,通过串口发送给 PC 机,通过串口监控助手显示。* http:/ #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

13、;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; /关闭串口中断doSBUF=*da;while(!TI);TI=0;da+;jj+;while(jj!=16); ES=1; /打开串口中断 /* 函数名:InitUART * 功

14、能:串口初始化波特 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.7SDA=0; /发送起始信号nop();SCL=0; /箝位/* 函数名:stop_iic * 功能:产生总线停止信号 P * 参数:无 * 返回:无 * 日期: */void stop_iic() SDA

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

当前位置:首页 > 机械/制造/汽车 > 机械理论及资料

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