当前位置:首页 > 单片机 > 单片机
[导读]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

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

在微控制器领域,MSP430与STM32无疑是两颗璀璨的明星。它们各自凭借其独特的技术特点和广泛的应用领域,在市场上占据了重要的位置。本文将深入解析MSP430与STM32之间的区别,探讨它们在不同应用场景下的优势和局限...

关键字: MSP430 STM32 单片机

STM32是由意法半导体公司(STMicroelectronics)推出的基于ARM Cortex-M内核的32位微控制器系列,以其高性能、低功耗、丰富的外设接口和强大的生态系统深受广大嵌入式开发者喜爱。本文将详细介绍S...

关键字: STM32 单片机

STM32与51单片机之间有什么差异呢?两者可以说是一场科技与性能的较量了。在科技飞速发展的今天,微控制器(MCU)已广泛应用于各类电子设备和系统中,发挥着举足轻重的作用。其中,STM32和51单片机作为两种常见的微控制...

关键字: STM32 51单片机 MCU

电磁铁是一种利用电流产生磁场的装置,具有快速响应、易于控制等特点,在工业自动化、电子设备、科学实验等领域有着广泛的应用。STM32是一款功能强大的微控制器,具有高性能、低功耗、易于编程等优点,是控制电磁铁的理想选择。本文...

关键字: 电磁铁 微控制器 STM32

边缘人工智能的实现涉及到三个基本 要素:安全性,连接性、自主性,而其中自主性是AI能力的体现,也是边缘AI有别于其他传统的物联网的关键。而通过ST Edge AI套件,就可以帮助各种不同类型的开发者实现覆盖全硬件平台的全...

关键字: 边缘人工智能 AI STM32

今天,小编将在这篇文章中为大家带来STM32单片机最小系统的有关报道,通过阅读这篇文章,大家可以对它具备清晰的认识,主要内容如下。

关键字: 单片机 单片机最小系统 STM32

STM32是一款由STMicroelectronics生产的微控制器系列,具有高性能、低功耗和丰富的外设资源。其中,串口通信是一种常用的通信方式,可以实现与其他设备之间的数据传输。

关键字: STM32 串口通信 微控制器

STM32是一种广泛使用的微控制器,具有丰富的通信接口。其中,串口通信是STM32与其他设备或系统进行数据交换的重要方式之一。本文将详细介绍STM32串口通信的原理、应用及常见故障。

关键字: STM32 串口通信

由于目前缺乏相应的监测技术,地下电缆线路出现异常运行状态无法被及时发现,久而久之易演变成大故障,最终只能通过更换地下电缆进行修复,耗费大量的人力、物力。鉴于此,开发了一种基于STM32的地下电缆异常状态检测系统,利用热传...

关键字: STM32 地下电缆

交通灯控制器是用于控制交通信号灯运行的设备,它可以根据交通流量、行人需求以及其他因素,动态地调整信号灯的变化时间和绿灯时长,以保证交通的流畅和安全。

关键字: 交通信号灯 STM32
关闭
关闭