E2PROM也是采用浮栅技术生产的可编程存储器,构成存储单元的MOS管的结构如图1所示。它与叠栅MOS管的不同之处在于浮栅延长区与漏区之间的交叠处有一个厚度约为80埃(埃是一个单位,Angstrom,1
= 0.1 纳米)的薄绝缘层,当漏极接地,控制栅加上足够高的电压时,交叠区将产生一个很强的电场,在强电场的作用下,电子通过绝缘层到达浮栅,使浮栅带负电荷。这一现象称为“隧道效应”,因此,该MOS管也称为隧道MOS管。相反,当控制栅接地,漏极加一正电压,则产生与上述相反的过程,即浮栅放电。与SIMOS管相比,隧道MOS管也是利用浮栅是否积累有负电荷来存储二值数据的,不同的是隧道MOS管是利用电擦除的,并且擦除的速度要快得多。
E2PROM电擦除的过程就是改写过程,它是以字为单位进行的。E2PROM具有ROM的非易失性,又具备类似RAM的功能,可以随时改写(可重复擦写100万次)。目前,大多数E2PROM芯片内部都备有升压电路。因此,只需提供单电源供电,便可进行读、擦除/写操作,为数字系统的设计和在线调试提供了极大的方便。

图1 E2PROM的基本结构
1. I2C接口的E2PROM
目前E2PROM的接口主要有两种,分别为I2C接口和SPI接口。图2是512K I2C接口的串行EEPROM24LC512。

图2

图3
图3以平面的方式显示了E2PROM的封装形式。型号24LC512中“L”表示低电压系列,一般指供电电压3.3V,C表示表示CMOS工艺。A0、A1、A2是E2PROM的器件地址选择线,主要用于芯片的扩展,000表示器件地址为0,001表示器件地址为1,最多可以扩展8个芯片。因此在读写命令时应注意芯片的命令地址与外部地址的匹配。
SCL,SDA为漏极开路的I2C接口,因此在使用时需外接上拉电阻。一般外接4.7K,如果扩展的芯片较多,可以外接3.3k或2.2K提高上拉效果。
(*上拉电阻,一般指电阻越小上拉能力越强,因此经常会说小电阻的上拉为强上拉,高阻值的上拉电阻为弱上拉).
2. I2C接口的硬件电路设计:
如图4所示,左边为FPGA/MCU, 右边为I2C接口的E2PROM,GPIO0-GPIO2用于芯片的扩展时选择对应的芯片,当有多个芯片通过I2C接口并联使用时,只有外部地址与I2C的读写地址匹配时,芯片才会应答,否则不应答。这样就可以把当前的读写使用权释放给其它芯片。

图4
3. I2C基本知识:
I2C总线在硬件连接上非常简单,是2线制的互联系统;时钟线为SCL,数据线为SDA。
I2C总线的读写速度分为:标准模式100K,快速模式400K,高速模式1M,超高速模式3.4M。因此在使用I2C总线时应注意对应芯片I2C接口的速度等级。I2C的地址用7位2进制数表示范围0-127. 因此一个I2C MASTER 总线理论上可以连接128个 SLAVE设备(实际上有些地址分配给特殊指令使用如11111111已经分配给复位指令, 所以连接不到128个设备)。在外部总线连接时SDA与SCL都需要上拉电阻。如图4,相关内容请阅读I2C接口与协议部分内容。
图4是标准的MCU与I2C接口的E2PROM的硬件电路设计结构,GPIO0-2用于选择串行E2PROM的芯片,与I2C在读写命令中的地址匹配。因此可以实现多片E2PROM的扩展。本例中最多可以实现8片的扩展。例:当选择的芯片是24C02时,A2、A1、A0根据芯片的硬件地址选择000-111。当芯片为24C04时,只有A2、A1可以编程,A0设为0。当芯片的型号为24C16时,A2、A1、A0都不可编程,设为000。如图5所示,

图5
I2C E2PROM的写时序,遵循I2C总线协议:
Start:在空闲(IDLE)状态(SDA,SCL都为高电平),SDA 由高到低转换。见图6
设备地址:I2C E2PROM的设备地址一般为0x50-0x57,即101_0000到101_0111.
左移一位,并在右边拼接读写控制形成一个8位的字节。如读为1010_0001(16’hA1),写为1010_0000(16’hA0)
I2C的发送总是由高位到低位顺序进行
应答ACK(Acknoledgement),在应答之前SDA应置为高阻状态,等待应答(低电平表示有应答)。并且应设置超时等待状态

图 6 I2C串行E2PROM的字节写控制

图7 I2C串行E2PROM的页写控制
4. 地址写入:
根据不同的E2PROM的容量地址为8位或16位,8位的寻址范围0-255共256字节,地址写入从高到底。如AT2401、2402、2404、2408、2416等。16位寻址范围0-65535,最大可以到64K字节。更大容量的寻址如AT24CM02,将高位地址线放在芯片(device)的命令码中。
应答(ACK),SDA设为高阻,等待应答。
DATA,根据命令中给定的读或写,决定数据流向。数据写或读又分为字节读写和页读写两种。

图8 I2C串行E2PROM的字节写控制

图 9 I2C 串行E2PROM的读写时序
停止(STOP),在SCL为高电平的条件下,SDA由低到高,I2C操作停止,进入空闲状态(IDLE)
WP提供芯片写保护,在高电平时禁止芯片写入,在低电平时开放写操作,因此图10的电路中WP接地实现E2PROM正常的读写操作。在设计中也可以连接到MCU或FPGA的GPIO上实现可编程的写保护控制。
特殊大容量AT24CM02 的扩展及地址寻址如图11所示。如果使用该芯片,建议仔细阅读该芯片的数据手册。

图10 I2C串行E2PROM扩展示意图

图 11 I2C串行E2PROM AT24CM02 的寻址方式
5. 编程时间间隔:
I2C在写入时,先把要编程的数据写到E2PROM内部的缓冲区,当I2C的操作结束后才会真正实现E2PROM内部编程,一般编程时间约为5 ms。因此前后两次编程时间间隔最低要保持5 ms左右的时间。
-
按页(page)写:
由于两次编程时间间隔5ms左右,严重影响了编程速度,因此I2C结构的EEPROM,提供了按页写入的方式。如图12,当地址写入并正确应答后,开始写入编程数据,和按字节写入不同,当一个字节写入完成后,写操作并没有停止,而是继续下一个字节的写入操作,直到一页完成,之后I2C进入IDLE状态,E2PROM启动内部编程,大约也是5ms左右。页的大小有8字节,16字节,32字节,64字节/页几种。8字节的页,一次写入最多8个字节,64字节/页,一次可以写入64个字节。由于采用页写入的方式,大大提高串行E2PROM的编程速度。

图12 页写入顺序及应答
6. I2C E2PROM的读时序:
当前地址读:对当前地址进行操作不需要有写地址的操作,给出读命令,后紧跟就是当前地址对应的数据输出。如图13所示.

图13 I2C串行E2PROM当前地址读
-
随机地址读:
由于随机地址读,就要有一个写入地址的过程,然后跟着读操作。如图14所示,无论当前地址读还是随机地址读,在DATA之后的应答阶段只要MASTER(MCU或FPGA)没有给出应答,在延时一个bit的时间间隔后就退出读过程.

图 14 I2C串行E2PROM随机地址读
-
顺序读:
无论当前地址读还是随机地址读,在每个DATA n之后,MASTER给出应答,就可以连续读下一个字节的数据 DATA n+1….,在最后一个DATA读出之后的应答阶段MASTER没有给出低电平应答,就会进入STOP,停止读过程,如图15所示,

图15 I2C串行E2PROM顺序读
对应视频: