一、硬件设计
以上是EEPROM芯片AT24C02的硬件图。SCL和SDA引脚连接到了STM32对应的引脚上,结合
上拉电阻,构成了I2C通信总线。EEPROM芯片的设备地址一共由7位,其中高4位固定位1010b,
低3位则由A0/A1/A2信号线的电平决定。按照此图的连接,A0/A1/A2均为0,所以EEPORM的7位
设备地址是101 0000b。如下图所示,I2C通讯时地址跟读写方向一起构成一个8位数,当R/W位为
0时,表示写方向,电R/W位为1时,表示读方向。所以此处EEPROM芯片的写地址为0xA0,
读地址为0xA1。
EEPROM芯片还有一个WP引脚,具有写保护功能。当该引脚电平为高时,禁止写入数据,
当引脚电平为低时,可写入数据。此处直接接地,不使用写保护功能。
EEPROM芯片的最大特点是可按字节读写数据,掉电数据不丢失。
二、AT24C02时序
AT24C02共有2Kbit,256个字节的存储长度。其中,每8个字节一页,共32页。原文如下:
设备操作要求如下:
如上图:
在SCL为高电平时(主机控制SCL),接收方对SDA的电平进行采集。
在SCL为低电平时,接收方不对SDA进行数据采集。
如上图:
SCL为高电平时,SDA的一个下降沿被从机视为起始信号;
SCL为高电平时,SDA的一个上升沿被从机视为停止信号。
关于地址的描述如下:
写、读操作描述如下:
写、读时序:
Byte Write:字节写,主机发送起始命令和从机地址(R/W位为0)给从机,从机发送一个应答信号ACK
给主机。主机接收到该ACK信号后,主机发送字节地址(保存在从机的哪个字节上)给从机,主机接收到从机
发来的另一个ACK信号后,再发送数据到从机。从机(AT24C02)再次应答主机一个ACK信号给主机,主机接收到这个
ACK信号后,发送一个停止信号给从机,结束这个过程。从机接收到这个停止信号后,开始内部数据的擦写,在内部擦写过程
中,从机不再应答主机的任何请求。
Page Write:页写,AT24C02可一次写入8个字节数据。页写操作的启动和字节写一样,不同在于,
传送了一字节的数据后并不产生停止信号。主机被允许发送7个额外的字节。主机每发送一个字节数据后,
从机AT24C02产生一个应答位并将字节地址低位加1,高位保持不变。
如果在发送停止信号之前,主机发送超过8个字节,AT24C02地址计数器将自动翻转,先前写入的数据
被覆盖。
在接收到主机发送的停止信号后,AT24C02启动内部写周期将数据写到数据区。所有接收到的数据在一个
写周期内写入AT24C02。
应答查询:可以利用AT24C02内部写周期时禁止数据传输这一特性。一旦主机发送停止位指示操作结束
时,AT24C02启动内部写周期。应答查询可以启动,主机发送一个起始信号和进行写操作的从机地址,
如果AT24C02正在进行内部写操作,则不会发送应答信号给主机。如果AT24C02已经完成了自写周期,
将发送一个应答信号给主机,主器件可以继续进行下一次读写操作。
写保护:写保护操作特性可以使用户避免由于不当操作而造成对存储区域内部数据的改写。当WP管教
接高时,整个寄存器区域全部被保护起来而变为只可读取。AT24C02可以接收主机发送的从机地址和字节
地址,但是在接收到第一个数据字节后不发送应答信号给主机,从而避免存储区域被改写。
读操作:有三种不同的读操作。
立即地址读:Current Address ReadAT24C02的地址计数器内容为最后操作字节的地址加1.也就是说,如果上次读/写的操作地
址为N,则立即读取的地址从地址N+1开始。如果N=255(AT24C02是255,01是27,04是511,08是1023,16是2047),则计数器
将翻转到0且输出数据。这种模式下,AT24C02接收到主机发来的从器件地址(R/W位为1),它首先发送一个
应答信号,然后发送一个8为字节数据。主机不需要发送一个应答信号,但要产生一个停止信号。
选择性读:Random Read,选择性读操作允许主机对AT24C02的任意字节进行读操作。主机首先发送
起始信号、从机地址(此时R/W位为0)和主机想读取的字节数据的地址,执行一个伪写操作。
在AT24C02应答之后,主机从新发送起始信号和从器件地址,此时R/W位为1,AT24C02响应
并发送应答信号,然后输出所要求的一个8位字节数据。主机接收数据后,不发送应答信号但产生
一个停止信号。
连续读:Sequential Read,连续读操作可以通过立即读或选择性读操作启动。在AT24C02发送完一个8位数据后,
主机产生一个应答信号ACK来响应,告知AT24C02,主机要求更多的数据。AT24C02对应每个主机
产生的应答信号,AT24C02将发送一个8位的数据给主机。当主机不发送应答信号而发送停止信号时,
操作结束。
从AT24C02输出的数据,按顺序由N到N+1输出。读操作时地址计数器在AT24C02整个地址内增加,
这样整个存储区域可在一个读操作内全部读出。当读取的字节超过E(对02是255,04是511...),计数器
将翻转到0并继续输出数据字节。
参考文档:https://wenku.baidu.com/view/3fc8558002d276a200292ef9.html
《AT24C02数据手册》