NORFlash存储器测试方法介绍一、NORFLASH简介NORFLASH是很常见的一种存储芯片,数据掉电不会丢失。NORFLASH支持ExecuteONChip,即程序可以直接在FLASH片内执行。这点和NANDFLASH不一样。因此,在嵌入是系统中,NORFLASH很适合作为启动程序的存储介质。NORFLASH的读取和RAM很类似,但不可以直接进行写操作。对NORFLASH的写操作需要遵循特定的命令序列,最终由芯片内部的控制单元完成写操作。从支持的最小访问单元来看,NORFLASH一般分为8位的和16位的(当然,也有很多NORFLASH芯片同时支持8位模式和是16位模式,具体的工作模式通过特定的管脚进行选择)。对8位的NORFLASH芯片,或是工作在8-BIT模式的芯片来说,一个地址对应一个BYTE(8-BIT)的数据。在对FLASH进行写操作的时候,每个BIT可以通过编程由1变为0,但不可以有0修改为1。为了保证写操作的正确性,在执行写操作前,都要执行擦除操作。擦除操作会把FLASH的一个SECTOR,一个BANK或是整片FLASH的值全修改为0xFF。这样,写操作就可以正确完成了。1.8-BIT的NORFLASH例如一块8-BIT的NORFLASH,假设容量为4个BYTE。那芯片应该有8个数据信号D7-D0和2个地址信号,A1-A0。地址0x0对应第0个BYTE,地址0x1对应于第1BYTE,地址0x2对应于第2个BYTE,而地址0x3则对应于第3个BYTE2.16-BIT的NORFLASH对16位的NORFLASH芯片,或是工作在16-BIT模式的芯片来说,一个地址对应于一个HALF-WORD(16-BIT)的数据。例如,一块16-BIT的NORFLASH,假设其容量为4个BYTE。那芯片应该有16个数据信号线D15-D0和1个地址信号A0。地址0x0对应于芯片内部的第0个HALF-WORD,地址0x1对应于芯片内部的第1个HALF-WORD。3.NORFlash结构FLASH一般都分为很多个SECTOR,每个SECTOR包括一定数量的存储单元。对有些大容量的FLASH,还分为不同的BANK,每个BANK包括一定数目的SECTOR。FLASH的擦除操作一般都是以SECTOR,BANK或是整片FLASH为单位的。二、芯片资料本文档以SPANSION公司的S29JL064H芯片为例说明(芯片详细信息参见datasheet)。该芯片是一个64Megabit(8Mx8-Bit/4Mx16-Bit)的NorFlash芯片。1.管脚说明如下A21–A022AddressesDQ14–DQ015DataInputs/Outputs(x16-onlydevices)DQ15/A-1DQ15(DataInput/Output,wordmode),A-1(LSBAddressInput,bytemode)CE#ChipEnableOE#OutputEnableWE#WriteEnableWP#/ACCHardwareWriteProtect/AccelerationPinRESET#=HardwareResetPin,ActiveLowBYTE#Selects8-bitor16-bitmodeRY/BY#Ready/BusyOutputVCC3.0volt-onlysinglepowersupply(seeProductSelectorGuideforspeedoptionsandvoltagesupplytolerances)VSSDeviceGroundNC=PinNotConnectedInternally2.芯片的BusOperations如下:3.芯片的CommandDefinitions4.解释说明1、读模式:读由#CE和#OE控制:当两者都为低电平时,才可以从FlashROM中读取数据2、写模式:FlashROM的编程的基本单位是“页”,每一“页”包含一定的数据(一般为128字节或256字节)。如果要修改一“页”中的某一个字节的数据,需要将这一“页”的数据全部读出,修改指定的字节,再写回至FlashROM中。在写入每一“页”的时候,如果该“页”的某个字节没有被写入FlashROM,那么FlashROM中的对应位置上的数据将会被擦除为0xFF。(即在写入时都是只允许将“1”改成“0”,而不允许将“0”改成“1”。)一般是#CE和#WE为低电平且#OE为高电平:写操作过程通常包括两个步骤:1)第一步是字节装载周期,在这个周期中主CPU将一页的数据写入FlashROM的页缓冲区;2)第二步是内部编程周期,在这个周期中FlashROM的页缓冲区的内容被同时写入FlashROM的非挥发存储器阵列注:在字节装载周期中,在#CE或#WE的下降沿两者出现的较晚的时刻地址被锁存,在#CE或#WE的上升沿两者出现较早的时刻数据被锁存。进入写操作之前要写入的命令序列为:向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0xA0,退出写操作需要写入的命令序列为:向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x80、向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x20。检测ProductID需写入的指令序列为:向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x80、向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x60;然后从地址0上读取厂商代码,从地址1上读取产品代码;退出该模式需写入的指令序列为:向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0xF0清除状态寄存器内容的一组指令是:向地址0x5555写入0xAA向地址0x2AAA写入0x55、向地址0x5555写入0x50。NorFlash支持扇区擦(SectorErase)除和整片擦除(ChipErase)块擦除。向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x80、向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x30。全片擦除:向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x80、向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x10。三、测试方法及流程1.开短路测试(要求每个管脚及相邻管脚之间)No符号测试点FT规范QA规范单位Bin最小典型最大最小最大1OS_P每个管脚-1.0-0.2-1.0-0.2V2OS_N每个管脚0.21.00.21.0V测试方法、条件:1.I=-100uA2.I=100uA2.Leakage测试测试方法、条件:1.测IIL:VCC=3.6V,inputpin加0V,测试inputpin电流2.测IIH:VCC=3.6V,inputpin加3.6V,测试inputpin电流3.测IOZH:VCC=3.6V,由busoperations可知当CE为高IOpin处于HIGHZ状态,所以给CE加3.6V,IOpin加3.6V,测试IOpin电流4.测IOZL:VCC=3.6V,由busoperations可知当CE为高IOpin处于HIGHZ状态,所以给CE加3.6V,IOpin加0V,测试IOpin电流3.擦除整个chip测试方法、条件:1.VCC=3.3V,2.向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x80、向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x103.等待56S擦除完成,此时芯片内的数据都为0xFF4.工作电流测试5.Standby电流测试6.读所有chip0xFF测试测试方法、条件:1.VCC=3.3V2.设置#OE,#CE为低电平,地址管脚A21-A0设为00,,此时IO输出地址为0x00内存储的数据0xFF.3.地址加1(地址管脚A0变为1,其他地址不变),此时IO输出地址为0x01内存储的数据0xFF.4.地址逐步加1(顺序改变地址管脚电压),此时IO顺序输出地址内存储的数据0xFF。5.逐步加完所有的地址直到地址管脚A21-A0全变为1。即读完了所有地址的数据。7.VOH,测试测试方法、条件:1.VCC=3.3V2.设置#OE,#CE为低电平,给任意地址,此时IO输出数据。3.给IO加-2.0mA电流,读IOpin电压。8.写并且读所有chip0xFF测试测试方法、条件:1.VCC=3.3V3.向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0xA0,向page0初始地址0x00写#00,2.地址增加1,即向地址0x01写003.逐步增加地址,同时向地址内写入数据,直到写满1个page。4.重复1-3过程,更改page初始地址,依次向page1,2,3,4....写入00,直到写满整个CHIP。2.设置#OE,#CE为低电平,地址管脚A21-A0设为00,,此时IO输出地址为0x00内存储的数据0xFF.3.地址加1(地址管脚A0变为1,其他地址不变),此时IO输出地址为0x01内存储的数据0x004.地址逐步加1(顺序改变地址管脚电压),此时IO顺序输出地址内存储的数据0x00。5.逐步加完所有的地址直到地址管脚A21-A0全变为1。即读完了所有地址的数据。9.VOL测试测试方法、条件:1.2.向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0xA0,向任意地址写#003.设置#OE,#CE为低电平,读该地址数据,此时IO输出数据#00。4.给IO加4..0mA电流,读IOpin电压。10.擦除整个chip测试方法、条件:1.VCC=3.3V,2.向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x80、向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x103.等待56S擦除完成,此时芯片内的数据都为0xFF11.CHECKBOARD测试测试方法、条件:1.VCC=3.3V2.向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0xA0,向page0初始地址0x00写#00,3.地址增加1,即向地址0x01写#FF4.逐步增加地址,同时向地址内交错写入数据00和FF,直到写满1个page。5.重复2-4过程,更改page初始地址,向奇数page,交错写入55/AA,向偶数page,交错写入AA/55,直到写满整个CHIP。6.设置#OE,#CE为低电平,地址管脚A21-A0设为00,,此时IO输出地址为0x00内存储的数据,即读出步骤2-5写入的数据7.地址加1(地址管脚A0变为1,其他地址不变),此时IO输出地址为0x01内存储的数据8.地址逐步加1(顺序改变地址管脚电压),此时IO顺序输出地址内存储的数据。9.逐步加完所有的地址直到地址管脚A21-A0全变为1。即读完了所有地址的数据。10.重复一遍2-9操作,向奇数page,交错写入AA/55,向偶数page,交错写入55/AA,12.擦除整个chip测试方法、条件:1.VCC=3.3V,2.向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x80、向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0x103.等待56S擦除完成,此时芯片内的数据都为0xFF13.DIAGNOL测试测试方法、条件:1.VCC=3.3V2.向地址0x5555写入0xAA、向地址0x2AAA写入0x55、向地址0x5555写入0xA0,向page0