为了提供最好的灵活性,AT45DB041B的内存被分成三个等级,分别是:扇区,块和页。内存的由下图表示,图上描述了每个扇区和每个块上有多少个页。所有对DataFlash的编程操作都是基于一页一页的连接。然而可选择的擦除可以在块或页的等级上实施。
设备操作
设备的操作是由主机产生的指令来控制的。一个有效的指令从CS的下降沿开始,其后跟8位的操作码和所需用来确定的缓冲或者内存地址。当CS是低电平,由SCK控制通过SI载入操作码和和所需用来确定的缓冲或者内存地址。在传输所有的指令,地址和数据之前要传最重要位(MSB)。在文章中涉及的缓冲地址用BFA8-BFA0来表示。通过9位的地址来指定缓冲里一个字节的位置。在文章中涉及的内存地址用PA10-PA0和BA8-BA0表示。通过PA10-PA0来指定一个页的位置,而BA8-BA0这9位的地址是用来指定页里一个字节的位置。
读命令
通过指定合适的操作码,数据可以从内存或任意两个数据缓冲器读出。DataFlash支持两类的读(取决于SCK)。
1连续阵列读取
通过提供一个初始的内存地址,连续阵列读取命令可以用来按序的连续的从设备上读取数据,所需要提供的仅仅是时钟,而不需要提供额外的地址信息或者控制信号。DataFlash有一个内部的地址计数器会在每个时钟周期加1,使得不需要地址的连续读取操作成为可能。为了实现连续读取,必须先送入操作码68H或者E8H随后跟24位地址和32位无关位。24位地址位的前4位是被保留用来和上下高密度和低密度设备兼容的,接下来的11位地址位(PA10-PA0)指定对内存的哪一页进行读取操作,最后的9位(BA8-BA0)指定从这一页的哪一字节开始。紧跟24位地址位的32位无关位是用来等待设备完成对操作命令的初始化。在32位无关位之后,SCK上的脉冲时钟会使得串行的数据从SO管脚输出。
在载入操作码,地址位,无关位和读数据时,CS必须保持低电平。当连续读取到达内存中一页的末尾时,设备从接下来一页的开始继续读下去而不产生任何延迟。当设备内存中最后一位被读取后,读操作会跳到第一页的的开头继续读,并且不产生任何的延迟。
一个在CS上的低到高的跳变会终止读操作,并使SO为三态。连续阵列读取允许的最大SCK频率定义为fCAR ,连续阵列读取不通过两个数据缓冲器,不改变这两个缓冲器的内容。
2内存页读取
一个内存页的读取允许用户从内存中2048个页中的任何一页直接读取数据,而通过两个数据缓冲器,不改变这两个缓冲器的内容。要开始页读取,必须先送入操作码68H或者E8H随后跟24位地址和32位无关位。24位地址位的前4位是保留位,接下来的11位地址位(PA10-PA0)指定对内存的哪一页进行读取操作,最后的9位(BA8-BA0)指定从这一页的哪一字节开始。紧跟24位地址位的32位无关位是用来等待设备完成对操作命令的初始化。在32位无关位之后,SCK上的脉冲时钟会使得串行的数据从SO管脚输出。在载入操作码,地址位,无关位和读数据时,CS必须保持低电平。当内存页读取到达内存中一页的末尾时,设备会从这一页的开头继续读。一个在CS上的低到高的跳变会终止读操作,并使SO为三态。
缓冲读取
通过不同的操作码指定缓冲器,可以从两个缓存器的任意一个读取数据,操作码54H或者D4H用来读缓冲器1,操作码56H或者D6H用来读缓冲器2。为实现缓冲读取在8位的操作码之后跟15位无关位,9位地址位,8位无关位。由于缓冲的大小是264个字节需要用9位的地址位(BFA8-BFA0)来指定从缓冲的哪个字节开始读取。在载入操作码,地址位,无关位和读数据时,CS必须保持低电平。当到达缓冲的末尾时,设备会从缓冲的开头继续读。一个在CS上的低到高的跳变会终止读操作,并使SO为三态。
3状态寄存器读取
状态寄存器可以用来确定设备的空/忙状态,内存页和缓冲比较操作的结果或者设备的密度。为读状态寄存器,必须给设备载入操作码57H或者D7H。在载入操作码之后,以MSB(bit7)开头的8位状态寄存器会在接下来的8个时钟周期从SO输出。状态寄存器中有5位包含了设备的信息,而另外的3位保留供将来使用。在状态寄存器的第0位(bit0)被移出之后,序列会循环的输出(只要CS保持低电平,并且SCK有输入)。由于状态寄存器中的数据会经常更新,所以重复的序列会输出新的数据。
状态寄存器格式
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
RDY/BUSY | COMP | 0 | 1 | 1 | 1 | × | × |
空/忙状态是用状态寄存器的第7位来指出的,如果第7位是1则表示设备空,可以接收下一个命令。如果第7位是0则表示设备忙。用户可以通过在第7位输出时,将SCK置为低电平,使状态寄存器的第7位连续输出,一旦设备不再忙SO会从0跳变到1。有8个操作会使得设备处于忙状态:内存中页到缓冲的传输,页和缓冲的比较,带擦除的缓冲到页的编程,不带擦除的缓冲到页的编程,页擦除,块擦除,页编程,自动页重写。
最近一次的内存中页和缓冲比较的结果通过状态寄存器的第6位来指出。如果第6位是0说明在页中的数据和缓冲中的数据相同。如果第6位为1,则说明在页中至少有一位数据和缓冲中不同。
设备的密度是由状态寄存器的第5、4、3、2位来表示的。对于AT45DB041B来说,这四位是0,1,1,1。这四个二进制位的十进制值并不等于设备的密度。这四位对于不同的设备有不同的表示,并且共有16种密度结构。
编程和擦除命令
1缓冲写
数据可以从SI移入缓冲1或缓冲2。为了给缓冲载入数据,必须用8位的操作码。用84H表示对缓冲1,87H表示对缓冲2,其后跟15位无关位和9位地址位(BFA8-BFA0)。9位地址用来指定在缓冲中写入的第一个字节。数据在地址位后输入。如果到达数据缓冲器的末尾,设备会转到缓冲器的开头。除非检测到CS上的低到高的跳变,否则数据会一直载入缓冲器。
2带擦除的缓冲到页的编程
被写入到缓冲器的数据可以被放入内存。为了开始操作,必须跟8位的操作码。用83H表示对缓冲1,86H表示对缓冲2,其后跟4位保留位,11位地址位(PA10-PA0)指定对内存的哪一页进行写操作,紧接着跟9位无关位。当在CS上产生低到高的跳变,会擦除所选择的页,将其全置为1,然后将存储在缓冲中的数据写入内存中的指定页。擦除和写入页是设备内部时间,会用掉的最大时间是tEP。在这段时间状态寄存器会说明设备状态为忙。
3不带擦除的缓冲到页的编程
对于已经被擦除的内存,也可以通过缓冲1或者缓冲2写入。为了开始操作,必须跟8位的操作码。用83H表示对缓冲1,86H表示对缓冲2,其后跟4位保留位,11位地址位(PA10-PA0)指定对内存的哪一页进行写操作,紧接着跟9位无关位。当在CS上产生低到高的跳变,就会将存储在缓冲中的数据写入内存中的指定页。写入的内存之前对其进行擦除是必须的。写入页是设备内部时间,会用掉的最大时间是tP。在这段时间状态寄存器会说明设备状态为忙。
不推荐对页进行写入操作而不进行擦除。
4页擦除
可选择的页擦除命令可以用来擦除内存中的任何一页,为不带擦除的缓冲到页的编程作准备。为了实现页擦除,必须先送入操作码81H,随后跟4位保留位,11位地址位(PA10-PA0),9位无关位。11位地址位用来指定对内存的哪一页进行擦除。当在CS上产生低到高的跳变,会擦除所选择的页,将其全置为1,擦除是设备内部时间,会用掉的最大时间是tPE。在这段时间状态寄存器会说明设备状态为忙。
5块擦除
一个有8页的块可以一次被擦除,为不带擦除的缓冲到页的编程作准备,使得这个操作在写大量数据到设备时节约时间。为了实现块擦除,必须先送入操作码50H,随后跟4位保留位,8位地址位(PA10-PA3),12位无关位。8位地址位用来指定对内存的哪一块(包含8页)进行擦除。当在CS上产生低到高的跳变,会擦除所选择的块,将其全置为1,擦除操作是设备内部时间,会用掉的最大时间是tBE。在这段时间状态寄存器会说明设备状态为忙。
块擦除地址
PA10 | PA9 | PA8 | PA7 | PA6 | PA5 | PA4 | PA3 | PA2 | PA1 | PA0 | Block |
0 0 0 0 . . . 1 1 1 1 | 0 0 0 0 . . . 1 1 1 1 | 0 0 0 0 . . . 1 1 1 1 | 0 0 0 0 . . . 1 1 1 1 | 0 0 0 0 . . . 1 1 1 1 | 0 0 0 0 . . . 1 1 1 1 | 0 0 1 1 . . . 0 0 1 1 | 0 1 0 1 . . . 0 1 0 1 | × × × × . . . × × × × | × × × × . . . × × × × | × × × × . . . × × × × | 0 1 2 3 . . . 252 253 254 255 |
6通过缓冲的页编程
这个操作是缓冲写入和带擦除的缓冲到页的编程的结合。数据首先从SI移入缓冲器然后写入内存中指定的页。初始化时要8位的操作码,82H表示缓冲1,85H表示缓冲2,这之后跟4位保留位和20位地址位。11位地址位(PA10-PA0)用来选择内存中将要写入数据的页,接下来的9位地址(BFA8-BFA0)用来选择缓冲中第一个被写入的缓冲,当所有的地址位被移入,设备就会从SI移入数据,并将其存储在其中一个缓冲器中。如果到达数据缓冲器的末尾,设备会转到缓冲器的开头。当测到CS上的低到高的跳变,设备会擦除所选择的页,将其全置为1,然后将存储在缓冲中的数据写入内存中的指定页。擦除和写入页是设备内部时间,会用掉的最大时间是tEP。在这段时间状态寄存器会说明设备状态为忙。
附加的命令
1页到缓冲传输
一页的数据可以从内存转到缓冲1或者缓冲2。初始化时要8位的操作码,53H表示缓冲1,55H表示缓冲2,这之后跟4位保留位和11位地址位,11位地址位(PA10-PA0)用来选择内存中将要传输数据的页,接下来跟9位无关位。从SI载入操作码,地址位和无关位时,CS必须保持低电平。数据从内存页到缓冲的转移会在CS由低到高的跳变开始,在转移数据的时间内(tXFR),状态寄存器可以通过读操作来测定转移是否完成。
2页和缓冲比较
一页的数据和缓冲1或者缓冲2内的数据进行比较。初始化时要8位的操作码,60H表示缓冲1,61H表示缓冲2,这之后跟4位保留位和11位地址位,11位地址位(PA10-PA0)用来选择内存中将要和缓冲比较数据的页,接下来跟9位无关位。从SI载入操作码,地址位和无关位时,CS必须保持低电平。在CS由低到高的跳变时,264个字节的页会和264个字节的缓冲比较,在比较的时间内(tEP),状态寄存器会说明设备状态为忙。当完成比较,状态寄存器的第6位会给出比较结果。
3自动页重写
这种只有在一个页中的大量字节或大量页需要被随机修改时才被用到。这种模式是页到缓冲传输和带擦除的缓冲到页的编程的结合。一页的数据首先从内存移入缓冲1或者2,然后同样的数据(缓冲1或者缓冲2里)会写入到内存的原始页里。要开始重写操作,需要8位的操作码,58H表示缓冲1,59H表示缓冲2,这之后跟4位保留位和11位地址位,11位地址位(PA10-PA0)用来指定内存中将要被重写的页,接下来跟9位无关位。当在CS由低到高的跳变时,设备会先将内存中页的数据转移到缓冲,然后将数据从缓冲重新写入到原来的页中。这个操作是设备内部时间,会用掉的最大时间是tEP。在这段时间状态寄存器会说明设备状态为忙。
总结
所有的模式可以被分成两个组
*用到Flash内存的模式(A组)
*未用到Flash内存的模式(B组)
A组的组成
1.内存页读取
2.自动页重写
3.带擦除的缓冲到页的编程
4.不带擦除的缓冲到页的编程
5.页擦除
6.块擦除
7.通过缓冲的页编程
8.页到缓冲传输
9.页和缓冲比较
B组的组成
1.状态寄存器读取
2.缓冲写
3.缓冲读取
如果A组在运行,则在A组的其他模式就不能开始,然而这时候B组则可以开始。
这就使得DataFlash有提供连续数据的能力。例如,当数据从缓冲1写入内存的时候,数据可以载入到缓冲2。