EEPROM要点.pdf

上传人:tbuqq 文档编号:5196800 上传时间:2020-02-19 格式:PDF 页数:15 大小:1.94MB
返回 下载 相关 举报
EEPROM要点.pdf_第1页
第1页 / 共15页
EEPROM要点.pdf_第2页
第2页 / 共15页
EEPROM要点.pdf_第3页
第3页 / 共15页
EEPROM要点.pdf_第4页
第4页 / 共15页
EEPROM要点.pdf_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《EEPROM要点.pdf》由会员分享,可在线阅读,更多相关《EEPROM要点.pdf(15页珍藏版)》请在三一文库上搜索。

1、常用串行 EEPROM的编程应用 EEPROM是“Electrically Erasable Programmable Read-only“(电可擦写可 编程只读存储器)的缩写,EEPROM在正常情况下和 EPROM一样,可以在掉电的情 况下保存数据,所不同的是它可以在特定引脚上施加特定电压或使用特定的总线 擦写命令就可以在在线的情况下方便完成数据的擦除和写入,这使EEPROM被用于 广阔的的消费者范围,如:汽车、电信、医疗、工业和个人计算机相关的市场, 主要用于存储个人数据和配置/ 调整数据。EEPROM又分并行 EEPROM和串行 EEPROM, 并行EEPROM器件虽然有很快的读写的速度

2、,但要使用很多的电路引脚。串行 EEPROM器件功能上和并行 EEPROM基本相同,提供更少的引脚数、 更小的封装、 更 低的电压和更低的功耗, 是现在使用的非易失性存储器中灵活性最高的类型。串 行EEPROM按总线分,常用的有 I2C,SPI,Microwire总线。本文将介绍这三种总线 连接单片机的编程方法。 I2C 总线 I2C 总线( Inter Integrated Circuit内部集成电路总线)是两线式串行总 线,仅需要时钟和数据两根线就可以进行数据传输,仅需要占用微处理器的2 个 IO 引脚,使用时十分方便。 I2C 总线还可以在同一总线上挂多个器件,每个 器件可以有自己的器件

3、地址, 读写操作时需要先发送器件地址,该地址的器件得 到确认后便执行相应的操作, 而在同一总线上的其它器件不做响应,称之为器件 寻址,这个原理就像我们打电话的原理相当。I2C 总线产生 80 年代,由 PHLIPS 公司开发,早期多用于音频和视频设备, 如今 I2C 总线的器件和设备已多不胜数。 最常见的采用 I2C 总线的 EEPROM也已被广泛使用于各种家电、工业及通信设备 中,主要用于保存设备所需要的配置数据、采集数据及程序等。生产I2C 总线 EEPROM的厂商很多,如 ATMEL 、Microchip 公司,它们都是以24来开头命名芯 片型号,最常用就是24C系列。24C系列从 24

4、C01到 24C512 ,C后面的数字代表 该型号的芯片有多少K的存储位。如 ATMEL 的 24C64 ,存储位是 64K位,也就是 说可以存储 8K(8192)字节,它支持1.8V 到 5V电源,可以擦写1 百万次,数 据可以保持 100 年,使用 5V电源时时钟可以达到400KHz ,并且有多种封装可供 选择。我们可以很容易的在身边的电器设备中发现它们的身影,如电视中用于保 存频道信息, 电脑内存条中保存内存大小等相关信息,汽车里用于保存里程信息 等等。图一就是 ATMEL24C64 芯片的 PID 封装和用于内存条SPD(Serial Presence Detect) 上的 24 芯片

5、。 图 1 图 2 图二是 ATMEL 公司24C64 的引脚定义图。 A0-A2用于设置芯片的器件地址,在 同一总线上有多个器件时, 可以通过设置 A0-A2引脚来确定器件地址。 SDA 是串行 数据引脚,用于在芯片读写时输入或输出数据、地址等,这个引脚是双向引脚, 它是漏极开路的,使用时需要加上一个上拉电阻。SLC 脚是器件的串行同步时钟 信号,如果器件是使用在单片机系统中,那么SLC 脚应该由单片机控制,根据单 片机的程序要求产生串行同步时钟信号,控制总线的存取。 WP 脚是写保护脚, 当 这个脚接入高电平时, 芯片的芯片数据均处于禁止写入状态(所禁止的地址段要 看各芯片的详细资料),当

6、把 WP 脚接到地线时,芯片处于正常的读写状态。当一 个电路要求正常使用时是不允许程序修改EEPROM中的数据,只有在维护设置才可 以修改数据, 这时可以在电路上设置 WP 跳线或用微处理器对 WP 进行控制, 这样只 有在特定的电路状态下才可以更改到数据。 要在单片机系统中应用 I2C总线的 EEPROM做存储设备时,先要了解 I2C总线的 基本驱动方法。 在I2C总线空闲时, SDA 和SCL 应为高电平, 也只有在这个条件下, 微处理器才可以控制总线进行传输数据。在数据传输的刚开始时, 总线要求有一 个START (开始位)位做为数据开始的标识,它的要求是SCL 为高时, SDA 有一个

7、 从高到低的电平跳变动作, 完成这个动作后才可以进行数据传输,时序图参看图 三 开始 。传输数据时,只有在 SCL 为高电平时, SDA 上的电平为有效数据。编写 单片机向总线送数据程序时则可以在SCL 还在低电平时, 把数据电平送到 SDA ,然 后拉高 SCL ,这时 SDA 不应有电平跳变,延时后拉低SCL ,再进行下一位的数据传 送直到完成。 在总线上读数据时也是只有在SCL 为高时,SDA 为有效数据。 时序参 看图三 保持 。传送数据完成后,总线要有一个STOP (结束位)位,来通知总线 本次传输已结束,它的要求是SCL 为高时, SDA 有一个从低到高的电平跳变动作, 正好和 S

8、TART 位相反。在编程时要注意的是:不要在SCL 为高时改变 SDA 的电平状 态,否则可能会被误认为是停止位,而使得操作失败。 图 3 I2C 总线在每接收完一个字节(8 个二进制位)后,在第九个时钟信号时, 会在 SDA上回应一个低电平的ACK应答信号,以此表明当前受控的器件已接收完 一个字节, 可以开始下一个字节的传送了。时序图可以参看图四。 单片机编程时 可以在传送完一个字节后,把连接SDA 的 IO 口线设置回读数据状态,如使用51 系列的单片机时就要把IO 口置高电平。然后在SCL操作一个脉冲,在SCL为高 时读取 SDA ,如不为低电平就说明器件状态不空闲或出错。需要注意因为S

9、DA是 双向的 IO,无论是微处理器接收还是器件接收,每个字节完成后,接收方都可 以发送一个 ACK回应给发送方。 图 4 I2C 总线在操作受控器件时,需要先发送受控器件的器件地址,24 系列的 EEPROM也不例外,在每次命令前需要先发送一个字节的器件地址和读写标识, 也可称为器件录址。图五是24C64的器件寻址命令中每个位所代表的意思。A2、 A1、A0位是器件地址,它是对应于芯片的A2、A1、A0引脚,也就是说如果芯片 A0引脚被设置成高电平时,在发送器件地址命令时字节中的A0位要设置为 1, A0引脚为低电平时 A0位设置为 0。这样不难看出在同一总线可以挂8 个 24C64 。 A

10、TMEL 公司的 24C系列芯片 24C32及以上的型号使用16 位地址进行寻址。 24C32 之前的型号因为使用的是8 位地址,所以在超过 256 字节的 8 位地址型号中会占 用到 A0、A1、A2位的来做页地址,每页有256 字节,以此解决地址位不足的问 题。所以不同的型号器件地址位定义就有所不同,各型号的器件地址字节定义如 图五至图七。要注意的是24C01是没有器件地址的,还有24C16/16A的 A0A2 已被页地址占用完, 也就是说这三个型号的芯片只能在同一总线上挂一个,所以 在设计电路选择器件时要注意这个问题。器件地址字节中的R/W位是用于标识当 前操作是读器件还是写器件,写器件

11、时R/W位设置 0,读器件时 R/W位设置 1。 图 5 图 6 图 7 24C系列芯片的读写指令格式只有几种,下面以24C64芯片的指令格式来说明。 写入单个字节 写入字节指令每次只能向芯片中的一个地址写入一个字节的数据。首先发送 开始位来通知芯片开始进行指令传输,然后传送设置好的器件地址字节,R/W位 应置 0,接着是分开传送十六位地址的高低字节,再传送要写入的数据,最后发 送停止位表示本次指令结束。图八是写入单个字节的时序图。 图 8(点击看大图) 页写入 24C64支持 32字节的页写入模式,它的操作基本和字节写入模式一样,不 同的是它需要发送第一个字节的地址,然后一次性发送32 字节

12、的写入数据后, 再发送停止位。 写入过程中其余的地址增量自己由芯片内部完成。图九页写入的 时序图。无论那种写入方式,指令发送完成后,芯片内部开始写入,这时SDA 会被芯片拉高, 直到写入完成后SDA 才会重新变的有效, 在编写微处理器程序时 可以在写入的时候不停发送伪指令并查询是否有ACK返回,如果有 ACK返回则可 以进行下一步操作。 图 9(点击看大图) 读当前地址 这种读取模式是读取当前芯片内部的地址指针指向的数据。每次读写操作 后,芯片会把最后一次操作过的地址作为当前的地址。在这里要注意的是在微处 理器接收完芯片传送的数据后不必发送给低电平的ACK给芯片,直接拉高SDA 等待一个时钟后

13、发送停止位。图十是读当前地址时序图。 图 10 读任意地址 “读当前地址 “可以说是读的基本指令, 读任意地址时只是在这个基本指令之 前加一个 伪操作 ,这个伪操作传送一个写指令,但这个写指令在地址传送完成 后就要结束, 这时芯片内部的地址指针指到这个地址上,再用读当前地址指令就 可以读出该地址的数据。图十一是读任意地址的时序图 图 11(点击看大图) 连续读取 连续读取操作时只要在上面二种读取方式中芯片传送完读取数据后,微处理 器回应给芯片一个低电平的ACK 应答, 那么芯片地址指针自动加一并传送数据, 直到微处理器不回应并停止操作。图十二是连续读取的时序图。 图 12(点击看大图) ATM

14、EL 公司的 24C 系列的其它型号的读写操作方式基本和上面介绍的相 同,只是在 8 位寻址的芯片中地址位只用一个字节,还有就是在24C01 中没有 器件地址,地址位只占用高7 位,最低位为 R/W 位.。其它公司的 24 系列的 EEPROM 芯片的驱动方式也基本和以上所介绍的一样。 图十三是笔者设计的制作简单的24C 读写器。可以用它来做24C 芯片的驱 动程序编写实验,也可以配合上位机程序做24C 的读写器使用。上位机程序及 相关内容向笔者发送电邮索要。电路是由一片 AT89C2051 芯 片做为主控芯片,作用是用于连接电脑的RS232和驱动 24C 芯片,晶振使用 11.0592M。R

15、S232电平转换是使用二个PNP 三极管组成。电源部分则直接在 RS232上的 4、 7 引脚取电, 取电时需要在用软件控制这两脚为+9V 至+12V 之间, 再通过 D5 稳压得到 5.1V, 无需外加电源。24C64的 SCL 和 SDA 连接到 P1.2/P1.3 脚,因这两个 IO 脚内部有上拉,所以无需外接上拉电阻。 图 13(点击看大图) 本文附带一份用 C 语言编写的实验源程序和编译好的HEX 文件,把 HEX 烧入到 AT89C2051 就可以开始实验了。实验程序是可以读写 24C32/64/128/256/512的任意地址 ,程序使用模块化函数设计, 读者朋友可以方便 的加入

16、到自己的程序中。 实验时可以用 http:/的串口调试软件。 单片 机程序设计了简单的通讯协议, 使用 57600比特率,通讯协议的数据包是这样定 义的:每个包有 4 个字节,命令字、地址高位、地址低位、数据。读取时命令字 为 00H,数据字节不可以用,返回读出的数据。写入时命令字为01H,返回 00H 为成功,返回 01H 为失败。要在 24C64 的 2F3H 地址上写入数据05H,则要发 送 01 02 F3 05 。 连接好实验电路板, 按图十四设置好串口, 打开串口后可以看到板上的LED 在闪烁。输入 01 02 F3 05,发送后便可以把05 写入到 24C64 的 02F3H 地

17、址中, 返回 00 为写入成功。 也可以用读命令看看是否05 已写入,输入 00 02 F3 00 发送后返回 05,说 明实验成功。 图 14 图 15 Microwire 总线 Microwire 总线是美国国家半导体公司研发的一种简单的串行通讯接口协 议,该总线是采用三线进行数据传输。Microwire 总线和 SPI总线一样数据输入 输出分别使用一根引线, 同样可以提供同步数据传输方式,可以适用在多种微控 制器、EEPROM 或 ADC 等场合。常用 EEPROM 的 93 系列芯片就是采用该总线 的芯片,采用 COMS 技术,体积小巧,和 24、25 系列芯片一样也是一种理想的 低功

18、耗非易失性存储器。常见的93 系列 EEPROM 存储器容量从 256 位到 16K 位。93 芯片广泛使用在各种家电、通讯、交通或工业设备中,通常是用于保存 设备或个人的相关设置数据。如最常见到网卡上的93 芯片就是用于保存网卡的 MAC 物理地址、供应商名称以及相关配置。生产93系列芯片的公司也有很多。 如 ATMEL 公司生产的 93C46 芯片是该公司生产的93 系列芯片的一种,它有 1K 位的存储空间,93 系列有二种数据输入输出模式, 分别为 8 位和 16 位数据模式, 1K 位的存储位就可以分为128 8 和 64 16, 它的电压范围是 2.7V 到 5.5V 和 1.8V

19、到 5.5V,可以适应低电压的应用,在5V 的电压下最高时钟频率可以达到2M, 芯片可以进行一百万次的擦写,数据可以保存一百年。图一是93C46 的 PID 封 装和用于网卡的 93LC46 芯片。 图 1 图 2 图二是 ATMEL 公司的 93C46 的 PID 封装引脚图。 CS引脚为片选引脚,高 电平为有效,用于同一总线上不同芯片的选择。在执行每一个指令之前先要把 CS拉高,指令完成后把CS 拉低使芯片进入复位休眠状态,CS 为低时,芯片保 持复位状态。在连续操作多个指令时,指令与指令间,CS必须要有不小于一个 TCS 时间的低电平保持, 使芯片复位。ATMEL 公司的 93C46 芯

20、片工作电压 2.7V 5.5V 的型号 TCS 不能小于 250ns, 工作电压 1.8V5.5V 的型号 TCS不能小于 1000ns。SK 是串行时钟输入引脚。 DI 是串行数据输入引脚,接收微控制器传向 芯片的数据、 地址和命令数据。 DO 是串行数据输出引脚。 ORG 引脚是内部数据 结构选择输入引脚,该脚为高电平时数据结构为 16,低电平时数据结构为 8, DC 是空脚。 图 3(点击看大图 ) 图三是 93C46 芯片的 MicroWire 总线时序图。在编写驱动程序前, 先要分析 一下这个时序图。从图中可以看到,在CS 被拉高至少 tCSS时间(CS 初始时间 ) 后, 才能开始

21、在 SK 上传送时钟信号, 时钟的正半周和负半周时间不能小于tSKH 和 tSKL。 最后一个时钟的正半周发送完后CS仍要保持 tCSH 时间(CS 保持时间 ) 后才可以拉低 CS,tCSH 的最小值可为 0。指令输入时数据在SK 的负半周低电 平时开始设置,图中的tDIS(DI 设置时间 ),在 SK 的高电平时至少保持tDIH 时 间(DI 保持时间 )。 在图中第四条时序线图中则可以看到在芯片读操作时DO 输入 1 或 0 时的时序,可以看出在SK 上升沿开始后 tPD0 或 tPD1 时,DO 才输出数 据,在编写驱动时就要注意读DO 时可在 SK 拉高好延时 tPD0(tPD1)后

22、才读取 DO 的值,否则会造成误读。第五条时序线图则时指芯片编程时在CS上升沿开 始 tSV 时间后 DO 输出状态值, tDF 是指 CS下降沿开始到 tDF 时间后才进入高 阻态。因为不同的芯片型号、工作电压和工作频率这么参数值都会有所不同, 93C46的具体参数可以参看光盘中的芯片资料。 93C46有 7 个操作指令,微处理器就是靠发送这几个指令来实现芯片的读写 等功能。表一是 93C46 的指令表。在 93C 的其它型号中指令基本是一样,所不 同的是地址位的长度, 在使用时要查看相关芯片资料,得知地址位长度后再编写 驱动程序。因为 93C 的数据结构有两种,所以地址位和数据位会有x8x

23、16 两种 模式,这在编程时也是要注意的。在ERASE、WRITE、ERAL、WRAL 指令之 前必须先发送 EWEN 指令,使芯片进入编程状态,在编程结束后发EWDS 指令 结束编程状态。 表 1 指令起始位命令代码 地址位数据位 说明 x8 x16 x8 x16 READ 1 10 A6-A0 A5-A0 读取指定地址数据 EWEN1 00 11xxxxx 11xxxx 擦写使能 10011-0x98 ERASE 1 11 A6-A0 A5-A0 擦除指定地址数据 WRITE 1 01 A6-A0 A5-A0 D7-D0 D15-D0 把数据写到指定地址0xA0 ERAL1 00 10xx

24、xxx 10xxxx 擦除所有数据,只在Vcc 为 4.5V-5.5V 有效 0x90 WRAL 没用 1 00 01xxxxx 01xxxx D7-D0 D15-D0 写指定数据到所有地址,只在Vcc 为 4.5V-5.5V 有效 EWDS1 00 00xxxxx 00xxxx 擦写禁止 0x80 (黑体三个命令合一) READ(读数据) 所有的指令的第一位为START(起始位),芯片确认起始位的条件是:CS 和 DI 为高电平时, SK 的第一个脉冲高电平时DI 仍为高电平。微控制器发送完 起始位后就可以输入7 种指令所需的命令代码、地址码和数据来完成指令操作。 READ 指令在发送完地址

25、码AN-A0 后(地址码位数位要根据型号和所选用的数 据结构来确定), DO 从高阻态变为低电平,在随后的一个SK 脉冲后在 DO 输 出 DN-D0 的数据 (数据位数由所选用的数据结构来确定),微控制器在这时读取 DO 取得数据,读取完数据后拉低CS结束指令。 图 4(点击看大图 ) EWEN (擦写使能) 芯片上电后就进入EWDS 擦写禁止状态,这时要进行擦写指令,微控制器 必须先要发送 EWEN 指令,使能芯片进入允许擦写的状态,否则操作任何擦写 指令都是无效的。在完成擦写操作后发送EWDS 指令,使芯片进入禁止擦写的 状态,这样可以防止因干扰或其它原因造成的数据错误。要注意的是: 在

26、第一个 EWEN 指令后芯片一直保持在擦写允许状态,直到使用EWDS 或开断电源,芯 片才会重新进入擦写禁止状态。 图 5(点击看大图 ) EWDS (编程禁止) 图 6(点击看大图 ) WRITE (写入数据) WRITE 指令在发送完数据位后, CS 至少拉低 tCS 时间再拉高,这时 DO 会从高阻态变为低电平来指示芯片正在进行编程,微控制器应在这时检测 DO,当 DO 再次拉高时芯片编程完成芯片进行就绪状态,这时才可以进行 下一个指令。芯片编程所需的时间为tWP,这个时间最大为 10mS,所以微控 制器在对芯片编程时最好用一个循环检测DO,当检测到高电平时,说明写 入过程结束,应该退出

27、循环体。如果循环体循环10MS 后仍然没有检测到高 电平时,说明有故障引起操作超时,这时要退出循环体,以免进入死循环。 这样的代码在前面文章的例子中也是有使用的。WRAL 指令和 WRITE 指令 对写入过程的处理方式是一样的,不一样的是WRAL 是把数据写入到所有 地址中,时间会长点,而且要求电源在4.5-5.5V。 图 7(点击看大图 ) WRAL (全部写入) 图 8(点击看大图 ) ERASE(擦除数据) ERASE 指令可以说是另一种形式的写入指令,所不同的是它不用发送数据, 它会把指定地址的所有数据位都置1, 也就是相当于用 WRITE 写入FF。 而 ERAL 指令就是相当于用W

28、RAL 写入FF,同样 ERAL 也需要工作在 4.5-5.5V 电源下。 (cs 必须先低后高经历一个脉冲后再检测是否就绪) 图 9(点击看大图 ) ERAL (擦除所有数据) 图 10(点击看大图 ) 在这里笔者把上一篇文章的电路更改了一下,使它不但能完成本篇的实验 外,还能配合笔者编写的上位机程序,成为一个简单实用的串行EEPROM 读写 器,它不单单可以支持93C 系列的芯片,同时也可以支持24C、25 系列等多种 芯片。图中的芯片插座IC2 的 1到 7 脚连接取 AT89C2051 的 P1.1至 P1.7,因为 P1.2-P1.7内部是有上位的,所以可以不用在外部加上拉电阻,而P

29、1.0/P1.1是需 要外部上拉的,所以在P1.1上加 R7 进行上拉。如不加这个电阻的话93C46的 读写实验就无法成功了。J1使用 DB9 的孔式接头,连接电脑时可以使用一根串 口延长线。图 12 是笔者用万用电路板制作的实验电路,这个电路最大的特点就 制作简单、体积小巧、无需外接电源,使用到单片机使其性能稳定,而且可以进 行程序的修改使其增加更多的芯片支持。图十二是笔者用万用板制作的实验电 路。 图 11(点击看大图 ) 图 12(点击看大图 ) 对 93C46的串口通讯实验方法和上一篇文章的方法是一样的,这里不再多 做介绍了,只是 93C46 多了一个擦除命令的实验,命令代码是02 00 00 00,发 送这个代码后擦除成功后就返回00,不成功返回 01。要注意的是擦除命令只在 VCC 在 4.55.5V 有效。 本文还有一相配套的上位机程序,使用此程序就可以用这个电路读写24C、 93C、25系列的串行 EEPROM 芯片。首先要把 EEPROM.hex 文件烧写到 AT89C2051 中,连接 PC串口就可以使用 EEPROM.exe软件进行读写了。软件 界面如图十三。 图 13

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1