你不知道的24CXX系列芯片的细节问题

  • 学习7928次

瑞生LPC1114开发板上的AT24C02

在电子开发过程中,会遇到很多莫名其妙的问题,很多人都会怪罪于硬件本身或者电路连接,但实际上,大多数情况下,都是自己对硬件的一知半解造成的,瑞生今天给大家说说在使用AT24CXX系列的EEPROM芯片时,大多数人都不知道的细节。希望对你做(高稳定)(高可靠)(高质量)产品有帮助。

1.给24cxx写入数据后,要等待至少5ms,才能再对它进行读写操作,你知道吗?

EEPROM写入周期5ms

上图是24cxx的datasheet,红线圈起来的特性(Self-timed Write Cycle),就是说它的写入周期。

EEPROM写字节时序详解

上图是写入一个字节的时序图以及解释,看最后两句,“当发送完Stop以后,EEPROM进入写入周期,时间需要twR。所有的输入引脚在写入周期都被禁能,EEPROM将不会有任何反应,直到写入周期完成”。这句话中提到了twr就是写入周期,我们在手册上查时序时间表,如下图:

EEPROM时序时间表

从图中红色圈起来的额部分即可再次看到手册上前面描述的5ms Self-timed Write Cycle.好了,这是理论上。

实践一下吧。找到瑞生LPC1114开发板例程EEPROM的模拟I2C通信的例程,你看一下“写一个字节”的函数。如下图所示:

void AT24C02_WriteOneByte(uint8_t WriteAddr, uint8_t DataToWrite)
{ 
 I2C_Start(); 
 I2C_Send_Byte(0XA0); 
 I2C_Wait_Ack(); 
 I2C_Send_Byte(WriteAddr); //发送地址
 I2C_Wait_Ack(); 
 I2C_Send_Byte(DataToWrite); //发送字节 
 I2C_Wait_Ack(); 
 I2C_Stop();//产生一个停止条件 
 delay_24c02();// AT24C02的写入周期是5ms,这里的延时一定要大于或者等于5ms 
}

最后一行,就是我加的延时大于5ms的延时函数。你把这个延时函数去掉,试着“写完就读”看看是否会读出写进入的数。(实际上,不管你写入什么,都会读出0xFF)

 

2. 24CXX系列芯片带“页写入”功能,每次最多可连续写入8个或者16个字节,你知道吗?

EEPROM页写入功能

AT24C01、AT24C02一次可连续写入8个字节;AT24C04、AT24C08、AT24C16一次可连续写入16个字节。

这里说的连续写入,是写入一个字节后,没有发送Stop命令,继续写下一个字节的情况。如下图:

EEPROM-PAGE-WRITE时序

 

3. 24CXX系类芯片有连续读出功能,你用过吗?

EEPROM连续读出功能

这里说的连续读出,是指读完一个数据以后没有发送Stop信号,读完一个再读一个,最后发送一个Stop信号。

 

4. 你知道下面时序图中的3个ACK一样吗?

EEPROM的三个ACK

上图就是第3条说的连续读出的时序。图中有3种ACK,底下的ACK是EEPROM给单片机发出的应答信号,上面的ACK是单片机给EEPROM发出的ACK信号,NO ACK是单片机给EEPROM发出的“不应答”信号。

应答:EEPROM给单片机发应答,EEPROM会把SDA引脚拉低,单片机负责检测SDA电平;单片机给EERPOM应答,单片机把SDA拉低,EEPROM会检测到SDA拉低,然后再输出一个字节。

不应答:千万不要理解成“不要给它应答”,而是发送一个“SDA为高电平”的信号。

很多人在做这个连续读出函数的时候,不知道读出一个数据以后,要给EEPROM发送应答信号,而是还在检测EEROPM给他发送的应答信号,造成从第二个字节开始,就无法读出正确的字节。

 

发表评论

关闭菜单