基于I_2C总线的EEPROM与单片机接口技术
- 格式:pdf
- 大小:242.90 KB
- 文档页数:4
第15卷 第2期 重 庆 工 学 院 学 报 2001年4月Vol.15 No.2 Journal of Chongqing Institute of T echnology Apr.2001 文章编号:1006—401X (2001)02—0028—04基于I 2C 总线的EEPROM 与单片机接口技术Ξ杨正进1,王玉霞2(1.重庆大学自动化学院智能自动化研究所,重庆 400030;2.重庆金美通信有限责任公司,重庆 400000)摘要:介绍了基于I 2C 总线的串行EEPROM 与单片机的接口应用,举例说明两个主器件之间通信可用的最简便方法,提出实际应用中应注意的问题和解决办法,并给出了程序清单。
关键词:I 2C 总线;单片机;EEPROM中图分类号:TP368.1 文献标识码:A 一般的控制系统通常包括至少一个微控制器及其外设,如存储器和I/O 设备,而通常并不需要很高的速度。
不同器件之间采用I 2C 总线互联,极大地方便了系统设计者,使之无须设计总线接口,并且从系统中去掉或增加集成电路不会影响总线上的其它集成电路芯片。
I 2C 总线即Inter IC BUS ,为芯片间串行总线,便于用户实现标准化、系列化设计。
I 2C 总线有如下特点:(1) 只有两根线:串行数据线S DA 和串行时钟线SC L ;(2) 连接在总线上的器件可由软件寻址,其地址唯一;(3) 串行、8比特双向数据传输;(4) 允许同一总线上有多个主器件。
I 2C 总线上的器件,不管是微控制器,还是存储器,根据功能,都可以作为接收器或发送器。
例如,LC D 驱动器是接收器,而存储器则既可作发送器,又可作接收器。
此外,发起数据传输的一方为主器件,其它则看作从器件。
由主器件产生时钟和开始信号。
近年来EEPROM 伴随单片机芯片间总线得到了极大的发展。
I 2C 总线的典型应用是单片机与带有I 2C 接口的串行EEPROM 器件互联,在智能控制及仪表中广泛用于常数、重要参数、系数的存放。
目前具有I 2C 总线接口的单片机有8XC550、8XC552、8XC652、8XC654、8XC751、8XC752,Philip 公司的M AB8420,SCC83C351等,M OT ORO LA 也在68HC05系列的某些单片机中配置了I 2C 总线。
对于原来没有I 2C 总线的单片机如8031等,可以采用I 2C 总线接口扩展器件PC D8584扩展出I 2C 总线接口。
EEPROM 可选用AT ME L 公司的AT 24C16。
它是16384比特的串行2总线EEPROM ,遵从I 2C 协议。
该片功耗低、性能可靠,写入次数可达百万次,数据保存时间100年,工作电压范围很宽。
为了能在常用的MCS51单片机系统中应用串行EEPROM ,下面以MCS51单片机与AT 24C16的接口应用为例。
接口如下:图1 MCS51与AT 24C16接口图图中SC L 为串行时钟,S DA 为串行数据,二者均须经上拉电阻接至正电源,通过MCS51的P1口高两位与单片机接口。
A0~A2为芯片地址引脚,对于AT 24C16为空脚。
WP 为写保护引脚,若接地,则芯片可正常写入,若接Vcc ,则存储空间的高半部分为写保护区。
连接到总线上的器件的输出级必须为“开漏”或“开集”的形式,以便完成“线与”功能。
单片机作为主器件,EEPROM 作为从器件。
单片机与EEPROM 的通信由开始条件(ST ART )指示。
S DA 线上的数据只有当SC L 为低电平时才能改变,当SC L 为高电平时,S DA 的状态用于指示开始和停止条件:当SC L 为高时,S DA 由高到低跳变指示开始条件。
在开始条件之前,从器件不会响应任何命令;当SC L 为高时,S DA 由低到高跳变指示停止条件(ST OP ),用于结束一次通信,也用于使EEP 2ROM 进入等待状态。
确认(ACK )用于指示数据发送成功。
发送方发送了8比特数据后,在第9个时钟周期,被寻址Ξ收稿日期:2000-11-08作者简介:杨正进(19712),男(汉族),四川人,硕士,主要从事模式识别与智能控制.的接收方将S DA 置低作为应答,表示其收到了8比特数据。
开始条件产生后,主器件必须输出它要寻址的从器件的地址:其中,T 3~T 0为设备类型码,对于EEPROM ,固定为1010。
A2~A0对于AT 24C16为页地址。
R/W 用于指示主器件对从器件进行读操作还是写操作。
R/W 位为1,表示读,为0表示写。
对EEPROM 的操作如下:写操作:微控制器对EEPROM 写入数据,可有两种方式———字节写和页写。
字节写用于向EEPROM 任一地址写入一个字节数据。
当微控制器发出一个字节数据且收到EEPROM 的确认后,就产生停止条件,终止此次操作。
页写用于向EEPROM 写入16个字节。
注意,对于不同型号的EEPROM ,页写的字节数是不同的。
EEPROM 每收到一个字节,内部将数据地址低4位加1,以便接收下一个字节,并进行确认,微控制器收到确认后,继续发下一个字节,发完16个字节后,产生停止条件。
由于数据地址的高4位不会被内部自加,若微控制器发完16个字节后,未产生停止条件,而是继续发送数据,则内部数据地址计数器“卷回”当前页的开始处,本页开始的数据会被覆盖。
写操作流程如下(以字节写为例):图2 字节写操作流程读操作:用于微控制器从EEPROM 读取数据。
读操作的发起与写操作类似,但从地址的R/W 位不同。
读操作有3种方式:当前地址读、任意地址读、连续读。
当前地址读用于主器件读取EEPROM 当前地址的1字节数据。
EEPROM 内部的数据地址计数器当上一次访问结束后,加1,即指向下一个要访问的字节。
当接收到微控制器的读命令后,确认并发送当前地址的8比特数据。
微控制器收到后不作应答,而是直接产生停止条件。
任意地址读用于主器件读取EEPROM 任一地址的数据。
在读之前,微控制器必须先进行一次“空写”操作,即给出开始条件和从地址,并给出所读单元的字地址。
收到应答后,微控制器立即给出开始条件和R/W 位为1的从地址。
EEPROM 收到后,会作出确认并将所读单元的数据传来。
微控制器不作应答,而是产生停止条件来结束传输。
连续读可由当前地址读或者任意地址读启动。
读第一个字节的操作与前两种方式相同,不同的是此时微控制器会作出应答,表示还要接收数据,EEPROM 收到应答后,继续输出数据,此后,每收到一次应答就会输出一个数据,直到微控制器不作应答或产生停止条件为止。
读操作流程图如下:(以连续读为例,由当前地址读开始)图3 连续读操作流程 由于MCS51无I 2C 接口,故用软件模拟。
方法如下:开始条件:实际应用时,为了保证数据读写可靠,应考虑各信号跃变沿之间应有一定延时,可根据I 2C 总线规范并通过实验来确定所需延时。
模拟完I 2C 总线接口硬件时序,就可92杨正进 王玉霞:基于I 2C 总线的EEPROM 与单片机接口技术以根据前面讨论的流程来设计软件了。
下面给出向AT24C16进行字节写的源程序清单(向AT24C16的00H单元写入数据): SC L E QU P1.6S DA E QU P1.7ORG0000HLC A LL I NITLC A LL ST ARTM OV A,#A0H;写入器件地址A0HLC A LL WRITE BY TEM OV A,#数据;写入数据LC A LL WRITE BY TELC A LL ST OPE NDI NIT:C LR SC L;I2C总线初始化LC A LL ST OPST ART:SET B SC L;产生开始条件NOPC LR S DANOPC LR SC LNOPRETST OP:C LR S DA;产生停止条件NOP;延时SET B SC LNOPSET B S DAC LR SC LNOPRETWRITE BY T:M OV RO,#8;设循环变量WRITE BIT:C LR SC LR LC AM OV S DA,CSET B SC LD JNZ RO,WRITE BIT;循环写入8位C LR SC LNOPSET B SC LNOPJB S DA, ;等待EEPROM应答C LR SC LNOPRETI2C总线上可以有多个主器件。
如下图,有两个微控制器的I2C总线配置:图4 有两个微控制器的系统配置示意图A假定微控制器A想向微控制器B发送信息。
此时,可将A作为主器件,寻址从器件B,然后A发送,B接收,A 结束传输。
这里A是主发送器,B是从接收器。
若A想从B接收信息,则需A寻址B,B发送信息,A接收信息,并结束传输。
这里A是主接收器,B是从发送器。
可以看出,当两个微控制器想通过I2C总线通信时,其时序配合是比较复杂的。
若系统信息交换量不太大,速度不太高,则可采用另一种方案,即双方通过分时对EEPROM的特定区域进行读写以交换信息。
事先双方定义了一些协议,例如,规定某个区域作为某个特定的命令区。
用其中一个微控制器的某两个I/O引脚作为控制线,由软件控制避免两个主器件同时读写EEPROM。
例如,用CPU1的P1.0和P1. 1,当CPU1想向CPU2发命令时,向EEPROM的某一区域写入命令码,写完后,使P1.0为高,通知CPU2从EEPROM 读出命令。
当CPU2读完命令后,欲作出响应,则它会在EEPROM的特定区域写入响应码,写完后,使P1.1为高,通知CPU1可以对EEPROM操作,这样处理问题更简便。
示意图如下:图5 有两个微控制器的系统配置示意图BAT ME L公司系列串行EEPROM还有AT24C02/04/08/ 32/64/128/256/512等存储容量不同的EEPROM,其中,大部分型号可用A0、A1、A2引脚进行片选,即在同一I2C总线上可带4至8个相同型号的EEPROM器件。
此外,也可选用其它公司的类似芯片,如FAI LCHI LD公司的NM24C16/32等,使用方法大同小异。
实际应用中,对EEPROM器件的写入需要一定的写入时间(约10ms),除页写外,不能连续写入多个字节。
另外,由于EEPROM有一定寿命,如NM24C16可写入百万次,一般情况下足够,但对于一些特殊应用,可通过有规律地改变数据写入地址的方法来延长其寿命。
03重庆工学院学报I 2C Bus -based I nterface Technology of MCU and EEPROMY ANG Zheng -jin 1,WANG Y u -xia 2(1.Intelligent Automation Research Institute ,Automation C ollege ,Chongqing University ,Chongqing 400030,China ;2.Chongqing Jinmei C ommunication -Liability C om pany Ltd ,Chongqing 400000,China )Abstract :This paper introduces the application of I2C bus -based interfaces between MC U and EEPROM ,describes the m ost convenient methods of communication between tw o master devices via examples ,puts forward the problems existing in practical application and their res olutions ,and gives the program list.K ey w ords :I 2C bus ;MC U ;EEPROM(责任编辑 许洪斌)(上接第24页) break ; } } }E A =1;return biao =0;}5 结束语由于单片机的在系统可编程在单片机的开发上可以大大的方便开发者,特别是大型系统的开发调试上有很大的使用价值,因而推广此方法有很重要的意义。