单片机EEPROM的理解

EEPROM是“Eleally Eras-able Programmable Read-only”(电可擦写可编程只读)的缩写,EEPROM在正常情况下和EPROM-样,可以在掉电的情况下保存数据,所不同的是,它在特定引脚上施加特定或使用特定的总线擦写命令就可以在在线的情况下方便地完成数据的擦除和写入,这个特点使EEPROM被用于广阔的消费领域,如汽车、电信、医疗、工业和个人计算机相关的市场,主要用于存储个人数据和配置/调整数据
。EEPROM又分并行EEPROM和串行EEPROM,并行EEPROM器件虽然有很快的读写速度,但要使用很多引脚,电行EEPROM器件功能上和并行EEPROM基本相同,却可以提供更少的引脚数、更小的封装、更低的电压和更低的功耗,是现在使用的非易失性存储器中灵活性最高的类型。串行EEPROM按总线分,常用的有I2C、SPI、Microwire总线。本文将介绍这三种总线连接的编程方法。 
 阳总线  I2C总线(Inter Integrated Circuit内部总线)是两线式串行总线,仅需要时钟和数据两根线就可以进行数据传输,仅需要占用的2个I/O引脚,使用时十分方便。I2C总线还可以在同一总线上挂多个器件,每个器件可以有自己的器件地址,读写操作时需要先发送器件地址,该地址的器件得到确认后便执行相应的操作,而在同一总线上的其他器件不做响应,称之为器件寻址,这个原理就与我们打电话的原理相当。  
I2C总线产生于上世纪80年代,由PHILIPS公司开发,早期多用于音频和视频设备,如今I2C总线的器件和设备已多不胜数。最常见的采用I2C总线的EEPROM也已被广泛使用于各种家电、工业及通信设备中,主要用于保存设备所需要的配置数据、采集数据及程序等,如电视机中用于保存频道信息,电脑内存条中保存内存大小等相关信息,汽车里用于保存里程信息等。生产FC总线EEPROM的厂商很多,如ATMEL、Micro公司,它们都是以24来开头命名芯片型号,最常用的是24C系列。24C系列从24C01到24C512,C后面的数字代表该型号的芯片有多少K的存储位。如ATMEL的24C64,存储位是64K位,也就是说可以存储8K(8192)字节,它支持1.8V~5V,可以擦写1百万次,数据可以保持100年,使用5V电源时时钟可以达到400k,并且有多种封装可供选择。图1就是ATMEL24C64芯片的PID封装和用于内存条SPD(Serial Presence Detect)上的24芯片。  
图2是ATMEL公司24C64的引脚定义图。A0~A2用于设置芯片的器件地址,在同一总线上有多个器件时,可以通过设置A0~A2引脚来确定器件地址。SDA是串行数据引脚,用于在芯片读写时输入或输出数据、地址等,这个引脚是双向引脚,它是漏极开路的,使用时需要加上一个。  SCL脚是器件的串行同步时钟信号,如果器件是使用在单片机系统中,那么SCL脚应该由单片机控制,根据单片机的程序要求产生串行同步时钟信号,控制总线的存取。
WP脚是写保护脚,当这个脚接入高时,芯片中的数据均处于禁止写入状态(所禁止的地址段要看各芯片的详细资料),当把WP脚接到地线时,芯片处于正常的读写状态。
当一个电路正常使用时是不允许程序修改EEPROM中的数据的,除非在维护设置时才可以修改数据。只有在特定的电路状态下,在电路上设置WP跳线或用微处理器对WP进行控制,才可以更改数据。  
要在单片机系统中用I2C总线的EEPROM作存储设备时,先要了解I2C总线的基本驱动方法。在FC总线空闲时,SDA和SCL应为高电平,也只有在这个条件下,微处理器才可以控制总线进行传输数据。在数据传输刚开始时,总线要求有一个START(开始位)位作为数据开始的标识,它的要求是,SCL为高电平时,SDA有一个从高到低的电平跳变动作,完成这个动作后才可以进行数据传输,时序图参看图3“开始”部分。传输数据时,只有在SCL为高电平时,SDA上的电平为有效数据。编写单片机向总线送数据程序时,测可以在SCL还在低电平时,把数据电平送到SDA,然后拉高SCL,这时SDA不应有电平跳变,延时后拉低SCL,再进行下一位的数据传送直到完成。在总线上读数据时也是只有在SCL为高电平时,SDA为有效数据。时序参看图3“保持”部分。


传送数据完成后,总线要有一个STOP(结束位)位,来通知总线本次传输已结束,它的要求是,SCL为高时,SDA有一个从低到高的跳变动作,正好和START位相反。在编程时要注意:不要在SCL为高电平时改变SDA的电平状态,否则可能会被误认为是停止位,而使得操作失败。  FC总线每接收完一个字节(8个位)后,在第9个时钟信号时,会在SDA上回应一个低电平的ACK应答信号,以此表明当前受控的器件已接收完一个字节,可以开始下一个字节的传送了。时序图可以参看图4。  
编程时可以在传送完一个字节后,把连接SDA的I/O口线设置回读数据状态,如使用51系列的单片机时就要把I/O口置高电平,然后在SCL.脚设置一个脉冲,在SCL为高电平时读取SDA,如不为低电平就说明器件状态不空闲或出错。需要注意,因为SDA是双向的I/O,无论是接收还是器件接收,每个字节完成后,接收方都可以发送一个ACK回应给发送方。  I2C总线在操作受控器件时,需要先发送受控器件的器件地址,24景列的EEPROM也不例外,在每次命令前需要先发送一个字节的器件地址和读写标识,也可称为器件录址。图5是24C64的器件寻址命令中每个位所代表的意思。A2、A1、A0位是器件地址,它是对应于芯片的A2、A1、A0引脚,也就是说如果芯片A0引脚被设置成高电平时,在发送器件地址命令时字节中的A0位要设置为1,A0引脚为低电平时A0位设置为0。这样在同一总线上就可以连接8个24C64。  ATMEL公司的24C系列芯片24C32及以上的型号使用16位地址进行寻址。24C32之前的型号因为使用的是8位地址,所以在超过256字节的8位地址型号中会占用到A0、A1、A2位来做页地址,每页有256字节,以此解决地址位不足的问题。所以不同型号的器件地址位定义就有所不同,各型号的器件地址字节定义见图5~图7。  在设计选择器件时要注意的是,24C01是没有器件地址的,还有24C16/16A的A0~A2已被页地址占用完,也就是说这三个型号的芯片只能在同一总线上连接一个。器件地址字节中的R/W位是用于标识当前操作是读器件还是写器件,写器件时R/W位设置0,读器件时R/W位设置1。  24C系列芯片的读写指令格式只有几种,下面以24C64芯片的指令格式来说明。  写入单个字节  写入字节指令每次只能向芯片中的一个地址写入一个字节的数据。首先发送开始位来通知芯片开始进行指令传输,然后传送设置好的器件地址字节,R/W位应置0,接着是分开传送十六位地址的高低字节,再传送要写入的数据,最后发送停止位表示本次指令结束。图8是写入单个字节的时序图。  页写入  24C64支持32字节的页写入模式,它的操作和字节写入模式基本一样,不同的是它需要发送第一个字节的地址,然后一次性发送32字节的写入数据后,再发送停止位。写入过程中其余的地址增量由芯片内部完成。  图9为页写入的时序图。无论哪种写入方式,指令发送完成后,芯片内部才开始写入,这时SDA会被芯片拉高,直到写入完成后SDA才会重新变得有效,在编写微处理器程序时可以在写入的时候不停地发送伪指令并查询是否有ACK返回,如果有ACK返回则可以进行下一步操作。  读当前地址  这种读取模式是读取当前芯片内部的地址指针指向的数据。每次读写操作后,芯片会把最后一次操作过的地址作为当前的地址。在这里要注意的是在微处理器接收完芯片传送的数据后不必发送低电平的ACK给芯片,直接拉高SDA等待一个时钟后发送停止位。图10是读当前地址时序图。  读任意地址 “读当前地址”可以说是读的基本指令,读任意地址时只是在这个基本指令之前船一仑“伪操作”,这个伪操作传送一个写指令,但这个写指令在地址传送完成后就要结束,这时芯片内部的地址指针指到这个地址上,再用读当前地址指令就可以读出该地址的数据。图11是读任意地址的时序图。  连续读取  连续读取操作时只要在上面两种读取方式中芯片传送完读取数据后,微处理器回应给芯片一个低电平的ACK.应答,那么芯片地址指针自动加1并传送数据,直到微处理器不回应并停止操作。图12是连续读取的时序图。  
ATMEL公司的24C系列的其他型号的读写操作方式和上面介绍的基本相同,只是在8位寻址的芯片中地址位只用一个字节,还有就是在24C01中没有器件地址,地址位只占用高7位,最低位为R/W位。其他公司的24系列EEPROM芯片的驱动方式也和以上所介绍的基本一样。  图13是笔者设计的制作简单的24C读写器。可以用它来做24C芯片的驱动程序编写实验,也可以配合上位机程序(见本期配刊光盘“EEPROM读写器”)进行24C的读写。  该读写器的电路由一片AT89C2051芯片作为主控芯片,用于连接电脑的RS232和驱动24C芯片,使用11.0592M。RS232由两个三极管组成。部分则直接在RS232上的4、7引脚取电,取电时需要在用软件控制这两脚为+9V~+12V之间,再通过VD5稳压得到5.1V,无需外加电源。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 做单片机开发时UART,SPI和I2C都是我们最经常使用到的硬件接口,我收集了相关的具体材料对这三种接口进行了详细...
    梁睿坤阅读 67,894评论 7 31
  • 在使用单片机的过程中,I2C 通信可以说是最被广泛使用和采纳的协议之一,采用 I2C 协议可以占用更少的资源,链接...
    noparkinghere阅读 2,134评论 0 8
  • ​​​本文主要介绍嵌入式系统的一些基础知识,希望对各位有帮助。 嵌入式系统基础 1、嵌入式系统的定义 (1)定义:...
    OpenJetson阅读 3,290评论 0 13
  • 1、嵌入式系统的定义 (1)定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本...
    荣卓然阅读 1,795评论 0 5
  • 什么是嵌入式 IEEE(Institute of Electrical and Electronics Engin...
    Leon_Geo阅读 3,687评论 1 20