当前位置:首页 > 单片机 > 单片机
[导读]AT24Cxx系列EEPROM是由美国Mcrochip公司出品,1-512K位的支持I2C总线数据传送协议的串行CMOS E2PROM,可用电擦除,可编程自定时写周期(包括自动擦除时间不超过10ms,典型时间为5ms)的。串行E2PROM一般具有两种写入

AT24Cxx系列EEPROM是由美国Mcrochip公司出品,1-512K位的支持I2C总线数据传送协议的串行CMOS E2PROM,可用电擦除,可编程自定时写周期(包括自动擦除时间不超过10ms,典型时间为5ms)的。串行E2PROM一般具有两种写入方式,一种是字节写入方式,还有另一种页写入方式。允许在一个写周期内同时对1个字节到一页的若干字节的编程写入,1页的大小取决于芯片内页寄存器的大小。其中,AT24C01具有8字节数据的页面写能力,AT24C02/04/08/16具有16字节数据的页面写能力,AT24C32/64具有32字节数据的页面写能力

AT24CXX的驱动是基于IIC的,在基本的IIC上加入了一些通讯协议,具体如下

1.随机写


主器件发送起始命令和从器件地址
信息(R/W 位置 0)给从器件,主器件在收到从器件产生应答信号后,主器件发送 1 个 8 位字节地
址写入 AT24C01/02/04/08/16 的地址指针,对于 AT24C31/64/128/256 来说,所不同的是主器件发
送两个 8 位地址字写入 AT24C32/64/128/256 的地址指针。主器件在收到从器件的另一个应答信号
后,再发送数据到被寻址的存储单元。AT24Cxx 再次应答,并在主器件产生停止信号后开始内部
数据的擦写,在内部擦写过程中,AT24Cxx 不再应答主器件的任何请求

2.页写


。在页写模式下,AT24C01/02/04/08/16/32/64/128/256
可一次写入%208%20/16/16/16/16/32/32/64/64%20个字节数据。页写操作的启动和字节写一样,不同的是在
于传送了一字节数据后并不产生停止信号。主器件被允许发送%20P(AT24C01:P=7;
AT24C02/04/08/16:%20P=15;AT24C32/64:P=31;AT24C128/256:P=63)个额外的字节。每发送
一个字节数据后%20AT24Cxx%20产生一个应答位,%20且内部低位地址加%201,高位保持不变。如果在发送停
止信号之前主器件发送超过%20P+1%20个字节,地址计数器将自动翻转,先前写入的数据被覆盖。%20接
收到%20P+1%20字节数据和主器件发送的停止信号后,AT24Cxx%20启动内部写周期将数据写到数据区。%20所
有接收的数据在一个写周期内写入%20AT24Cxx

3.立即读


也就是说,立即读取读取的是存储器内部指针的当前数据,不需要我们设定地址

4.随机读


随机读操作允许主器件对寄存器的任
意字 节进行读操作,主器件首先通过发送起始信号、从器件地址和它想读取的字节数据的地
址执行一个伪写操作。在 AT24Cxx 应答之后,主器件重新发送起始信号和从器件地址,此时
R/W 位置 1, AT24CXX 响应并发送应答信号,然后输出所要求的一个 8 位字节数据,主器件
不发送应答信号但产生一个停止信号。

随机读需要设定需要读的地址,然后有一次伪写入过程,这个伪写入是为了修改存储器内部的工作指针

5.顺序读


。顺序读操作可通过立即读或选择性读操作启
动。在 AT24Cxx 发送完一个 8 位字节数据后,主器件产生一个应答信号来响应,告知 AT24CXX
主器件要求更多的数据,对应每个主机产生的应答信号 AT24Cxx 将发送一个 8 位数据字节。当
主器件不发送应答信号而发送停止位时结束此操作。 从 AT24Cxx 输出的数据按顺序由 N 到 N+1
输出。读操作时地址计数器在 AT24Cxx 整个地址内增加,这样整个寄存器区域在可在一个读操
作内全部读出。当读取的字节超过 E(AT24C01,E=127;AT24C02,E=255;AT24C04,E=511;
AT24C08,E=1023;AT24C16,E=2047;AT24C32,E=4095;AT24C64,E=8191;AT24C128,
E=16383;AT24C256,E=32767)计数器将翻转到零并继续输出数据字节

顺序读其实就是在前两个的基础上,一个数据读完了不发送noack二十发送ACK这样就可以一直读下去,需要自己计数因为存储器内部指针会自动循环的


所以只要按照时序图的标准来祝贺IIC基础驱动,就能实现一个存储器的驱动了

代码如下


#ifndef__24CXX_H#define__24CXX_H#include"iic.h"#include"delay.h"#defineAT24C01127#defineAT24C02255#defineAT24C04511#defineAT24C081023#defineAT24C162047#defineAT24C324095#defineAT24C648191#defineAT24C12816383#defineAT24C25632767#defineEE_TYPEAT24C02#defineAT_ADDR0xa0#defineAT_CHECK_ADDR0X00#defineAT_CHECK_VALUE0X52u8At24cxxReadOneByte(u16ReadAddr);//指定地址读取一个字节voidAt24cxxWriteOneByte(u16WriteAddr,u8DataToWrite);//指定地址写入一个字节voidAt24cxxWriteLenByte(u16WriteAddr,u32DataToWrite,u8Len);//指定地址开始写入指定长度的数据u32At24cxxReadLenByte(u16ReadAddr,u8Len);//指定地址开始读取指定长度数据voidAt24cxxWrite(u16WriteAddr,u8*pBuffer,u16NumToWrite);//从指定地址开始写入指定长度的数据voidAt24cxxRead(u16ReadAddr,u8*pBuffer,u16NumToRead);//从指定地址开始读出指定长度的数据u8At24cxxCheck(void);//检查器件voidAt24cxxInit(void);//初始化IIC#endif

#include"24cxx.h"//初始化IIC接口voidAt24cxxInit(void){IIcInit();}//在AT24CXX指定地址读出一个数据//ReadAddr:开始读数的地址//返回值:读到的数据u8At24cxxReadOneByte(u16ReadAddr){u8temp=0;IIcStart();if(EE_TYPE>AT24C16){IIcSendByte(AT_ADDR);//发送写命令IIcWaitAck();IIcSendByte(ReadAddr>>8);//发送高地址}elseIIcSendByte(AT_ADDR+((ReadAddr/256)<<1));//发送器件地址0XA0,写数据IIcWaitAck();IIcSendByte(ReadAddr%256);//发送低地址IIcWaitAck();IIcStart();IIcSendByte(AT_ADDR+1);//进入接收模式IIcWaitAck();temp=IIcReadByte(0);IIcStop();//产生一个停止条件returntemp;}//在AT24CXX指定地址写入一个数据//WriteAddr:写入数据的目的地址//DataToWrite:要写入的数据voidAt24cxxWriteOneByte(u16WriteAddr,u8DataToWrite){IIcStart();if(EE_TYPE>AT24C16){IIcSendByte(AT_ADDR);//发送写命令IIcWaitAck();IIcSendByte(WriteAddr>>8);//发送高地址}elseIIcSendByte(AT_ADDR+((WriteAddr/256)<<1));//发送器件地址0XA0,写数据IIcWaitAck();IIcSendByte(WriteAddr%256);//发送低地址IIcWaitAck();IIcSendByte(DataToWrite);//发送字节IIcWaitAck();IIcStop();//产生一个停止条件DelayMs(10);}//在AT24CXX里面的指定地址开始写入长度为Len的数据//该函数用于写入16bit或者32bit的数据.//WriteAddr:开始写入的地址//DataToWrite:数据数组首地址//Len:要写入数据的长度2,4voidAt24cxxWriteLenByte(u16WriteAddr,u32DataToWrite,u8Len){u8t;for(t=0;t>(8*t))&0xff);}}//在AT24CXX里面的指定地址开始读出长度为Len的数据//该函数用于读出16bit或者32bit的数据.//ReadAddr:开始读出的地址//返回值:数据//Len:要读出数据的长度2,4u32At24cxxReadLenByte(u16ReadAddr,u8Len){u8t;u32temp=0;for(t=0;t

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭