串行EEPROM 93C46的操作方法

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SK=1; SK=0; // 1 address=address&0x3f|0x80; for(temp=8;temp!=0;temp­­) // 8 {
DI=address&0x80; SK=1; SK=0; address<<=1; } DO=1; for(temp=16;temp!=0;temp­­) // 16 { SK=1; result=(result<<1)|DO; SK=0; } CS=0; Ewds(); return(result); } 读取特定地址上的字(16 位)的流程: 1、打开写使能。 2、串行写入 110A5....A0(1 为 ORG 值,10 为 OP­CODE,A5....A0 为地址 0~63) 3、开始从 93C46 读取数据:将数据输出端置高,用来读取串行数据。在时钟的上升沿数据 更新。 4、片选置低,关闭写使能 5、返回读取的字(16 位)
程序流程: 1、打开写使能。 2、串行写入 101A5....A0(1 为 ORG 值,01 为 OP­CODE,A5....A0 为地址 0~63) 3、开始向 93C46 写入数据:将数据输入端根据要写入的字设置。在时钟的上升沿数据写入 芯片。 4、等待数据写入完毕:检测数据输出端的状态,当其为低时,说明写入完毕。 5、片选置低,关闭写使能
正是由于 EEPROM 具有以上特点,该器件可广泛应用于对数据存储安全性及可靠性要 求较高的应用场合,如门禁考勤系统,测量和医疗仪表,非接触式智能卡,税控收款机,预 付费电度表或复费率电度表、水表、煤气表以及家电遥控器等应用场合。该类型存储器在可 靠数据存储领域获得越来越广泛的应用。
但是,EEPROM 有固定的使用寿命,这是指某一位由 1 写为 0 或由 0 写为 1 的次数。 不同厂家的产品,相同厂家不同型号、系列的产品,它们的寿命也不尽相同,100 万次为常 见主流产品。
} CS=0; } 93C46 的擦/写禁止指令程序流程: 1、将片选置高,使芯片能够接受数据,同时置低时钟。 2、串行写入 0x98(二进制的 10000Xn.....X0),Xn.....X0 中 n=3 时为 16 位模式,n=4 时 8 位模式。 3、将片选关闭。
(2)读取数据指令: 读取指令将在数据输出端(Q)串行输出数据。当芯片接到一个读取指令后,指令与地
EWDS
擦/写禁止
00
00XXXXX
00XXXX
ERASE
擦字节或字
11
A6~A0
A5~A0
ERAL
擦全部
00
10XXXXX
10XXXX
WRAL 用同一数据写全部 00
01XXXXX D7~D0 01XXXX D15~D0
(1)擦/写使能与禁止指令: 擦/写使能指令在擦/写指令前要先执行,而擦/写禁止命令则会使以后的擦/写指令
在 16 位模式下写字节(8 位): void WriteChar(unsigned char address,unsigned char InData) { unsigned char temp=address>>1; if(address&0x01) Write(temp,(unsigned int)(Read(temp)&0x00ff|(InData<<8))); else Write(temp,(unsigned int)(Read(temp)&0xff00|InData)); }
93C46 的引脚定义:
引脚功能详细描述:
名称
功能描述
S
片选输入
D
串行数据输入
Q
串行数据输出
C
串行时钟
ORG
组织方式选择
VCC VSS 93C46 的操作方法:
电源 地
以下例程均工作于 16 位模式(ORG=1),可轻易改为 8 位模式,只需将 ORG 接低电平。
93C46 的数据接口采用 SPI,其读写时序如下图所示:
93C46 是 SPI 接口 EEPROM,其容量为 1K bits,它们被组织为 128 个字节(8 bits)或 64 个字(16 bits)。这个组织方式可以通过 ORG 输入端口进行选择。它有专门的指令集来实 现各种操作,包括字节/字读取、字节/字写入、字节/字擦除、全擦与全写。在执行读操 作时,先将要读取单元的地址写入到内部地址指针中。然后数据随着同步时钟串行输出。在 读完后,地址指针会自动增加,指向下一个单元,当然前提是芯片处于被选中的状态(片选 输入为高电平)。采用这种方法,可以使其可以以数据流方式来读取。 93C46 的芯片封装图:
写入一个字(16 位): // Writes memory location An ­ A0. void Write(unsigned char address,unsigned int InData) { unsigned char temp; Ewen(); SK=0; DI=1; // 101 A5­A0 CS=0; CS=1; SK=1; SK=0; // 1 address=address&0x3f|0x40; for(temp=8;temp!=0;temp­­) // 8 { DI=address&0x80; SK=1; SK=0; address<<=1; } for(temp=16;temp!=0;temp­­) // 16 { DI=InData&0x8000; SK=1; SK=0; InData<<=1; } CS=0; DO=1; CS=1; SK=1; while(DO==0) // busy test { SK=0; SK=1; } SK=0; CS=0; Ewds(); }
在 16 位模式下读写字节(8 位): unsigned char ReadChar(unsigned char address) { unsigned char temp=address>>1; if(address&0x01) return((unsigned char)(Read(temp)>>8)); else return((unsigned char)(Read(temp))); }
程序流程: 1、先将要写入的字节所在的字读出。 2、根据原始地址的最后一位决定把要写入的字节放到高八位还是低八位。如果为1 高八位, 0 为低八位。 3、把合成的字写入到相应地址上。
(4)擦除指令: 擦除指令将把相应地址的字节或字置为全 1。只要地址被解码,在片选信号的下降沿时
芯片开始自身的编程操作。与写指令类似,擦除指令也有“忙”状态。
擦/写使能指令程序: // Disables all programming instructions. void Ewds() { unsigned char temp,InData; CS=0; SK=0; CS=1; InData=0x80; // 10000XXXX for(temp=9;temp!=0;temp­­) // 9 { DI=InData&0x80; SK=1; SK=0; InData<<=1;
{ DI=InData&0x80; SK=1; SK=0; InData<<=1;
} CS=0; } 程序中,先将片选置高,使芯片能够接受数据,同时置低时钟。串行写入 0x98(二进 制的 10011Xn.....X0),其中 10011 中的 1 为 ORG 值,1 为 16 位模式,0 为 8 位模式;00 为 OP­CODE,在不同的操作中 OP­CODE 是不同的,如上表所示。Xn.....X0 中 n=3 时为 16 位模式,n=4 时 8 位模式。最终将片选关闭。 擦/写使能指令的时序:
串行 EEPROM 93C46 的操作方法
EEPROM (Electrically Erasable Programmable Read­Only Memory),电可擦可编程只读存 储器,是一种掉电后数据不丢失的存储芯片。EEPROM 可以在电脑上或专用设备上擦除已 有信息而重新编程。与擦除式只读存储器(EPROM)类似,电源消失后,储存的数据依然存 在,要消除储存在其中的内容,不是用紫外线照射方式,而是以电子信号直接消除即可。
数据读取:
数据写入:
93C46 共有七种操作,如下列所示:
指令
功能描述
操作码 ORG=0 字节 数据 ORG=1 字 数据
READ
百度文库
读取数据
10
A6~A0
Q7~Q0 A5~A0 Q15~Q0
WRITE
写入数据
01
A6~A0
D7~D0 A5~A0 D15~D0
EWEN
擦/写使能
00
11XXXXX
11XXXX
无效。在上电后,在擦/写使能指令执行前,擦/写禁止指令执行后,擦/写指令都是无效 的。为了保护芯片内的数据,建议在每一个写周期后都执行一次擦写禁止指令。读数据指令 的执行与擦/写使能与禁止指令是无关的。 擦/写使能指令的时序:
擦/写使能指令程序: // Write enable must precede all programming modes. void Ewen() { unsigned char temp,InData; CS=0; SK=0; CS=1; InData=0x98; // 10011XXXX for(temp=9;temp!=0;temp­­) // 9
址将会被解码,并将相应地址上的数据送入输出移位寄存器。输出的数据是从高位开始发送 的。数据在时钟的上升沿改变。在读出一个单元的数据后,芯片内的数据指针将自动自增, 指向下一个单元,因此可以继续读取数据,直到片选为低电平。 读取数据指令时序:
读取数据指令程序: // Reads data stored in memory, at specified address. unsigned int Read(unsigned char address) { unsigned char temp; unsigned int result; Ewen(); SK=0; DI=1; // 110 A5­A0 CS=0; CS=1;
擦除指令时序:
程序 流程 (5)全擦指令:
全擦指令将存储器所有单元都置为全 1。芯片对自身擦除的过程中,其处理“忙”状态。 全擦指令时序:
程序 流程 (6)全写指令:
如果是一个正确的操作,在全写指令前应先执行全擦指令,然后将数据写到所有单元上。 全写指令时序:
程序 流程
程序流程: 读字节: 1、将地址右移一位,右移后的地址为要读取的字节所在字的地址。 2、位于所在字的高八位还是低八位由原始地址的最后一位决定,如果为1 则取读到的字的 高八位,否则为低八位。 3、返回结果(8 位)
(3)写取数据指令: 写指令是跟在地址后面的,向芯片写入 8 位或 16 位的数据。在时钟信号的上升沿数据
被写入。在最后一个数据位写入后,在下一个时钟上升沿产生以前,片选应重新置为0,为 的是完成芯片自身的编程操作。如果 93C46 在编程周期内,并且片选为高电平,则其处理 “忙”状态(Q=0),芯片会忽略所有的总线上所有的数据。当编程周期完毕后,就绪信号 (Q=1)指示可以接收新的指令。写指令在写入数据前有一个擦除周期,所以在写入数据前 就不用再另外执行擦除指令了。 写指令时序:
相关文档
最新文档