at45DB161D 中文资料.docx
《at45DB161D 中文资料.docx》由会员分享,可在线阅读,更多相关《at45DB161D 中文资料.docx(18页珍藏版)》请在冰豆网上搜索。
![at45DB161D 中文资料.docx](https://file1.bdocx.com/fileroot1/2022-12/19/4d841213-f7a6-481a-875b-e1a8252c4fe4/4d841213-f7a6-481a-875b-e1a8252c4fe41.gif)
at45DB161D中文资料
SPI接口的FLASHROMAT45DB161D的驱动方法
(1)芯片介绍
AT45DB161D是串行接口的闪存芯片,可工作在2.5V~2.7V,可广泛应用于数据语音、图像、程序代码数据存储中。
AT45DB161D支持RapidS串行接口,适用于高速场合。
RapidS串行接口是与SPI相兼容的,速度可达到66MHz。
它包含有17,301,504个位,被组织为4096个页,每个页512或528个字节。
除了主存储器,AT45DB161D还包括两个SRAM数据缓冲区,每个缓冲区512/528个字节。
在主存储器正在编程时,缓冲区是允许接收数据的,并且支持数据流式写入。
与并行FLASH储存器不同,它采用RapidS串行接口,从而大大减少了可用引脚数量,同时也提高了系统可靠性,降低了开关噪声,缩小了封装体积。
可以应用于商业、工业等需要高密度、低引脚数、低电压与低功耗的应用场合。
AT45DB161D允许简单的在系统重新编程,而无需输入高编程电压。
芯片可以采用2.5V~3.6V或2.7V~3.6V单电源供电,进行编程与读取操作。
它可以通过#CS来进行使能,并通过三线接口(SI、SO、SCK)进行数据通信。
(2)引脚配置与封装
1.芯片封装图
2.引脚功能详述
符号
名称与功能
有效电平
类型
#CS
片选:
#CS用以选中芯片。
当#CS被设置为无效状态时,芯片则不被选中,并且处于闲置状态(不是深度睡眠状态),输出引脚SO处于高阻态。
当芯片未被选中时,从输入引脚SI输入的数据将不被接受。
#CS引脚上的下降沿将会启动一个操作,而上跳沿则会结束一个操作。
在一个内部操作如芯片内部的编程或擦除周期内,芯片不会进入闲置状态,直到操作完毕。
LOW
输入
SCK
串行时钟:
此引脚用来向芯片提供时钟信号,有来控制数据流的出入。
SI引脚上的命令、地址与输入数据在时钟SCK的上升沿被写入,而SO引脚上的输出数据则在时钟的下降沿变化。
-
输入
SI
串行输入:
SI引脚用来向芯片以移位方式写入数据。
SI引脚上的所有数据输入包括命令与地址。
SI上的数据在时钟的上升沿写入芯片。
-
输入
SO
串行输出:
SO引脚用来从芯片以移位方式输出数据。
SI上的数据在时钟的下降沿变化。
-
输出
#WP
写保护:
当#WP被设置为有效时芯片的扇区将被保护起来,以防止编程与擦除对数据的破坏。
但是扇区保护使能与扇区死锁命令仍然可以被芯片识别。
#WP引脚在内部被拉高,可以悬空。
但是仍然建议在外部接到VCC。
LOW
输入
#RESET
复位:
#RESET引脚上的低电平会终止正在处理的操作并复位内部状态机到闲置状态。
#RESET引脚上的低电平会使芯片一直处于复位状态。
当#RESET上转为高电平后,才能进行正常的操作。
芯片内部设置上电复位电路。
当此引脚不用时,外部接到高电平。
LOW
输入
RDY/#BUSY
就绪/忙碌状态指示:
此引脚是漏极开路的输出引脚。
当芯片处于忙状态时(内部操作过程中)此引脚为低电平,此引脚在正常状态下为高电平(外部接上拉电阻)。
当正在进行编程/擦除操作,比较操作与页-缓冲区传送时,被拉低。
忙状态指示FLASH储存阵列与某一个缓冲区不能被操作,而对另一个缓冲区的读与写操作仍然可以进行。
-
输出
VCC
芯片电源供给
-
电源
GND
地:
此引脚应与系统地接在一起。
-
地
(3)AT45DB161D的功能框图:
(4)存储器阵列:
AT45DB161D的储存器阵列被分为3个级别的粒度,分别为扇区、块与页。
下面的“存储器结构图”对各个级别进行了分析,详细说明了每个扇区与块的页数。
所有的编程操作都是针对于页的。
擦除操作可以作用于芯片、扇区、块或页。
扇区结构:
(扇区0A)=8页4096/4224字节
(扇区0B)=248页126,976/130,944字节
(扇区1)=256页131,072/135,168字节
(扇区2)=256页131,072/135,168字节
……
(扇区14)=256页131,072/135,168字节
(扇区15)=256页131,072/135,168字节
块结构:
块0
扇区0
块1
扇区1
块2
……
块30
块31
块32
块33
……
扇区2
块62
块63
块64
块65
……
块510
块511
页结构:
页0
块0
页1
……
页6
页7
页8
块1
页9
……
页14
页15
页16
……
页17
页18
……
页4093
页4094
页4095
(5)芯片操作:
芯片的操作是通过单片机的指令来完成的。
指令列表与指令操作码在后面的“指令表”中有详细的说明。
一个有效的指令由#CS的下降沿来指示它的开始,随后是一个有意义的8位操作码与缓存区或主存储器的地址。
当#CS为低时,由时钟SCK引脚来控制由SI引脚写入的操作码与缓存区或主存储器的地址。
所有的指令、地址与数据在传输时都是高位在前的。
528字节模式下,缓冲区中数据的地址由BFA9~BFA0来表示。
主存储器中数据的地址由PA11~PA0与BA9~BA0来表示,PA11~PA0用来表示12位页地址,BA9~BA0表示10位的页内字节地址。
在512字节模式下,缓冲区中数据地址由BFA8~BFA0来表示。
主存储器中数据的地址由A20~A0来表示,其中A20~A9是12位的页地址,A8~A0为9位的页内字节地址。
(6)读命令
使用相应的操作码,数据可以从主存储器或某一个SRAM缓冲区中读出。
1.连续读(命令码:
E8H):
可以达到66MHz
在提供了主存储器阵列的开始地址后,在时钟信号的作用下连续读命令可以从芯片中以数据流方式进行数据读取,而无需额外的地址信息或控制信号。
芯片内部的地址计数器会在每一个时钟周期后自动自增,因而可以在不用写入新的地址的情况下继续读取下一个字节。
要进行一次对页(528字节)的连续读操作,操作码E8H必须要写入芯片中,随后是3个字节的地址(22位的页与字节地址序列)与4个无关字节。
开始的12位(PA11~PA0)来用表示将要读取的数据在主存储器中的页地址。
后10位(BA9~BA0)用来表示字节在页中的地址。
而要进行一次对页(512字节)的连续读时,操作码E8H同样也要先写入到芯片中,随后是三个字节的地址与4个无关字节。
21位序列中前12位(A20~A9)表示要读的数据在主存储器的页地址,后9位(A8~A0)是页内的字节地址。
那些无关字节在读操作初始化时是必需的。
在无关字节后,SCK引脚上的时钟信号使数据从SO引脚输出。
在操作写入地址字节、无关字节与数据读取的过程中,#CS引脚上要保持低电平。
连续读到达一个页的结尾时,芯片会从下个页的开头继续读取,页间的跨越是没有延时的。
当主存储器的最后一个位被读出后,芯片会自动返回到第一页的开头继续读取。
与页间跨越相同的,从存储器阵列结尾转到开头也是无延时的。
2.连续读(命令码:
0BH高速模式):
可以达到66MHz
此命令可以在最高频率以下的任意时钟频率下通过串行接口对主存储器进行高速读取。
要进行一次连续读(页容量为528字节),#CS必须处于有效状态,然后操作码0BH必须写入到芯片中,随后是3字节地址与一个字节。
22位地址序列中的前12位(PA11~PA0)表示将要读取的数据在主存储器中的页地址,后10位(BA9~BA0)表示页内的字节地址。
要进行一次连续读(页容量为512字节),同样地,操作码OBH也要先写入芯片中,随后是3字节地址(A20~A0)与一个字节。
在此字节后数据将在SCK引脚上的时钟信号作用下从SO引脚输出。
同1中的内容。
3.连续读(命令码:
03H低速模式):
可以达到33MHz
大部分与高速模式下的连续读是相同的。
不同的在于3字节地址写入后无需再写入一个字节。
4.主存储器页读(操作码:
D2H)
主存储器页读允许直接从4096个页中某一个页中读取数据,而不影响缓冲区中的数据。
其它的内容与1相同。
5.缓存区读(操作码:
缓冲区1D4H或D1H缓冲区2D6H或D3H)
主存储阵列中的数据可以放在SRAM数据缓存区内,使用缓存区读命令允许直接从缓冲区中读取数据。
操作码的选用要根据时钟频率而定。
D4H、D6H与D1H、D3H可以分别使用在频率低于66MHz与33MHz的情况下。
要进行一次缓冲区读(528字节),操作码必须先写入芯片,随后是3字节地址(14个无关位与10位缓冲区地址)。
要进行一次缓冲区读(512字节),操作同样也要先写入芯片,随后是3字节地址(15个无关位与9位缓冲区地址)。
在地址字节后,一个无关字节必须要写入芯片以初始化读操作。
在操作码、地址字节、无关字节写入的过程中,#CS引脚必须保持低电平。
当到达缓冲区的结尾时,芯片会自动返回到缓冲区的开始。
#CS的上跳沿将终止读操作。
(7)编程与擦除命令
1.缓冲区写(操作码:
缓冲区184H缓冲区287H)
数据可以通过SI引脚写入缓冲区1或2中。
要将数据写入缓冲区(528字节),操作码必须先写入芯片,随后是3字节地址(14位无关位与10位缓冲区地址BFA9~BFA0)。
这10位地址表示要写入的数据的第一个字节的缓冲区地址。
李将数据写入缓冲区(512字节),操作码同样也要先写入芯片,随后是3字节地址(15个无关位与9位缓冲区地址BFA8~BFA0)。
这9位缓冲区地址表示要写入的每个字节的地址。
在最后一个地址位写入后,就可以开始向其写入数据了。
如果到达了缓冲区的结尾,则芯片会自动返回到缓冲区的开头。
数据会继续写入到缓冲区中,直到#CS引脚上产生上跳沿为止。
2.缓冲向主存储器页编程(带预擦除操作码:
缓冲区183H缓冲区286H)
被写入到缓冲中的数据可以被编程到主存储器中。
先写入操作码,对于页容量为528字节的情况,随后是3字节地址(2个无关位,12位页地址PA11~PA0与10个无关位)。
而对于容量为512字节的情况,操作码写入后,随后是3字节地址(3个无关位,12位的地址位A20~A9与9个无关位)。
当#CS引脚的上跳沿时,芯片会先擦除主存储器中所选中的页(擦除后都为逻辑1),然后将缓冲区中的数据编程到页中。
擦除与编程操作都是内部进行的,并会在一定时间内完成。
在这期间,状态寄存器与RDY/#BUSY都会指示芯片处于忙状态。
3.缓冲区向主存储器页编程(无预擦除操作码:
缓冲区188H缓冲区289H)
主存储器中已经被擦除的页可以通过此操作由缓冲区向其编程。
与有预擦除的操作不同就在于它是无预擦除的。
4.页擦除(操作码:
81H)
页擦除操作可以独立对主存储阵列中某一个页进行擦除,随后可以对该页进行缓冲区向主存储器页编程(无预擦除)操作。
对于页容量为528字节的情况,先要写入操作码,随后是3字节地址(2个无关位,12位页地址PA11~P10与10个无关位)。
对于页容量512字节的情况,也要先写入操作码,随后是3字节地址(3个无关位,12位页地址A20~A9与9个无关位)。
当#CS引脚上产生上跳沿时,芯片会擦除所选中的页(擦除后都为逻辑1)。
擦除操作是内部进行的,并会在一定时间内完成。
在这期间,状态寄存器与RDY/#BUSY都会指示芯片处于忙状态。
5.块擦除(操作码:
50H)
块擦除操作可以使块内的8个页一次全部擦除。
这个命令可以用在有大量数据需要写入的时候,可以避免多次调用写擦除命令。
在页容量为528字节时,操作码先要写入芯片,随后是3字节地址(2个无关位,9位页地址PA11~PA3,13个无关位)。
要进行一次块擦除操作(页容量512字节),也要先写入操作码,随后是3字节地址(3个无关位,9位页地址A20~A12与12个无关位)。
当#CS上产生上跳沿时,芯片将擦除选中的块。
擦除操作是内部进行的,并会在一定时间内完成。
在这期间,状态寄存器与RDY/#BUSY都会指示芯片处于忙状态。
块擦除地址如下表所示:
PA11/
A20
PA10/
A19
PA9/
A18
PA8/
A17
PA7/
A16
PA6/
A15
PA5/
A14
PA4/
A13
PA3/
A12
PA2/
A11
PA1/
A10
PA0/
A9
BLOCK
0
0
0
0
0
0
0
0
0
X
X
X
0
0
0
0
0
0
0
0
0
1
X
X
X
1
0
0
0
0
0
0
0
1
0
X
X
X
2
0
0
0
0
0
0
0
1
1
X
X
X
3
……
……
……
……
……
……
……
……
……
……
……
……
……
1
1
1
1
1
1
0
0
X
X
X
508
1
1
1
1
1
1
0
1
X
X
X
509
1
1
1
1
1
1
1
0
X
X
X
510
1
1
1
1
1
1
1
1
X
X
X
511
6.扇区擦除(操作码:
7CH)
扇区擦除命令可以独立对主存储器中的某一个扇区进行擦除。
一共有16个扇区,每次扇区擦除操作只能对一个扇区进行擦除。
页容量为528字节时,要对扇区0A或扇区0B进行擦除,需要先写入操作码,随后是3字节地址(2个无关位,9位页地址PA11~PA3与13个无关位)。
要擦除扇区1~15,也要先写入操作码,随后是3字节地址(2个无关位,4位页地址PA11~PA8与18个无关位)。
页容量为512字节时,要对扇区0A或扇区0B进行擦除,先写入操作码,随后是3字节地址(3个无关位,9位页地址A20~A12与12个无关位)。
要擦除扇区1~15,也要先写入操作码,随后是4字节地址(3个无关位,4位页地址A20~A17与17个无关位)。
擦除操作是内部进行的,并会在一定时间内完成。
在这期间,状态寄存器与RDY/#BUSY都会指示芯片处于忙状态。
7.片擦除(操作码:
C7H、94H、80H与9AH)
主存储器可以使用片擦除命令一次全部擦除。
要进行一次片擦除操作,先要写入操作码,无须写入地址,交且操作过程中任何写入的数据都是无效的。
操作码写入后,#CS引脚上的上跳沿可以开始擦除过程。
在操作过程中,状态寄存器指示芯片处于忙状态。
那些被保护或死锁的扇区不受此命令的影响,其数据不会发生改变。
只有那些没有保护或死锁的扇区会被擦除。
芯片在进行擦除操作的过程中#WP引脚可以设为有效,但是在内部擦除周期完成前保护不会生效。
8.通过缓冲区对主存储器页编程(操作码:
缓冲区182H缓冲区285H)
这个命令是缓冲区写与缓冲区向主存储器页编程(带预擦除)两条命令的综合。
数据先从输入引脚SI写入缓冲区1或2,再从缓冲区向指定的页编程。
在页容量为528字节时,要进行一次此操作,先要写入操作码,再将数据写入到缓冲区中,然后向芯片写入3字节地址(2个无关位,12位页地址PA11~PA0与10位缓冲区地址BFA9~BFA0)。
在页容量为512字节时,要进行此操作,也要先将操作码写入,再将数据写入到缓冲区中,随后是3字节地址(3个无关位,12位页地址A20~A9与9位缓冲区地址BFA8~BFA0)。
所有的地址字节都被写入后,就可以通过输入引脚向芯片写入数据了。
当#CS引脚上出现上跳沿时,芯片先会擦除主存储器所选中的页,然后将存在缓冲区中的数据编程到页中去。
编程操作是在芯片内部进行的,并会在一定时间内完成。
在这期间,状态寄存器与RDY/#BUSY都会指示芯片处于忙状态。
(8)扇区保护
AT45DB161D提供硬件与软件两种方法对扇区进行保护,以使其避免数据的破坏。
软件的方法是通过软件命令来实现扇区保护的使能与禁止的。
而硬件的方法则是通过使用#WP引脚来实现的。
通过“扇区保护寄存器”对哪一个扇区保护或不保护进行选择。
要知道某一个扇区是否有保护,可以查询状态寄存器。
1.扇区保护的软件方法
1)扇区保护使能命令(操作码:
3DH-2AH-7FH-A9H)
指定的扇区通过使扇区保护使能命令可使其在编程与擦除操作中得以保护。
要采用方法使能扇区保护,#CS引脚必须处于有效状态,从输入引脚SI写入4字节命令序列。
写入后,#CS引脚转为无效状态,此时扇区保护就被使能了。
命令
字节1
字节2
字节3
字节4
扇区保护使能命令
3DH
2AH
7FH
A9H
扇区保护使能命令的时序图:
2)扇区保护禁止命令(操作码:
3DH-2AH-7FH-9AH)
用软件方法来禁止扇区保护时,除了写入的操作码序列不事,其它与扇区保护使能命令是相同的。
命令
字节1
字节2
字节3
字节4
扇区保护禁止命令
3DH
2AH
7FH
9AH
扇区保护禁止命令的时序图:
3)软件控制保护的各个方面
软件控制保护在#WP没有或不能被单片机控制的情况下是很有用的。
在这种情况下,#WP可以悬空(#WP引脚在内部拉高),扇区保护可以由以上两种命令来控制。
(9)保护的硬件控制
#WP引脚设为有效状态后,在扇区保护寄存器中设置为保护的扇区及扇区保护寄存器自身在编程与擦除操作中可以得到保护。
扇区保护寄存器与设置为保护的任何一个扇区,都不能被编程或擦除。
要改变扇区保护寄存器的值只能将#WP设为无效。
如果#WP被接到地,扇区保护寄存器的内容不能被改变。
如果#WP被设为无效或接到VCC,则其内容可以被改变。
#WP会使保护的软件控制方法无效。
例如:
如果扇区原先并没有被扇区保护使能命令保护,那么简单的把#WP设为有效状态就可以使能扇区保护。
当#WP引脚设为有效状态而扇区保护使能命令没有执行,扇区保护不会被使能。
如果在#WP引脚设为有效状态前扇区保护使能命令被执行了,那么只简单地将#WP设为无效并不能禁止扇区保护。
在这种情况下,扇区保护禁止命令需要在#WP引脚无效时执行来使扇区保护禁止。
在#WP引脚为有效时,扇区保护禁止命令会被忽略。
1.扇区保护寄存器
非易挥发的(掉电不丢失)扇区保护寄存器指示哪些扇区被保护或未被保护。
扇区保护寄存器包括16个字节,从第0到第15字节的不同值确定了扇区0到15是否被保护。
扇区保护寄存器是可以由用户修改的,但在生新程序前必须先擦除。
扇区保护寄存器:
扇区号
0(0A,0B)
1to15
保护
见下表
FFH
未保护
00H
扇区0(0A,0B)
0A
0B
位3,2
位
1,0
数据值
0~7页
8~255页
位7,6
位5,4
扇区0A,0B未保护
00
00
xx
xx
0xH
0A保护(第0~7页)
11
00
xx
xx
CxH
0B保护(第8~255页)
00
11
xx
xx
3xH
扇区0A(第0~7页),0B(第8~255页)
11
11
xx
xx
FxH
注:
从ATMEL出厂后0~15字节默认值为00H。
1)擦除扇区保护寄存器命令(操作码:
3DH-2AH-7FH-CFH)
为了修改扇区保护寄存器的值,必须先使用擦除扇区保护寄存器命令将其擦除。
要擦除扇区保护寄存器,#CS必须设置为有效,然后将4字节的操作码序列写入芯片。
在操作码写入后,需要将#CS设置为无效,以初始化一个擦除操作。
扇区保护寄存器的擦除需要一定的时间,此期间状态寄存器会指示芯片处于忙状态。
如果在进行擦除的过程中掉电,则扇区保护寄存器的擦除得不到保证。
命令
字节1
字节2
字节3
字节4
擦除扇区保护寄存器命令
3DH
2AH
7FH
CFH
擦除扇区保护寄存器命令的时序图:
2)扇区保护寄存器编程命令(操作码:
3DH-2AH-7FH-FCH)
在扇区保护寄存器被擦除后,就可以使用扇区保护寄存器编程命令对其进行重新编程。
要对扇区保护寄存器进行编程,必须先将#CS设为有效,从SI引脚写入4字节操作码序列。
写入后,再将要写入扇区保护寄存器的内容写入。
扇区保护寄存器中包括有16个字节,所以要写入16个字节。
每个字节对应对寄存器中的每个单元。
16个字节被写入后,#CS引脚需要设为无效以初始化一个编程周期。
编程过程需要一定的时间,在此期间状态寄存器指示芯片处于忙状态。
如果在进行编程的过程中掉电,则扇区保护寄存器中的内容的修改得不到保证。
如果在#CS引脚无效以前没有写入适当数量的字节,则没有字节与其相对应的寄存器单元所对应扇区保护状态的改变不能保证。
如果扇区保护寄存器中的字节不是00H或FFH,则相应单元所对应的扇区保护状态的改变不能保证。
扇区保护寄存器编程命令利用内部SRAM数据缓冲区1来实现编程操作。
缓冲区1的数据在命令执行完毕后会恢复回到原来的数据。
命令
字节1
字节2
字节3
字节4
扇区保护寄存器编程命令
3DH
2AH
7FH
9AH
扇区保护寄存器编程命令的时序图:
3)扇区保护寄存器读取命令(操作码:
32H)
要读取扇区保护寄存器,首先要将#CS引脚设为有效,从SI引脚写入操作码与三个字节。
写入后,芯片便可以从SO引脚输出数据。
第一个字节是扇区0的内容,第二个字节是扇区1的内容,最后一个字节是扇区15的内容。
在最后一个字节输出后,再输出的数据就为未定义数据。
最后必须要将#CS设为无效状态以终止扇区保护寄存器读取操作,并使输出转为高阻态。
命令
字节1
字节2
字节3
字节4
扇区保护寄存器读取命令
32H
XXH
XXH
XXH
扇区保护寄存器的时序图:
4)扇区保护寄存器的各个方面
扇区保护寄存器约可以擦/写10000次。
使用者会很关心芯片在其应用系统中的使用寿命。
如果应用系统中需要多于10000次对扇区保护寄存器的修改,因为它需要临时性地对某一个扇区不加以保护,那么应用系统就要限制自身的使用。
要合理地设计应用系统,以使其对扇区保护寄存器的个性不超过10000次。
(10)安全措施
1)扇区死锁命令(3DH-2AH-7FH-30H)
这一命令应用于商业上。
芯片可以通过扇区死锁命令对某一个扇区进行死锁,从而使扇区变为只读的。
这在应用中是很有用的,用来存储代码或安全信息。
当一个扇区被死锁后,它就不能再被擦除或编程,也不能解锁。
要执行扇区死锁命令,#CS引脚要设为有效状态,写入4字节操作码序列,一定按正确的顺序写入。
写入后,再写入3字节地址。
在地址写入后,再将#CS引脚设为无效状态以初始化一个内部死锁操作。
在进行死锁操作的过程中,状态寄存器指示芯片处于忙状态。
如果操作过程中掉电,则死锁操作得不到保证。
在这种情况下,使用者应读取扇区死锁寄存器以确定相应的扇区是否已经死锁。
命令
字节1
字节2
字节3
字节4
扇区死锁命令
3DH
2AH
7FH
30H
扇区死锁命令的时序图:
1.扇区死锁寄存器
扇区死锁寄存器中包含16个字节,如下表所示:
扇区号
0(0A,0B)
1