24C系列串行EEPROM与单片机的接口设计及应用
2011-04-20刘静王计元
刘静,王计元
(上海电力学院计算机与信息工程学院,上海 200090)
电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM),其内容可由软件进行随机读写以实现数据的更新,并可在芯片断电的情况下长期保存片内信息,兼备了RAM和ROM的基本特点.
串行EEPROM使用内部集成电路(Inter Integrated Circuit,I2C)总线技术,只需占用微处理器的2个I/O引脚,且使用方便.目前,较为常用的串行EEPROM是24C系列,主要由ATMEL,MICROCHIP,XICOR,N-TIONAL等几家公司提供.24C系列串行EEPROM具有体积小、功耗低、型号多,以及工作电压允许范围宽、容量扩展配置极其灵活方便、读写操作相对简单等特点,广泛使用于各种家电、工业及通信设备中,主要用于保存设备所需要的配置数据、采集数据及程序等.
本文介绍了串行EEPROM(24C64)与单片机AT89S51的接口技术,并以24C系列串行EEPROM在语音录播系统中的应用为例,详细说明了单片机对EEPROM的读写操作.
1 24C系列串行EEPROM与单片机的硬件接口
1.1 引脚说明
本文以24C64芯片为例来说明串行EEPROM与单片机的接口设计,该芯片的8脚PDIP封装的引脚封装如图1所示.
图1 24C64引脚封装示意
引脚功能分别为:1~3脚(A0,A1,A2)为器件地址输入端,A0~A2用于设置芯片的器件地址,在同一总线上有多个器件时,可以通过设置A0~A2引脚来确定器件地址;4脚GND为接地端;5脚SDA为串行数据/地址输入输出端,用于在芯片读写时输入或输出数据、地址等,在SCL引脚输入时钟信号的上升沿将数据送入EEPROM器件,并在时钟的下降沿将数据读出,该引脚是漏极开路的双向引脚,使用时需加一个上拉电阻;6脚SCL为时钟输入端,如果是在单片机系统中使用,则由单片机控制,并根据单片机的程序要求产生串行同步时钟信号,以控制总线的存取;7脚WP是写保护脚,当其连接到VCC时,芯片均处于禁止写入状态,当其连接到VSS或悬空时,芯片处于正常的读写状态;8脚VCC为正电源[1].
1.2 硬件接口
在基于ISD语音芯片的随机语音录播系统中,可以利用一片串行EEPROM来存储每一段录音的起始地址和录音长度.24C64与AT89S51单片机的硬件接口电路如图2所示.将单片机的P3.0脚与24C64的SCL脚相连,通过单片机控制产生一定频率的时钟信号.将单片机的P3.1脚与24C64的SDA脚相连[2].
图2 24C64与单片机的硬件接口电路
图2中只接有一片24C64芯片用来保存数据,因此将地址端A0,A1,A2接地.而且该电路未进行写保护,所以将WP端接地.接在I2C总线上的器件分为主控器件和从器件两种.主控器件用于启动数据发送,产生SCL及结束数据传送.从器件是被主控器件寻址的器件.
图2中AT89S51单片机为主控器件,24C64为从器件.编写程序时,可定义单片机的P3.0脚为串行时钟线(SCL BIT P3.0),P3.1脚为数据线(SDA BIT P3.1).单片机最多可以连接8个64 k器件到同一总线上并列使用,器件地址由引脚A2,A1,A0设置.24C64芯片的器件地址为8位,其中高4位固定为1010,接下来的3位A2,A1,A0为器件的地址位,最低位R/W作为读写控制位,“1”表示对从器件进行读操作,“0”表示对从器件进行写操作[3].图2中A2A1A0为000,因此写操作为0A0H,读操作为0A1H.
2 串行EEPROM的读写操作
2.1 基本子程序
根据24C64芯片的时序操作和I2C总线协议对24C64与单片机的接口进行软件设计,以实现单片机对串行EEPROM的读写操作[4].
24 C64 的起始/停止时序如图3所示.
图3 24C64的起始/停止时序
将时钟线为高电平时数据线的任何电平变化看作总线的起始或停止信号.将电平从高到低的跳变作为I2C总线的起始信号,将电平从低到高的跳变作为I2C总线的停止信号,据此可以编写出读写I2C总线的启动和停止工作子程序[1].启动工作子程序如下:
24 C64 的写时序如图4所示.传输数据时,若时钟信号SCL为高电平,则SDA上的电平为有效数据;若时钟信号SCL为低电平,则允许改变SDA线上的数据.
图4 24C64的写时序
编写单片机向总线传送数据的程序时,可以在SCL为低电平时,将数据电平送到SDA,从而使SCL为高电平,此时SDA不应有电平跳变,延时后使SCL为低电平,然后再进行下一位数据传送直到完成.I2C总线协议规定,所有发送到SDA线上的数据信息必须为8位,首先传输数据的最高位.I2C总线每接收完一个字节,到第9个时钟信号后,会在SDA上回答一个低电平的应答信号,以此表示当前受控的器件已接收完一个字节,可以开始下一个字节的传送了.根据写时序图和以上分析可以编写出写数据到I2C总线的写8bit子程序.
以上是根据24C64芯片的操作时序和I2C总线协议编写的使用24C64芯片的基本操作,对24C64的读/写操作均要用到以上这几个子程序.
2.2 读写操作程序
以随机读与写单个字节为例,给出AT89S51单片机对24C64的读写操作程序.随机读时序图如图5所示.
图5 随机读时序
主器件首先通过发送起始信号,从器件地址和欲读取字节数据的地址执行一个伪写操作.在24C64应答后,主器件重新发送起始信号和从器件地址(R/W位置1),在24C64响应并发送应答信号后,输出所要求的一个8位字节数据,此时主器件不发送应答信号,但生成一个停止信号.
下面通过编写单片机从EEPROM的0006H地址把55H数据读出来的程序,来说明如何实现随机读子程序.单片机从24C64芯片中读出8位字节数据后,要求产生一个停止信号.首先编写产生停止信号的子程序.
24 C64 芯片的字节写时序如图6所示.在字节写模式下主器件首先发送起始信号和从器件地址信息(R/W位置0)给从器件,从器件收到后发送应答信号.然后主器件发送24C64存储单元的地址(两个8位地址字)到从器件,从器件收到后发送应答信号.最后主器件发送数据到被寻址的存储单元,24C64再次应答并在主器件产生停止信号后开始内部数据的擦写.在内部擦写过程中,24C64不再应答主器件的任何请求.
图6 字节写时序
下面通过编写将55H数据存放到EEPROM的0006H地址中的程序,来说明如何实现单字节写子程序.
3 结语
本文详细介绍了24CXX系列串行EEPROM的读写操作,并给出了AT89S51单片机对单字节数据读写操作的详细程序,论证了串行EEPROM可以作为数据存储器用于系统数据的存储过程.文中所给出的源代码,都已经在随机语音录播系统中通过调试.
[1]程可嘉,王振松,刘晓云.ISD2560在门禁系统语音播报中的应用[J].自动化技术与应用,2009(5):75-77.
[2]李朝青.单片机原理及接口技术[M].第3版.北京:北京航天航空大学出版社,2005:200-220.
[3]MARIAN Mitescu,IOAN Susnea.Microcontrollers in practice[M].Berlin:Springer Berlin Heidelberg,2005:19-113.
[4]高强,赫荣杰,李树良.串行E2PROM的读写应用[J].微处理机,2004,4(8):16-17.
(编辑白林雪)