NorFlash测试方法介绍
nor flash program disturb的原理
nor flash program disturb的原理Nor Flash Program Disturb (NFPD) 是指在Nor Flash存储芯片的编程过程中,由于电荷累积和分布不均导致的其它存储位置的擦除或编程干扰现象。
这可能会破坏相邻的存储单元,产生错误写入或删除数据的情况。
本文将详细介绍Nor Flash Program Disturb的原理和其可能引发的问题。
一、Nor Flash存储器简介Nor Flash Memory是一种非易失性存储器,由于其良好的读取速度和快速访问能力而被广泛应用于嵌入式系统和移动设备。
它被分为多个块,而每个块又被划分为多个扇区。
二、Nor Flash编程过程Nor Flash在编程过程中,首先需要将待编程的块进行擦除操作,然后再写入所需的数据。
擦除是将块中的所有单元数据置为“1”,而编程是将指定单元的数据置为“0”。
三、Nor Flash Program Disturb的原理Nor Flash Program Disturb (NFPD) 是由于编程过程中电荷的累积和分布不均所引起的问题。
在Nor Flash存储器中,相邻的存储单元由于物理上的接近,会产生相互影响,当编程操作过程中的原始单元的电荷有限时,相邻单元的电荷也会受到影响。
四、NFPD的影响和可能问题1. 异常编程:由于电荷的分布不均,原始单元编程时,相邻单元可能由于电荷交互而意外编程,导致数据错误或无法预料的结果。
2. 存储单元数据的错误改变:在编程过程中,如果相邻的单元受到干扰,其数据可能被更改或删除,导致数据的不一致和错误。
3. 存储单元的耐久性下降:由于NFPD过程中的电子迁移,相邻存储单元的寿命可能会受到缩短,其中一些存储单元可能会出现更快的老化现象。
五、降低NFPD影响的措施为了降低Nor Flash Program Disturb的影响,可以采取以下措施:1. 错误校验和纠正技术 (ECC):使用ECC技术来检测和纠正数据错误。
mcu norflash读写例程
一、概述随着微控制器单片机(MCU)在嵌入式系统中的广泛应用,对存储器件的需求也日益增加。
在嵌入式系统开发中,常常需要对外部存储器进行读写操作,以实现数据的存储和访问。
而在嵌入式系统中,常用的存储器件之一就是NOR Flash。
开发一套MCU与NOR Flash进行读写操作的例程对于嵌入式系统开发具有重要意义。
二、MCU与NOR Flash介绍1. MCU介绍作为嵌入式系统的核心控制芯片,MCU具有集成度高、功耗低、性能稳定等特点,被广泛应用于各类嵌入式系统中。
MCU通常搭载有内置的存储器,但对于一些应用需求较大的情况,需要外接存储器扩展其存储容量。
2. NOR Flash介绍NOR Flash是一种非易失性存储器,广泛应用于嵌入式系统中。
NOR Flash通常具有较大的存储容量和较高的读写速度,因此被广泛应用于嵌入式系统的代码存储和数据存储中。
三、MCU NOR Flash读写例程设计1. 硬件设计1)选择合适的MCU按照系统需求选择合适的MCU芯片,需要考虑MCU的存储器容量和外设接口支持。
2)连接NOR Flash将NOR Flash与MCU进行连接,通常使用SPI或Parallel等接口进行连接。
3)引脚连接根据MCU和NOR Flash的接口定义进行引脚连接,确保连接正确稳定。
2. 软件设计1)MCU驱动程序设计设计MCU的驱动程序,包括对外部存储器的读写操作。
2)NOR Flash读写算法设计设计NOR Flash的读写算法,包括位置区域编址、数据传输等操作。
3)例程编写编写MCU与NOR Flash进行读写操作的例程,包括初始化、读取数据、写入数据等功能。
3. 调试验证1)例程验证将例程下载到MCU中,通过调试工具对例程进行验证,并观察读写操作的结果。
2)性能测试对MCU与NOR Flash的读写性能进行测试,包括读取速度、写入速度等指标。
四、MCU NOR Flash读写例程实现1. 硬件连接采用STM32F4系列MCU,通过SPI接口连接外部NOR Flash 存储器。
FLASH测试方法
ptr=0x7ffffc
向偏移地址为 ptr 的地址空间 写入 0x00000000
I=2
ptr=ptr ^ 0x7ffffc;
读出偏移地址为 ptr 地址空间 内容 X
N (X==0x55555555) ?
Y (I<N)?
N FLASH 地址线测试结束 图 3 FLASH 地址线测试流程图
需要特别注意的是,数据线的测试务必选择比较特殊的寄存器,如上述寄存器地址。这 样可以避免与后面的地址线的测试地址发生冲突,引起测试失败或者还得增加擦除块的操 作。而块擦除时间是比较长的。
以 32 位的数据总线系统中的 FLASH 芯片测试为例,FLASH 芯片数据线测试流程图见 图 3:
第 4 页 共 8页
FLASH 测试方法
1 FLASH 测试方法概述
1.1 概述
z 根据测试需求不同:有的侧重于测试全面性,有的侧重于测试速度; z 根据不同的 FLASH 芯片,其擦除方法也不同,增加了芯片类型判断; z 该文档主要参照 intel flash28xxx 系列芯片进行叙述和整理,其他类型的 flash 的具
Y 芯片擦除结束
图 2 芯片擦除流程图
第 3 页 共 8页
FLASH 测试方法
1.2.3 FLASH 数据线测试
当 FLASH 芯片的数据总线为 8 位时,对 FLASH 芯片的 9 地址写 0xAA,10 地址写 0xCC, 11 地址写 0XF0,并检查以上各地址单元内容是否正确;
当 FLASH 芯片的数据总线为 16 位时,对 FLASH 芯片的 0X0A 地址写 0xAAAA,0X1A 地址写 0xCCCC,0X2A 地址写 0XF0 F0,0X3A 地址写 0XFF00,并检查以上各地址单元内 容是否正确。
nor flash读工作原理
nor flash读工作原理Nor Flash是一种非易失性存储器,其读取工作原理是指在读取数据时的操作过程和原理。
下面将介绍Nor Flash读取工作原理。
Nor Flash的读取操作主要分为地址寻址和数据读取两个步骤。
首先,在进行读取操作之前,需要通过地址线将要读取的数据的地址发送给Nor Flash。
Nor Flash的存储单元被划分为多个块,每个块又由多个扇区组成。
通过地址寻址,可以确定要读取的数据所在的扇区和块的位置。
在确定了要读取的数据所在的扇区和块的位置后,Nor Flash会通过内部的控制电路将存储单元中的数据读取出来。
Nor Flash的存储单元由一系列的存储单元组成,每个存储单元可以存储一个二进制位的数据。
在读取操作时,Nor Flash会根据地址线指定的位置,将对应存储单元中的数据读取出来。
Nor Flash的读取操作是通过电压的变化来实现的。
具体来说,当读取操作开始时,Nor Flash会将电压控制线设置为读取模式,并将控制电路连接到对应的存储单元。
然后,Nor Flash会将一个特定的电压施加到被选中的存储单元上。
根据存储单元中存储的数据是0还是1,Nor Flash会通过读取电路将对应的电压信号转换为数字信号。
最后,Nor Flash会将转换后的数字信号传递给外部的读取电路。
Nor Flash的读取速度相对较慢,主要受到两个因素的影响。
首先,Nor Flash的存储单元是通过悬空栅效应实现的,这种结构相对复杂,导致了读取速度较慢。
其次,Nor Flash的读取操作需要通过多个步骤完成,包括地址寻址、电压施加和电压转换等。
这些步骤的完成需要一定的时间,进而影响了读取速度。
为了提高Nor Flash的读取速度,可以采取一些优化措施。
例如,可以通过增加读取电路的并行性来提高读取速度。
同时,还可以通过优化控制电路和读取电路的设计,减少读取操作的步骤和延迟,从而提高读取速度。
总结起来,Nor Flash的读取工作原理是通过地址寻址和数据读取两个步骤完成的。
浅析Nor Flash的一些通用设置
浅析Nor Flash的一些通用设置NOR Flash NOR Flash是现在市场上两种主要的非易失闪存技术之一。
Intel 于1988年首先开发出NOR Flash 技术,彻底改变了原先由EPROM(Erasable Programmable Read-Only-Memory电可编程序只读存储器)和EEPROM(电可擦只读存储器Electrically Erasable Programmable Read - Only Memory)一统天下的局面。
紧接着,1989年,东芝公司发表了NAND Flash 结构,强调降低每比特的成本,有更高的性能,并且像磁盘一样可以通过接口轻松升级。
NOR Flash 的特点是芯片内执行(XIP ,eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。
NOR 的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响到它的性能。
NAND的结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。
应用NAND的困难在于Flash的管理需要特殊的系统接口。
性能比较 flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。
任何flash 器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。
NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。
由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。
执行擦除时块尺寸的不同进一步拉大了NOR和NAND之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。
flash芯片读写测试用例
flash芯片读写测试用例Flash芯片是一种非易失性存储器,广泛应用于各个领域的电子设备中。
为了保证Flash芯片的正常工作,需要进行读写测试来验证其性能和稳定性。
本文将针对Flash芯片的读写测试用例进行详细介绍。
一、擦除测试擦除操作是Flash芯片中的一项重要功能,用于将存储的数据全部清空,恢复到初始状态。
擦除测试用例的目的是验证擦除操作是否能够正常执行,并且确保擦除后的芯片状态是正确的。
测试用例的步骤包括:写入数据到芯片中,执行擦除操作,再次读取芯片中的数据,验证数据是否被全部清空。
二、写入测试写入操作是将数据存储到Flash芯片中的过程。
写入测试用例的目的是验证写入操作是否能够正常执行,并且确保写入的数据能够正确保存在芯片中。
测试用例的步骤包括:写入数据到芯片中,读取芯片中的数据,验证写入的数据是否与读取的数据一致。
三、读取测试读取操作是从Flash芯片中读取数据的过程。
读取测试用例的目的是验证读取操作是否能够正常执行,并且确保读取的数据与存储的数据一致。
测试用例的步骤包括:写入数据到芯片中,读取芯片中的数据,验证读取的数据与写入的数据是否一致。
四、连续写入测试连续写入测试用例的目的是验证芯片在连续写入大量数据时的性能和稳定性。
测试用例的步骤包括:连续写入大量数据到芯片中,读取芯片中的数据,验证写入的数据是否全部保存在芯片中,并且没有出现数据丢失或错误的情况。
五、连续读取测试连续读取测试用例的目的是验证芯片在连续读取大量数据时的性能和稳定性。
测试用例的步骤包括:写入大量数据到芯片中,连续读取芯片中的数据,验证读取的数据是否与写入的数据一致,并且没有出现数据错误或丢失的情况。
六、并发读写测试并发读写测试用例的目的是验证芯片在同时进行读写操作时的性能和稳定性。
测试用例的步骤包括:同时进行读写操作,验证读写的数据是否正确,并且没有出现冲突或错误的情况。
七、边界测试边界测试用例的目的是验证芯片在极限情况下的读写能力。
nor flash工作原理
nor flash工作原理Nor Flash,即非易失性闪存,是一种常见的存储器设备,被广泛应用于数字产品和嵌入式系统中。
它的工作原理是通过电子擦除和编程的方式实现数据的存储和读取。
本文将深入探讨Nor Flash的工作原理及其应用。
一、Nor Flash的组成和结构Nor Flash由多个存储单元组成,每个存储单元由一个浮栅晶体管和一个选择晶体管组成。
浮栅晶体管用于存储数据,而选择晶体管则用于控制数据的读取和写入操作。
这些存储单元按照阵列的方式排列在晶片上,形成一个存储矩阵。
二、Nor Flash的工作原理1. 读取操作:当需要读取数据时,首先通过地址线选中特定的存储单元。
然后,选择晶体管将存储单元的电荷传递到位线上,并经过放大器放大,最终形成可读取的电压信号。
2. 编程操作:Nor Flash的编程操作是通过电子注入和散射实现的。
通过地址线选中特定的存储单元,并施加编程电压,即高电压。
这个高电压会使得浮栅晶体管中的电子被注入到栅极上,改变晶体管的导电特性,从而改变存储单元的电荷状态。
3. 擦除操作:Nor Flash的擦除操作是通过电子隧道效应实现的。
当需要擦除数据时,首先通过地址线选中特定的存储块,一个存储块通常由多个存储单元组成。
然后,施加一个较高的擦除电压,即高电压。
这个高电压会使得存储单元中的电荷通过隧道效应流出,从而擦除数据。
三、Nor Flash的应用领域1. 嵌入式系统:Nor Flash广泛应用于嵌入式系统中,如智能手机、平板电脑、车载导航、物联网设备等。
由于Nor Flash具有快速读取速度和较长的数据存储寿命,能够满足嵌入式系统对数据存储和快速读取的需求。
2. 数字产品:Nor Flash也被广泛应用于数字产品中,如数码相机、MP3播放器、游戏机等。
Nor Flash的可靠性和稳定性使得这些数字产品能够稳定地存储和读取大量的数据。
3. 软件存储:Nor Flash还常用于存储系统软件,如操作系统和引导程序。
NorFlash测试方法介绍
NOR Flash 存储器测试方法介绍一、NOR FLASH简介NOR FLASH 是很常见的一种存储芯片,数据掉电不会丢失;NOR FLASH支持Execute ON Chip,即程序可以直接在FLASH片内执行;这点和NAND FLASH不一样;因此,在嵌入是系统中,NOR FLASH很适合作为启动程序的存储介质;NOR FLASH的读取和RAM很类似,但不可以直接进行写操作;对NOR FLASH的写操作需要遵循特定的命令序列,最终由芯片内部的控制单元完成写操作;从支持的最小访问单元来看,NOR FLASH一般分为8 位的和16位的当然,也有很多NOR FLASH芯片同时支持8位模式和是16 位模式,具体的工作模式通过特定的管脚进行选择; 对8位的NOR FLASH芯片,或是工作在8-BIT 模式的芯片来说,一个地址对应一个BYTE8-BIT的数据;在对FLASH进行写操作的时候,每个BIT可以通过编程由1变为0,但不可以有0修改为1;为了保证写操作的正确性,在执行写操作前,都要执行擦除操作;擦除操作会把FLASH的一个SECTOR,一个BANK或是整片FLASH 的值全修改为0xFF;这样,写操作就可以正确完成了;1. 8-BIT的NOR FLASH例如一块8-BIT的NOR FLASH,假设容量为4个BYTE;那芯片应该有8个数据信号D7-D0 和2个地址信号,A1-A0;地址0x0对应第0个BYTE,地址0x1对应于第1BYTE,地址0x2对应于第2个BYTE,而地址0x3则对应于第3 个BYTE2. 16-BIT的NOR FLASH对16位的NOR FLASH芯片,或是工作在16-BIT模式的芯片来说,一个地址对应于一个HALF-WORD16-BIT的数据;例如,一块16-BIT的NOR FLASH,假设其容量为4个BYTE;那芯片应该有16 个数据信号线D15-D0 和1个地址信号A0;地址0x0对应于芯片内部的第0个HALF-WORD,地址0x1对应于芯片内部的第1个HALF-WORD;3. NOR Flash结构FLASH一般都分为很多个SECTOR,每个SECTOR包括一定数量的存储单元;对有些大容量的FLASH,还分为不同的BANK,每个BANK包括一定数目的SECTOR;FLASH的擦除操作一般都是以SECTOR,BANK或是整片FLASH为单位的;二、芯片资料本文档以SPANSION公司的S29JL064H芯片为例说明芯片详细信息参见datasheet;该芯片是一个64 Megabit 8 M x 8-Bit/4 M x 16-Bit的Nor Flash 芯片;1. 管脚说明如下A21–A0 22 AddressesDQ14–DQ0 15 Data Inputs/Outputs x16-only devicesDQ15/A-1 DQ15 Data Input/Output, word mode, A-1 LSBAddress Input, byte modeCE Chip EnableOE Output EnableWE Write EnableWP/ACC Hardware Write Protect/Acceleration PinRESET=Hardware Reset Pin, Active LowBYTE Selects 8-bit or 16-bit modeRY/BY Ready/Busy OutputVCC volt-only single power supplysee Product Selector Guide for speedoptions and voltage supply tolerancesVSS Device GroundNC=Pin Not Connected Internally2. 芯片的Bus Operations 如下:3.芯片的Command Definitions4.解释说明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;检测Product ID 需写入的指令序列为:向地址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;Nor Flash支持扇区擦Sector Erase除和整片擦除Chip Erase块擦除;向地址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.开短路测试测试方法、条件:1.I=-100uA2.I=100uA2.Leakage测试测试方法、条件:1. 测IIL: VCC=,input pin 加0 V,测试input pin电流2. 测IIH: VCC=,input pin 加,测试input pin电流3. 测IOZH:VCC=,由bus operations可知当CE为高IO pin处于HIGH Z状态,所以给CE加,IOpin加,测试IO pin电流4. 测IOZL:VCC=,由bus operations可知当CE为高IO pin处于HIGH Z状态,所以给CE加,IOpin加0V,测试IO pin电流3.擦除整个chip测试方法、条件:1. VCC=,2. 向地址0x5555 写入0xAA、向地址0x2AAA 写入0x55、向地址0x5555 写入0x80、向地址0x5555写入0xAA、向地址0x2AAA 写入0x55、向地址0x5555 写入0x103. 等待56 S 擦除完成,此时芯片内的数据都为0xFF4.工作电流测试5.Standby电流测试6.读所有chip 0xFF测试测试方法、条件:=2.设置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=2.设置OE,CE为低电平,给任意地址,此时IO输出数据;3.给IO加电流,读IO pin 电压;8.写并且读所有chip 0xFF测试测试方法、条件:1.VCC=3.向地址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电流,读IO pin 电压;10.擦除整个chip测试方法、条件:1. VCC=,2. 向地址0x5555 写入0xAA、向地址0x2AAA 写入0x55、向地址0x5555 写入0x80、向地址0x5555写入0xAA、向地址0x2AAA 写入0x55、向地址0x5555 写入0x103. 等待56 S 擦除完成,此时芯片内的数据都为0xFF11.CHECKBOARD测试测试方法、条件:=2.向地址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=,2. 向地址0x5555 写入0xAA、向地址0x2AAA 写入0x55、向地址0x5555 写入0x80、向地址0x5555写入0xAA、向地址0x2AAA 写入0x55、向地址0x5555 写入0x103. 等待56 S 擦除完成,此时芯片内的数据都为0xFF13.DIAGNOL测试测试方法、条件:=2.向地址0x5555 写入0xAA、向地址0x2AAA 写入0x55、向地址0x5555 写入0xA0,向page0初始地址0x00 写553. 地址增加1,即向地址0x01写AA4. 逐步增加地址,同时向地址内写入数据AA,直到写满1个page;5. 重复2-4过程,更改page初始地址,向page1,地址0x00写入AA,地址0x01写入0x55,之后每page 地址增加1,则往page内的对应地址写0x55,其他地址都写入0XAA6.设置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内的地址写0xAA,其他的都写0x55;14.DEVICE_ID测试15.BYPASS_WRITE测试16.8BIT的CHECKBOARD测试17.SECTOR_PROTECT测试18.AC参数的测试。
Nor Flash
NOR Flash简介NOR FLASH是INTEL在1988年推出的一款商业性闪存芯片,它需要很长的时间进行抹写,大半生它能够提供完整的寻址与数据总线,并允许随机存取存储器上的任何区域,而且它可以忍受一万次到一百万次抹写循环,是早期的可移除式闪存储媒体的基础.NOR Flash的原理从物理层面解释,NOR闸闪存的每个存储单元类似一个标准MOSFET,除了晶体管有两个而不是一个闸极.在顶部的是控制闸(CONTROL Gate,CG),它的徐阿奴阿布是土匪以氧化物层与周遭绝缘的浮闸(Floathing Gate,FG).由于这个FG在电气程度上是出于绝缘层独立的,所以湖边人员的毒啊班组会被困在里面,在一般的条件下,电荷经过很长时间都不会产生逃逸的情况.将FG放在CG与MOSFET通道之间.当FG 抓到电荷时,它部分屏蔽掉来自CG的电场,并改变这个单元的阀电压(VT).在读出期间.利用向CG的电压,MOSFET通道会变的导电或保持绝缘.这视乎该单元的VT而定(而该单元的VT受到FG上的电荷控制).这股电流流过MOSFET通道,并以二进制码的方式读出、再现存储的数据.在每单元存储1位以上的数据的MLC 设备中,为了能够更精确的测定FG中的电荷位准,则是以感应电流的量(而非单纯的有或无)达成的.逻辑上,单层NOR FLASH单元在默认状态代表二进制码中的"1"值,因为在以特定的电压值控制闸极时,电流会流经通道.经由以下流程,NOR FLASH单元可以被设置为二进制码中的"0"值.1. 对CG施加高电压(通常大于5V).2. 现在通道是开的,所以电子可以从源极流入汲极(想像它是NMOS晶体管).3. 源-汲电流够高了,足以导致某些高能电子越过绝缘层,并进入绝缘层上的FG,这种过程称为热电子注入.由于汲极与CG间有一个大的、相反的极性电压,借由量子穿隧效应可以将电子拉出FG,所以能够地用这个特性抹除NOR FLASH单元(将其重设为"1"状态).现代的NOR FLASH芯片被分为若干抹除片段(常称为区扇(Blocks or sectors)),抹除操作只能以这些区块为基础进行;所有区块内的记忆单元都会被一起抹除.不过一般而言,写入NOR FLASH单元的动作却可以单一字节的方式进行.虽然抹写都需要高电压才能进行,不过实际上现今所有闪存芯片是借由芯片内的电荷帮浦产生足够的电压,所以只需要一个单一的电压供应即可.NOR Flash的访问方式在NOR FLASH的读取数据的方式来看,它与RAM的方式是相近的,只要能够提供数据的地址,数据总线就能够正确的挥出数据.考虑到以上的种种原因,多数微处理器将NOR FLASH当做原地运行(Execute in place,XIP)存储器使用,这其实以为着存储在NOR FLASH上的程序不需要复制到RAM就可以直接运行.由于NOR FLASH没有本地坏区管理,所以一旦存储区块发生毁损,软件或驱动程序必须接手这个问题,否则可能会导致设备发生异常. 在解锁、抹除或写入NOR FLASH区块时,特殊的指令会先写入已绘测的记忆区的第一页(Page).接着快闪记忆芯片会提供可用的指令清单给实体驱动程序,而这些指令是由一般性闪存接口(Common FLASH memory Interface, CFI)所界定的. 与用于随机存取的ROM不同,NOR FLASH也可以用在存储设备上;不过与NAND FLASH相比,NOR FLASH的写入速度一般来说会慢很多.NOR Flash 和NAND Flash由1988年INTEL公司首先开发出NOR FLASH技术,彻底颠覆了原先EPROM和EEPROM一统天下的局面;紧接1989年东芝公司发表了NAND FLASH结构,强调以成本为主,降低每bit的成本,具有更高的性能,并且能像硬盘一样可以通过接口轻松升级.NOR FLASH和NAND FLASH是目前市面上两种主要的非易失闪存技术.NOR FLASH的特点是芯片内执行(XIP ,eXecute In Place),这样应用程序可以直接在FLASH闪存内运行,不必再把代码读到系统RAM中.NOR 的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响到它的性能.NAND的结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快.应用NAND的困难在于FLASH的管理和需要特殊的系统接口.通常NOR的速度比NAND稍快一些,而NAND的写入速度比NOR快很多,在设计中应该考虑这些情况.NOR Flash与NAND Flash的比较虽然NOR和NAND两种技术在现在的市场上都占有主流的地位,而且经过十几年的历史,但是现在仍然有相当多的硬件工程师分布清楚NOR和NAND闪存.相"FLASH存储器"经常可以与相"NOR存储器"互换使用.许多业内人士也搞不清楚NAND闪存技术相对于NOR技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些.而NAND则是高数据存储密度的理想解决方案.NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在FLASH闪存内运行,不必再把代码读到系统RAM中.NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能.NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快.应用NAND的困难在于FLASH的管理和需要特殊的系统接口.性能比较FLASH闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程.任何FLASH器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除.NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0.由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms.执行擦除时块尺寸的不同进一步拉大了NOR和NADN之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行.这样,当选择存储解决方案时,设计师必须权衡以下的各项因素.l NOR的读速度比NAND稍快一些.2 NAND的写入速度比NOR快很多.3 NAND的4ms擦除速度远比NOR的5s快.4 大多数写入操作需要先进行擦除操作.5 NAND的擦除单元更小,相应的擦除电路更少.接口差别NOR FLASH带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节.NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同.8个引脚用来传送控制、地址和数据信息.NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备.容量和成本NAND FLASH的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格.NOR FLASH占据了容量为1~16MB闪存市场的大部分,而NAND FLASH只是用在8~128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在Compact FLASH、Secure Digital、PC Cards和MMC存储卡市场上所占份额最大.可靠性和耐用性采用flahs介质时一个需要重点考虑的问题是可靠性.对于需要扩展MTBF的系统来说,FLASH是非常合适的存储方案.可以从寿命(耐用性)、位交换和坏块处理三个方面来比较NOR和NAND的可靠性.寿命(耐用性)在NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写次数是十万次.NAND存储器除了具有10比1的块擦除周期优势,典型的NAND块尺寸要比NOR器件小8倍,每个NAND存储器块在给定的时间内的删除次数要少一些.NOR Flash的烧写方式相对于硬件工程师和嵌入式软件工程师一般在完成设计之后常常需要验证FLASH是否在工作.在应用当中,也有很多时候需要对FLASH进行写操作.该文章简单介绍了基于ARM芯片的NOR FLASH烧写,并提供了2个具体的实例和源代码,希望对有需要的朋友有点帮助.在开始之前,先声明一下,这篇文章只是介绍了如何写 NOR FLASH的烧写驱动,和H-JTAG/H-FLASH ER没有直接的联系.在后面的介绍里,如无特别说明,处理器指的是 ARM 处理器,FLASH指的都是 NOR FLASH.另外,BYTE 指的是8-BIT的数据单元,HALF-WORD代表的是16-BIT的数据单元,而WORD 则代表了32-BIT的数据单元.1. NOR FLASH的简单介绍NOR FLASH是很常见的一种存储芯片,数据掉电不会丢失.NOR FLASH支持Execute On Chip,即程序可以直接在FLASH片内执行.这点和NAND FLASH不一样.因此,在嵌入是系统中,NOR FLASH很适合作为启动程序的存储介质.NOR FLASH的读取和RAM很类似,但不可以直接进行写操作.对NOR FLASH的写操作需要遵循特定的命令序列,最终由芯片内部的控制单元完成写操作.从支持的最小访问单元来看,NOR FLASH一般分为 8 位的和16位的(当然,也有很多NOR FLASH芯片同时支持8位模式和是16 位模式,具体的工作模式通过特定的管脚进行选择) . 对8位的 NOR FLASH芯片,或是工作在8-BIT模式的芯片来说,一个地址对应一个BYTE(8-BIT)的数据.例如一块8-BIT的NOR FLASH,假设容量为4个 BYTE.那芯片应该有8个数据信号D7-D0 和2个地址信号,A1-A0.地址0x0对应第0个 BYTE,地址0x1对应于第1BYTE,地址0x2对应于第2个 BYTE,而地址0x3则对应于第3 个BYTE对16位的 NOR FLASH芯片,或是工作在16-BIT模式的芯片来说,一个地址对应于一个HALF-WORD(16-BIT)的数据.例如,一块16-BIT的 NOR FLASH,假设其容量为4个BYTE.那芯片应该有16 个数据信号线D15-D0 和1个地址信号A0.地址 0x0对应于芯片内部的第0个 HALF-WORD,地址0x1对应于芯片内部的第1个 HALF-WORD. FLASH一般都分为很多个SECTOR,每个SECTOR包括一定数量的存储单元.对有些大容量的FLASH,还分为不同的BANK,每个BANK包括一定数目的SECTOR.FLASH的擦除操作一般都是以SECTOR,BANK或是整片FLASH为单位的.在对FLASH进行写操作的时候,每个BIT可以通过编程由1变为0,但不可以有0修改为1.为了保证写操作的正确性,在执行写操作前,都要执行擦除操作.擦除操作会把FLASH的一个SECTOR,一个BANK或是整片FLASH的值全修改为0xFF.这样,写操作就可以正确完成了.2. ARM 处理器的寻址ARM 可以说是目前最流行的32位嵌入式处理器.在这里只提一下 ARM 处理器的寻址,为后面做个铺垫.从处理器的角度来看,系统中每个地址对应的是一个BYTE的数据单元.这和很多别的处理器都是一样的.3. 处理器和 NOR FLASH的硬件连接从前面的介绍,我们知道从处理器的角度来看,每个地址对应的是一个 BYTE 的数据单元.而,NOR FLASH的每个地址有可能对应的是一个BYTE的数据单元,也有可能对应的是一个HALF-WORD的数据单元.所以在硬件设计中,连接ARM处理器和 NOR FLASH时,必须根据实际情况对地址信号做特别的处理.如果ARM处理器外部扩展的是8-BIT的NOR FLASH, 数据线和地址线的连接应该如图1所示. 从图中我们可以看到,处理器的数据信号D0-D7和FLASH的数据信号D0-D7是一一对应连接的,处理器的地址信号A0-An和NOR FLASH的地址信号A0-An 也是一一对应连接的.如果ARM处理器外部扩展的是16-BIT的NOR FLASH, 数据线必须要错位连接. 图2给了一个ARM处理器和16-BITNOR FLASH的连接示意图.如图2所示,ARM处理器的数据信号D0-D15和FLASH的数据信号D0-D15是一一对应的.而ARM处理器的地址信号和NOR FLASH的地址信号是错位连接的,ARM的 A0悬空,ARM 的A1 连接FLASH的A0,ARM 的A2连接FLASH的A1,依次类推.需要错位连接的原因是:ARM处理器的每个地址对应的是一个BYTE 的数据单元,而 16-BIT 的FLASH的每个地址对应的是一个 HALF-WORD(16-BIT)的数据单元.为了保持匹配,所以必须错位连接.这样,从ARM处理器发送出来的地址信号的最低位A0对16-BIT FLASH来说就被屏蔽掉了.补充说明:1. 一般来说,ARM处理器内部要设置相应的寄存器,告诉处理器外部扩展的FLASH的位宽(8-BIT/16-BIT/32-BIT) .这样,处理器才知道在访问的时候如何从FLASH正确的读取数据.2. 有些ARM处理器内部可以设置地址的错位.对于支持软件选择地址错位的处理器,在连接16-BIT FLASH的时候,硬件上可以不需要把地址线错位.读者设计的时候,请参考MCU的数据手册,以手册为准,以免造成不必要的麻烦.3. 如果处理器支持内部设置地址错位,在实际访问的时候,送出的地址实际上是在MCU内部做了错位处理,其作用是等效于硬件连接上的错位的.上面的描述可能比较抽象,下面让我们来看2个 ARM处理器访问16-BIT FLASH的例子:例子 1:ARM处理器需要从地址 0x0 读取一个 BYTE1 - ARM处理器在地址线An-A0上送出信号0x0;2 – 16-BIT FLASH在自己的地址信号An-A0上看到的地址是0x0,然后将地址0x0对应的16-BIT数据单元输出到D15-D0上;3 – ARM处理器知道访问的是16-BIT的FLASH,从D7-D0上读取所需要的一个BYTE的数据;例子 2:ARM处理器需要从地址 0x1 读取一个 BYTE1 - ARM处理器在地址线An-A0上送出信号0x1;2 – 16-BIT FLASH在自己的地址信号An-A0上看到的地址依然是0x0, 然后将地址0x0对应的16-BIT 数据单元输出到D15-D0上;3 –ARM处理器知道访问的是16-BIT的FLASH,从D15-D8 上读取所需要的一个BYTE 的数据;4. 从软件角度来看 ARM 处理器和 NOR FLASH的连接在上一个小节里,我们简单了解了 ARM 处理器和FLASH的硬件连接.在这个小节里面,我们从软件的角度来理解ARM处理器和FLASH的连接.对于8-BIT的FLASH的连接,很好理解,因为ARM处理器和8-BIT FLASH的每个地址对应的都是一个 BYTE 的数据单元.所以地址连接毫无疑问是一一对应的.如果 ARM 处理器连接的是 16-BIT 的处理器,因为 ARM 处理器的每个地址对应的是一个 BYTE 的数据单元,而 16-BIT FLASH的每个地址对应的是一个 HALF-WORD 的16-BIT的数据单元.所以,也毫无疑问,ARM处理器访问16-BIT处理器的时候,地址肯定是要错开一位的.在写FLASH驱动的时候,我们不需要知道地址错位是由硬件实现的,还是是通过设置ARM处理器内部的寄存器来实现的,只需要记住2点:1 – ARM处理器访问8-BIT FLASH的时候,地址是一一对应的;2 – ARM处理器访问16-BIT FLASH的时候,地址肯定是错位的.这一点对理解后面的例子会很有帮助.5. 8-BIT FLASH烧写驱动实例 - HY29F040HY29F040是现代公司的一款8-BIT的NOR FLASH.在这个小节里,我们以这个芯片为例子,介绍如何对8-BIT NOR FLASH进行操作.HY29F040的容量为512K-BYTE,总共包括8 个SECTOR,每个SECTOR 的容量是64K-BYTE.该芯片支持SECTOR擦除,整片擦除和以BYTE 为基本单位的写操作.HY29F040的命令定义如表-1所示.下面,我们来看看如何实现基本的擦除和编程操作.在本节后面的描述中,我们使用了下面的2 个定义: U32 sysbase; //该变量用来表示FLASH的起始地址#define SysAddr8(sysbase, offset) ((volatile U8*)(sysbase)+(offset)) //用来方便对指定的 FALSH 地址进行操作先解释一下 SysAddr8 的定义.这个宏定义了一个 BYTE(8-BIT)指针,其地址为(sysbase + offset).假设FLASH的起始地址为0x10000000,如果要将0xAB写到FLASH的第一个BYTE中去,可以用下面的代码: *SysAddr8(0x10000000, 0x1) = 0xAB;注意:在本节后面的描述中,SYSBASE代表的是FLASH的起始地址,而SysAddr8中的OFFSET则代表了相对于FLASH起始地址的BYTE偏移量.OFFSET也是8-BIT FLASH在自己的地址信号An-A0上看到的地址.整片擦除操作整片擦除操作共需要6个周期的总线写操作1 –将 0xAA写到FLASH地址 0x55552 –将 0x55 写到FLASH地址 0x2AAA3 –将 0x80 写到FLASH地址 0x55554 –将 0xAA写到FLASH地址 0x55555 –将 0x55 写到FLASH地址 0x2AAA6 –将 0x10 写到FLASH地址 0x5555对应的代码:*SysAddr8(sysbase, 0x5555) = 0xAA; //将值 0xAA写到FLASH地址 0x5555*SysAddr8(sysbase, 0x2AAA) = 0x55; //将值 0x55 写到FLASH地址 0x2AAA*SysAddr8(sysbase, 0x5555) = 0x80; //将值 0x80 写到FLASH地址 0x5555*SysAddr8(sysbase, 0x5555) = 0xAA; //将值 0xAA写到FLASH地址 0x5555*SysAddr8(sysbase, 0x2AAA) = 0x55; //将值 0x55 写到FLASH地址 0x2AAA*SysAddr8(sysbase, 0x5555) = 0x10; //将值 0x10 写到FLASH地址 0x5555SECTOR 擦除操作SECTOR的擦除操作共需要6个周期的总线写操作1 –将 0xAA写到FLASH地址 0x55552 –将 0x55 写到FLASH地址 0x2AAA3 –将 0x80 写到FLASH地址 0x55554 –将 0xAA写到FLASH地址 0x55555 –将 0x55 写到FLASH地址 0x2AAA6 –将 0x30 写到要擦除的 SECTOR 对应的地址对应的代码:*SysAddr8(sysbase, 0x5555) = 0xAA; //将值 0xAA写到FLASH地址 0x5555*SysAddr8(sysbase, 0x2AAA) = 0x55; //将值 0x55 写到FLASH地址 0x2AAA*SysAddr8(sysbase, 0x5555) = 0x80; //将值 0x80 写到FLASH地址 0x5555*SysAddr8(sysbase, 0x5555) = 0xAA; //将值 0xAA写到FLASH地址 0x5555*SysAddr8(sysbase, 0x2AAA) = 0x55; //将值 0x55 写到FLASH地址 0x2AAA*SysAddr8(sysbase, addr) = 0x30; //将值 0x30 写到要擦除的 SECTOR 对应的地址BYTE 编程操作写一个BYTE 的数据到FLASH中去,需要 4个周期的总线写操作1 –将 0xAA写到FLASH地址 0x55552 –将 0x55 写到FLASH地址 0x2AAA3 –将 0xA0 写到FLASH地址 0x55554 –将编程数据(BYTE)写到对应的编程地址上去对应的代码:*SysAddr8(sysbase, 0x5555) = 0xAA; //将值 0xAA写到FLASH地址 0x5555*SysAddr8(sysbase, 0x2AAA) = 0x55; //将值 0x55 写到FLASH地址 0x2AAA*SysAddr8(sysbase, 0x5555) = 0xA0; //将值 0xA0 写到FLASH地址 0x5555*SysAddr8(sysbase, addr) = data; //将一个 BYTE的数据写到期望的地址6. 16-BIT FLASH烧写驱动实例 - SST39VF160SST39VF160是SST公司的一款16-BIT的NOR FLASH. 在这个小节里, 我们以SST39VF160为例子, 介绍如何对16-BIT NOR FLASH进行操作.对8-BIT FLASH的操作很好理解,但对16-BIT FLASH的操作理解起来要晦涩很多.我尽力描述得清楚些.SST39VF160的容量为2M-BYTE , 总共包括512个SECTOR, 每个SECTOR 的容量是4K-BYTE. 该芯片支持SECTOR擦除,整片擦除和以 HALF-WORD 为基本单位的写操作.SST39VF160 的命令定义如表-2 所示.在表2 中,因为所有命令都是从FLASH的角度来定义的. 所以, 所有的地址都是HALF-WORD地址, 指的是16-BIT FLASH在自己的地址信号An-A0上看到的地址.在本节后面的描述中,我们使用了下面的2个定义:U32 sysbase; //该变量用来表示FLASH的起始地址#define SysAddr16(sysbase, offset) ((volatile U16*)(sysbase)+(offset)) //用来方便对指定的 FALSH 地址进行操作SysAddr16(sysbase, offset)首先定义了一个16-BIT HALF-WORD的指针,指针的地址为sysbase,然后根据offset做个偏移操作. 因为HALF-WORD指针的地址是2个BYTE对齐的, 所以每个偏移操作会使得地址加2. 最终, SysAddr16 (sysbase, offset)相当于定义了一个HALF-WORD的指针,其最终地址为(sysbase + 2offset) .在使用SysAddr16 的时候,将sysbase设置成FLASH的起始地址,offset 则可以理解为相对于FLASH起始地址的HALF-WORD 偏移量或是偏移地址.假设FLASH的起始地址为0x10000000,SysAddr16(0x10000000, 0)指向16-BIT FLASH的第0 个HALF-WORD, SysAddr16(0x10000000, 1指向16-BIT FLASH的第1 个HALF-WORD.依次类推.如果要将0xABCD分别写到FLASH的第0个和第 1个HALF-WORD 中去,可以用下面的代码:*SysAddr16(0x10000000, 0x0) = 0xABCD;*SysAddr16(0x10000000, 0x1) = 0xABCD;接下来,我们分别从ARM处理器的角度和FLASH的角度来具体分析一下.从 ARM 的角度来看:假设FLASH的起始地址为 0x10000000,因为 ARM 处理器知道FLASH的地址空间为 0x10000000 ~ (0x10000000 +FLASH容量– 1),所以在对这个地址空间进行访问的时候,会设置好FLASH的片选信号,并将低位的地址输出到地址信号上.以*SysAddr16(0x10000000, 0x1) = 0xABCD 为例.从ARM 处理器的角度来看,该操作是把0xABCD写到地址0x10000002上去.所以ARM处理器最终会在它的地址信号An-A0输出地址0x2,同时会在D15-D0 上输出0xABCD.从FLASH的角度来看:还是以 *SysAddr16(0x10000000, 0x1) = 0xABCD 为例,FLASH看到的地址是多少呢?接着分析.ARM 处理器在执行操作的时候,会设置好相应的FLASH片选使能信号,并在ARM的地址信号An-A0上输出 0x2.因为ARM和 16-BIT FLASH的地址信号的连接是错开一位的, 所以, FLASH最终在自己的地址An-A0上看到的信号是0x1, 相当于将ARM处理器输出的地址往右做了一个移位操作,刚好对应的是FLASH的第1 个HALF-WORD.同时,FLASH会在自己的D15-D0上看到数据0xABCD.通过上面的分析,我们知道 SysAddr16 中指定的 offset 的值就是 16-BIT FLASH在自己的地址An-A0 上看到的值.所以,我们可以很方便的通过 SysAddr16(sysbase, offset) 对FLASH进行操作,其中sysbase 代表FLASH起始地址,offset 则代表了FLASH的第几个HALF-WORD(HALF-WORD偏移量或偏移地址) .注意:1. 在本节后面的描述中,SysAddr16中的 SYSBASE代表的是FLASH的起始地址,而SysAddr16中的OFFSET则代表了相对于FLASH起始地址的 HALF-WORD 偏移量或偏移地址.OFFSET 的值也是16-BIT FLASH 在自己的地址信号An-A0上看到的值.2.在SST39VF160的命令定义中,所有的地址都是针对FLASH的HALF-WORD地址,指的是在FLASH自己的地址信号An-A0上看到的地址.整片擦除操作整片擦除操作共需要6个周期的总线写操作1 –将 0x00AA写到FLASH HALF-WORD 地址 0x55552 –将 0x0055 写到FLASH HALF-WORD地址 0x2AAA3 –将 0x0080 写到FLASH HALF-WORD地址 0x55554 –将 0x00AA写到FLASH HALF-WORD 地址 0x55555 –将 0x0055 写到FLASH HALF-WORD地址 0x2AAA6 –将 0x0010 写到FLASH HALF-WORD地址 0x5555对应的代码:*SysAddr16(sysbase, 0x5555) = 0x00AA; //将值 0x00AA 写到FLASH HALF-WORD地址 0x5555*SysAddr16(sysbase, 0x2AAA) = 0x0055; //将值 0x0055 写到FLASH HALF-WORD地址 0x2AAA*SysAddr16(sysbase, 0x5555) = 0x0080; //将值 0x0080 写到FLASH HALF-WORD地址 0x5555*SysAddr16(sysbase, 0x5555) = 0x00AA; //将值 0x00AA 写到FLASH HALF-WORD地址 0x5555*SysAddr16(sysbase, 0x2AAA) = 0x0055; //将值 0x0055 写到FLASH HALF-WORD地址 0x2AAA*SysAddr16(sysbase, 0x5555) = 0x0010; //将值 0x0010 写到FLASH HALF-WORD地址 0x5555SECTOR 擦除操作SECTOR的擦除操作共需要6个周期的总线写操作1 –将 0x00AA写到FLASH HALF-WORD 地址 0x55552 –将 0x0055 写到FLASH HALF-WORD地址 0x2AAA3 –将 0x0080 写到FLASH HALF-WORD地址 0x55554 –将 0x00AA写到FLASH HALF-WORD 地址 0x55555 –将 0x0055 写到FLASH HALF-WORD地址 0x2AAA6 –将 0x0030 写到要擦除的 SECTOR 对应的 HALF-WORD地址对应的代码:*SysAddr16(sysbase, 0x5555) = 0x00AA; //将值 0x00AA 写到FLASH HALF-WORD地址 0x5555*SysAddr16(sysbase, 0x2AAA) = 0x0055; //将值 0x0055 写到FLASH HALF-WORD地址 0x2AAA*SysAddr16(sysbase, 0x5555) = 0x0080; //将值 0x0080 写到FLASH HALF-WORD地址 0x5555*SysAddr16(sysbase, 0x5555) = 0x00AA; //将值 0x00AA 写到FLASH HALF-WORD地址 0x5555*SysAddr16(sysbase, 0x2AAA) = 0x0055; //将值 0x0055 写到FLASH HALF-WORD地址 0x2AAA*SysAddr16(sysbase, addr >> 1) = 0x0030; //将值 0x0030 写到要擦除的 SECTOR 对应的HALF-WORD地址注意:上面的代码中第6个操作周期中的ADDR 是从ARM处理器的角度来看的BYTE地址,因为在擦除的时候,用户希望指定的是从 ARM 的角度看到的地址,这样更方便和更直观.而在 SysAddr16 的宏定义中,OFFSET表示的是相对于FLASH起始地址的 HALF-WORD 偏移量,或是FLASH在自己的地址信号An-A0上看到的地址.所以需要执行一个右移操作,把ADDR转换成 HALF-WORD 地址.举例说明,SST39VF160 每个SECTOR 的大小是4K-BYTE.从ARM 处器的角度和用户的角度来看,SECTOR-0 相对于FLASH起始地址的BYTE地址是0x0;从FLASH来看SECTOR-0 的HALF-WORD地址是0x0.从ARM处理器的角度和用户的角度来看, FLASH SECTOR-1相对于FLASH起始地址的BYTE地址0x1000; 从FLASH来看, SECTOR-1的HALF-WORD地址应该是(0x1000 >> 1) = 0x800.如果要擦除SECTOR-0,上面代码的第6条指令应该是:*SysAddr16(sysbase, 0x0 >> 1) = 0x0030;如果要擦除SECTOR-1,上面代码的第6条指令应该是:*SysAddr16(sysbase, 0x1000 >> 1) = 0x0030;HALF-WORD 编程操作写一个HALF-WORD的数据到FLASH中去,需要4个周期的总线写操作1 –将 0x00AA写到FLASH HALF-WORD 地址 0x55552 –将 0x0055 写到FLASH HALF-WORD地址 0x2AAA3 –将 0x00A0 写到FLASH HALF-WORD 地址 0x55554 –将编程数据(HALF-WORD)写到对应的 HALF-WORD地址对应的代码:*SysAddr16(sysbase, 0x5555) = 0x00AA; //将值 0x00AA 写到FLASH地址 0x5555*SysAddr16(sysbase, 0x2AAA) = 0x0055; //将值 0x0055 写到FLASH地址 0x2AAA*SysAddr16(sysbase, 0x5555) = 0x00A0; //将值 0x00A0 写到FLASH地址 0x5555*SysAddr16(sysbase, addr >> 1) = data; //将数据写到对应的 HALF-WORD 地址注意:上面的代码中第4个操作周期中的ADDR是从ARM处理器的角度来看的BYTE地址, 因为在执行写操作的时候,用户希望指定的是从 ARM 的角度看到的地址,这样会更方便和更直观.而在 SysAddr16 的宏定义中,OFFSET表示的是相对于FLASH起始地址的HALF-WORD偏移量. 所以需要执行一个右移操作, 把它转换成HALF-WORD地址.举例说明,如果要数据 0x0123 写到地址 0x0 去,对应的是FLASH的第 0 个 HAFL-WORD,对应的HALF-WORD 地址应该是0x0,上面代码的第4条指令应该是:*SysAddr16(sysbase, 0x0 >> 1) = 0x0123;如果要数据0x4567写到地址0x2去, 对应的是FLASH的第1个 HALF-WORD, 对应的HALF-WORD地址应该是0x1, 上面代码的第4条指令应该是:*SysAddr16(sysbase, 0x2 >> 1) = 0x4567;如果要数据0x89AB写到地址0x4去, 对应的是FLASH的第2个HALF-WORD, 对应的HALF-WORD地址应该是0x2,上面代码的第4条指令应该是:*SysAddr16(sysbase, 0x4 >> 1) = 0x89AB;如果要数据 0xCDEF 写到地址 0x6 去,对应的是FLASH的第 3 个 HALF-WORD,对应的 HALF-WORD 地址应该是0x3,上面代码的第4条指令应该是:*SysAddr16(sysbase, 0x6 >> 1) = 0xCDEF;7. ADS 版源代码下载如果用户有需要,可以去下载在前面讨论的 2 个实例的 ADS 版的完整源代码和FLASH数据手册.提供给用户的程序都是在实际使用过程中经过测试的.源代码只供用户参考,并不一定能直接使用在用户的开发板上.用户需要根据自己实际使用的芯片进行相应的修改.源代码下载链接:/forum/forumdisplay.php?fid=38. 结束语这篇文章简单介绍了如何对NOR FLASH进行操作, 但没有包括状态查询, 保护等其他操作. 对于更复杂的多片FLASH并联的情况也没有讨论.有需要的朋友可以自己去研究.Nor Flash 在实际应用中的读取方式本实验是基于TQ2440的实验平台,采用S3C2440(ARM9)的CPU,以ADS/MDK的开发环境,使用的是AM29LV160DB的NOR FLASH,进行开发学习的一个NOR FLASH的编写和读取.(1) Nor FLASH工作模式Nor FLASH上电后处于数据读取状态(Reading Array Data).此状态可以进行正常的读.这和读取SDRAM/SRAM/ROM一样.(要是不一样的话,芯片上电后如何从Nor FLASH中读取启动代码.~)一般再对FLASH进行操作前都要读取芯片信息比如设备ID号.这样做的主要目的是为了判断自己写的程序是否支持该设备. Nor FLASH支持2种方式获取ID号.一种是编程器所用的方法需要高电压(11.5V-12.5V).另一种方法就是所谓的in-system方法,就是在系统中通过Nor FLASH的命令寄存器来完成.本文中只对in-system方法进行说明.此时需要切换到自动选择(Autoselect Command),这要通过发送命令来完成.命令类型见下图.注意:进入自动选择(Autoselect Command)模式后需要发送复位命令才能回到数据读取状态(Reading Array Data).在完成信息获取后一般就要擦除数据. Nor FLASH支持扇区擦(Sector Erase)除和整片擦除(Chip Erase).这2种模式都有对应的命令序列.在完成擦除命令后会自动返回到数据读取(Reading Array Data)状态.在返回前可查询编程的状态.完成擦除后就需要对芯片进行写入操作也就是编程.这就需要进入编程(Program)状态.在完成编程命令后会自动返回到数据读取(Reading Array Data)状态.在返回前可查询编程的状态.注意:编程前一定要先擦除.因为编程只能将'1'改写为'0',通过擦写可以将数据全部擦写为'1'.以上是主要的操作其他操作还有写保护等,请参考芯片数据手册.。
NANDFLASHECC校验原理与实现
NANDFLASHECC校验原理与实现NAND闪存(NAND Flash)是一种非易失性存储设备,常见于各种电子设备中,如手机、平板电脑和固态硬盘等。
由于其高集成度和大容量的特性,NAND闪存已成为主流存储介质之一、然而,由于各种原因(如电压波动、位反转和噪声等),在数据传输过程中可能会出现错误。
为了确保数据的可靠性和完整性,NAND闪存通常使用纠错码(ECC)进行校验和纠正。
ECC校验原理:ECC校验是一种基于算法的校验方法,通过对数据进行编码和校验位的添加,以检测和纠正传输过程中的错误。
在NAND闪存中,常用的ECC算法包括BCH(Bose-Chaudhuri-Hocquenghem)和RS(Reed-Solomon)等。
BCH编码:BCH编码是一种强大的纠错编码方法,可以用于检测和纠正多个错误位。
对于数据块大小为N的NAND闪存,BCH编码将数据块划分为多个子块,每个子块的大小为K,其中n=N/K是编码的重复次数。
在每个子块中,BCH编码器计算校验位,并将其添加到子块的末尾(通常称为附加码字)。
然后,这些附加码字组成了整个数据块的校验位。
BCH解码:BCH解码基于错误位置定位和纠正位计算。
在读取NAND闪存时,ECC解码器首先读取数据块和校验位,并计算其校验位。
然后,对于每个校验位错误的数据块,解码器使用BCH解码算法确定错误的位置。
一旦错误位置确定,解码器可以使用纠正位计算算法修复错误数据,并输出正确的数据块。
ECC实现:NAND闪存的ECC实现通常是在芯片级别进行的。
在芯片内部,有专门的ECC电路来执行编码和解码操作。
编码器:编码器通常包括一个BCH编码器和一个输出缓冲区。
BCH编码器接收数据块并计算校验位,然后将结果存储在输出缓冲区中。
输出缓冲区的大小通常与数据块的大小相等。
解码器:解码器通常包括一个BCH解码器、一个错误检测和位置确定单元以及一个错误修复单元。
BCH解码器接收数据块和校验位,并计算校验位。
NOR型FLASH存储器测试技术
NOR型FLASH存储器测试技术王征宇;赵桦【摘要】NOR型FLASH存储器因其能够长久地保持数据的非易失性(Non-Volatile)特点,被广泛用作各类便携型数字设备的存储介质,但由于此类器件的编程及擦写均需写入特定指令,以启动内置编程/擦除算法,从而使得采用自动测试系统对其进行测试也具有较高难度.因此,研究NOR型FLASH存储器的测试技术,并开发此类器件的测试平台具有十分重要的意义.首先以AMD公司的AM29LV160DT为例,介绍了NOR型FLASH存储器的基本工作原理,接着详细阐述了一种采用J750EX系统的DSIO模块动态生成测试矢量的方法,从而能够更为简便、高效地对NOR型FLASH存储器的功能进行评价.【期刊名称】《电子与封装》【年(卷),期】2016(016)003【总页数】6页(P15-19,30)【关键词】NOR型 FLASH;DSIO【作者】王征宇;赵桦【作者单位】中国电子科技集团公司第58研究所,江苏无锡214035;中国电子科技集团公司第58研究所,江苏无锡214035【正文语种】中文【中图分类】TN307FLASH闪存(Flash Memory)是一种非易失性(Non-Volatile)闪存,与各类DDR、SDRAM或者RDRAM等存储器不同,它在没有电流供应的条件下也能够长久地保持数据,因此被广泛用作各类便携型数字设备的存储介质,特别是移动存储、MP3播放器、数码相机、掌上电脑等新兴数字设备。
目前市场上有两种主要的非易失性闪存:NOR型和NAND型。
根据其自身的技术特点,均在市场中占有举足轻重的地位。
其中,NOR型为芯片内执行(XIP, eXecute In Place),即应用程序可直接在闪存内运行,不必再把代码读到系统RAM中,因此传输效率较高,但同时也使其无法像SRAM、SDRAM等存储器那样可以直接对地址单元进行读写操作,随写随读。
这使得对于此类器件的测试具有一定难度。
J-LINK烧写NOR FLASH NAND FLASH
J-LINK烧写NOR FLASH NAND FLASH最近在移植bootloader,搜集了一些u-boot移植文档,然后成功编译了u-boot,想将其烧到norflash中测试,于是通过j-link arm这个工具对其进行烧写,不料烧写的过程出现了错误,提示无法擦除xx sector之类的,并中止了擦写,原厂的u-boot被擦除了,自己编译了u-boot又无法烧写进去,而我的nandflash里叶没有U-boot,结果是,我心爱的Mini2440完全就瘫痪了,于是疯狂百度,google,想找到一种方法能够使J-LINK ARM正确的烧写NOR,搜到了N 多哥们遇到类似的情况,就是没有牛人的出现来解决。
想起以前看的某位哥们一个帖子,他为了不破坏Nor里面的u-boot,将u-boot烧写到了SDRAM里面测试,于是想通过这个方法来运行u-boot,然后通过u-boot来烧写nand。
我想通过AXD 来将u-boot,后来发现AXD只能烧写axf文件,而不能烧写Bin文件,于是这个思路又夭折,无奈到各种ARM技术交流群放肆请教,有位现在在日本的哥们给我提供了一条思路“间接烧写nand”,于是百度,果然有一篇“J-LINK间接烧写S3C2440 S3C2410 NORFLASH NANDFLASH”的帖子(该贴地址:/bbs/bbs_content_all.jsp?bbs_sn=3228953),通过该帖子的指点,我顺利烧写了Norflash,该贴还有一些遗漏之处,现将我的步骤记叙如下:我的平台是Mini440的, ARM是s3c3440,2M Norflash,128M nandflash该贴的思路是:通过j-link command工具将内存初始化程序加载到ARM得RAM 里运行,然后将U-BOOT加载到SDRAM运行,最好通过u-boot烧写NOR 和 NAND1 加载内存初始化程序到RAM连接好J-LINK打开J-LINK COMMAND工具,如果是从nor启动,输入loadbin f:\init.bin 0x40000000,如果是nand启动,输入loadbin f:\init.bin 0x0 输入setpc 0x40000000或者setpc 0x0将程序运行pc指针定位到init.bin的地址输入g,运行内存初始化文件这个init.bin文件,某位哥们已经上传到csdn上,可以去下载/source/3033969,我的S3C2440运行没问题,其他的就不清楚了2 加载u-boot到SDRAM输入 h,停止内存初始化程序输入loadbin f:\u-boot.bin 0x33f80000输入 setpc 0x33f80000输入 g运行这个时候终端上就能看到打印了,如不能重复第二步操作不是所有的u-boot都支持的内存启动,我用的是tekkeman编译好的u-boot.bin,下载地址是/space.php?uid=20543672&do=blog&id=943793 擦写norflash如果需要擦除Nor就要在带电的情况将启动开关拨到Nor端,否则将无法擦写在j-link comand输入h停止u-boot的运行再输入loadbin f:\your-u-boot.bin 0x30000000将你要下载的u-boot的加载到SDRAM输入g,运行u-boot再U-boot的终端下输入protect off all将nor flash解锁,否则下载时就会提示,芯片已锁定,无法擦写的错误再U-boot的终端下输入erase all将Nor擦除如显示“erasing setctor xxx … ok.”一串打印则表示擦除成功输入cp.b 0x30000000 0 0x3dfd8,将your-u-boot烧写进Nor,如终端打印“copy to flash。
nor_flash_读写过程
nor_flash_读写过程一、结构分析S3C2410处理器集成了8位NandFlash控制器。
目前市场上常见的8位NandFlash有三星公司的k9f1208、k9f1g08、k9f2g08等。
k9f1208、k9f1g08、k9f2g08的数据页大小分别为512Byte、2kByte、2kByte。
它们在寻址方式上有一定差异,所以程序代码并不通用。
本文以S3C2410处理器和k9f1208系统为例,讲述Nan dFlash的读写方法。
NandFlash的数据是以bit 的方式保存在memory cell里的,一般来说,一个cell 中只能存储一个bit,这些cell 以8 个或者16 个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device的位宽。
这些Line 组成Page,page 再组织形成一个Block。
k9f1208的相关数据如下:1block=32page;1page=528byte=512byte(Main Area)+16byte(Spare Area)。
总容量为=4096(block数量)*32(page/block)*512(byte/page)=64MbyteNandFlash以页为单位读写数据,而以块为单位擦除数据。
按照k9f1208的组织方式可以分四类地址:Col umn Address、halfpage pointer、Page Address 、Block Address。
A[0:25]表示数据在64M 空间中的地址。
Column Address表示数据在半页中的地址,大小范围0~255,用A[0:7]表示;halfpage pointer表示半页在整页中的位置,即在0~255空间还是在256~511空间,用A[8]表示;Page Address表示页在块中的地址,大小范围0~31,用A[13:9]表示;Block Address表示块在flash中的位置,大小范围0~4095,A[25:14] 表示;二、读操作过程K9f1208的寻址分为4个cycle。
一种新型NAND flash的寿命测试方法
A New W ay of Endurance Test for NAND Flash
Zhang Zhaofeng(Department of micro-nano electronics,Shanghai Jiao Tong University, Shanghai 200240,China)
Process and Fabrication I工艺与制造
Page读 时 间
25 u s
表 1 NAND flash操作时 间表
Page编程时 间
最小值
最大值
2oou s
80011 S
Block擦 除时间
最小值
最大值
660u S
l 92O p S
同时选 中64条 wL,对 一个 block中的所 有 cell同 时进 行 编程 ,这 样 的话 我们 就 需要 以应力理 论来分析字线 上施加 的 电压 对 栅 氧 的 应 力 。这 种 快 速 测 试 在
Abstract:In NAND flash testing.we need to m onitor and test the endurancts for saving the unnecessary cost of the back-end assem bly and custom er return。 The endurance testing is to check the maxim um program/erase cycles the device undergoes, but current endurance testing is very time-consum ing which has very high testing cost.This paper Introduce a fast cycling m ethod which decreases the testing tim e fr0m normal testing 1.5h to 0.1 3h and this method saves 91% testing time which increasingly improves the testing eficiency. Key words: NAND flash,Fast cycling,Endurance test
flash芯片测试方案
Flash芯片测试方案简介Flash芯片是一种非易失性存储芯片,广泛应用于各种电子设备中。
为了确保生产出品质稳定的Flash芯片,需要进行一系列测试以验证其性能和可靠性。
本文将介绍一种Flash芯片测试方案,旨在提供详细的测试步骤和方法。
测试准备在执行Flash芯片测试之前,需要准备以下设备和软件:1.Flash芯片测试器件2.电源供应器及连接线3.逻辑分析仪4.静电保护设备(如手套、脚垫等)5.计算机及串口线6.需要的测试软件测试步骤步骤1:准备环境在测试之前,确保测试环境满足以下要求:1.温度:通常Flash芯片测试需要在恒温下进行,温度一般设定为25°C。
2.静电保护:使用静电手套、脚垫等设备来防止静电对测试设备的干扰。
3.电源供应器:连接电源供应器并确保供电正常。
步骤2:连接测试设备将Flash芯片与测试器件以及逻辑分析仪等设备连接,确保连接无误。
具体连接方式根据芯片和测试设备的规格和接口类型而定。
步骤3:启动测试软件启动您选择的测试软件,并通过计算机串口连接到测试设备。
确保软件与测试设备之间的通信正常。
步骤4:执行测试用例根据Flash芯片的规格和要求,选择相应的测试用例。
测试用例可以包括读写速度、擦除操作、数据完整性等方面的测试。
1.读取速度测试:通过测试软件读取Flash芯片中的数据,记录读取速度并与规格进行比较。
2.写入速度测试:通过测试软件向Flash芯片写入数据,记录写入速度并与规格进行比较。
3.擦除操作测试:通过测试软件执行擦除操作,并验证擦除是否成功,擦除时间是否符合规格要求。
4.数据完整性测试:通过测试软件写入一定数量的数据,并读取校验数据完整性。
步骤5:记录测试结果在执行测试用例的过程中,记录每次测试的结果。
包括测试时间、通过与未通过的用例数量、异常情况等。
步骤6:分析结果并改进根据测试结果进行分析,并找出异常或不合格的原因。
在下一次测试中改进测试方案,提高测试的可靠性和准确性。
NOR Flash配置设计指南说明书
ENT-AN1263-4.5Application Note Flash Configuration Design GuideReleasedJuly2018Contents1Revision History (1)2Introduction (2)2.1NOR Flash Configurations and Options for 4.5.0APPL (2)2.2NOR Flash Layout (2)2.3Flash Budget (2)2.4Flash Deployment Considerations (2)Contents1Revision HistoryRevision 1.1Revision 1.1was published in July 2018to align with the Linux application software release 4.5.The following is a summary of changes in revision 1.1of this document.•Updated the Introduction section.For more information,see Introduction on page 2.•Updated the NOR Flash Configurations and Options for 4.5.0APPL section.For more information,see NOR Flash Configurations and Options for 4.5.0APPL on page 2.•Updated the NOR Flash Layout section.For more information,see NOR Flash Layout on page 2.•Updated the Flash Budget section.For more information,see Flash Budget on page 2.•Updated the Flash Deployment Considerations section.For more information,see Flash Deployment Considerations on page2.Revision 1.0Revision 1.0was published in May 2018.It was the first publication of this document.Revision HistoryThe revision history describes the changes that were implemented in the document. The changes are listed by revision, starting with the most current publication.This application note provides guidelines for running with SPI NOR flash only(without NAND flashdeployment)on a Microsemi based Ethernet switch,including WebStaX™,SMBStaX™,IStaX™,andCEServices™software variants.This document focuses on application using64MB NOR flash.For32MBNOR flash,please refer to AN1263-4.4.Note:This document assumes that the reader is familiar with the flash configuration introducedin4.1.0or later software versions.For more information about the flash configurationon the Microsemi switch applications,see ENT-AN1144-4.00(SPI Flash Design for VCore-III).2.1NOR Flash Configurations and Options for4.5.0APPLAt least a32-MB NOR flash is required to run WebStaX™,SMBStaX™,IStaXLiteProtection™,andIStaXLiteTiming™on a Micromsemi switch without NAND flash.However,if you want to grow yourapplications or run IStaX or CEServices,a64-MB NOR flash is required.The default flash layout for a64-MBNOR flash includes:•Boot-loader•Dual-image support•Application-writable section for persistent data2.2NOR Flash LayoutThe following is the typical flash layout of a64-MB flash in a NOR-flash-only system managed by flash imagesystem(FIS)under RedBoot.RedBoot> fis listName FLASH addr Mem addr Length Entry point.FisValid 0x00000000 0x00000000 0x00000000 0x00000000RedBoot 0x40000000 0x00000000 0x00040000 0x00000000conf 0x40040000 0x00000000 0x00010000 0x00000000linux 0x40050000 0x80100000 0x01400000 0x80100000linux.bk 0x41450000 0x80100000 0x01400000 0x80100000rootfs_data 0x42850000 0x00000000 0x01780000 0x00000000FIS directory 0x43FD0000 0x00000000 0x00010000 0x00000000RedBoot config 0x43FE0000 0x00000000 0x00001000 0x00000000Redundant FIS 0x43FF0000 0x00000000 0x00010000 0x00000000When customizing the application firmware image(the.MFI file),the size of the.MFI file cannot exceed20MB in a NOR-flash-only system with a64-MB NOR flash.2.3Flash BudgetAs the size of the.MFI file is limited to20MB,if you intend to grow your applications to exceed20MB,you need to use a combination of NOR flash and NAND flash.2.4Flash Deployment ConsiderationsAs the NAND flash cannot be pre-programmed by a NOR flash programmer,Microsemi provides a softwareboard bootstrapping procedure.This procedure requires a pre-programmed NOR flash that can format andupdate the NAND flash with the final production image during the first boot.Manufacturing-wise,thisprocedure may be time-consuming and inconvenient.On the other hand,NAND flash is significantly cheaperthan NOR flash,so a combined NOR/NAND-flash option reduces the BOM cost compared to a NOR-only solution.Starting from4.5.0software packages,Microsemi provides the following flash combination options.•16MB NOR flash+128MB NAND flash•32MB NOR flash+128MB NAND flash•16MB NOR flash+256MB NAND flash•32MB NOR flash+256MB NAND flash•32MB NOR flash only•64MB NOR flash onlyMicrosemi makes no warranty,representation,or guarantee regarding the information contained herein or the suitability of its products and services for any particular purpose,nor does Microsemi assume any liability whatsoever arising out of the application or use of any product or circuit.The products sold hereunder and any other products sold by Microsemi have been subject to limited testing and should not be used in conjunction with mission-critical equipment or applications.Any performance specifications are believed to be reliable but are not verified,and Buyer must conduct and complete all performance and other testing of the products,alone and together with,or installed in,any end-products.Buyer shall not rely on any data and performance specifications or parameters provided by Microsemi.It is the Buyer's responsibility to independently determine suitability of any products and to test and verify the same.The information provided by Microsemi hereunder is provided "as is,where is"and with all faults,and the entire risk associated with such information is entirely with the Buyer.Microsemi does not grant,explicitly or implicitly,to any party any patent rights,licenses,or any other IP rights,whether with regard to such information itself or anything described by such rmation provided in this document is proprietary to Microsemi,and Microsemi reserves the right to make any changes to the information in this document or to any products and services at any time withoutnotice.Microsemi HeadquartersOne Enterprise,Aliso Viejo,CA 92656USAWithin the USA:+1(800)713-4113Outside the USA:+1(949)380-6100Sales:+1(949)380-6136Fax:+1(949)215-4996Email:***************************©2019Microsemi.All rights reserved.Microsemi and the Microsemi logo aretrademarks of Microsemi Corporation.Allother trademarks and service marks are theproperty of their respective owners.Microsemi,a wholly owned subsidiary of Microchip Technology Inc.(Nasdaq:MCHP),offers a comprehensive portfolio of semiconductor and system solutions for aerospace &defense,communications,data center and industrial markets.Products include high-performance and radiation-hardened analog mixed-signal integratedcircuits,FPGAs,SoCs and ASICs;power management products;timing and synchronization devices and precise time solutions,setting the world's standard for time;voice processing devices;RF solutions;discrete components;enterprise storage and communication solutions;security technologies and scalable anti-tamper products;Ethernet solutions;Power-over-Ethernet ICs and midspans;as well as custom design capabilities and services.Microsemi is headquartered in Aliso Viejo,California,and has approximately 4,800employees globally.Learn more at .VPPD-04628Legal。
FLASH测试方法
需要特别注意的是,数据线的测试务必选择比较特殊的寄存器,如上述寄存器地址。这 样可以避免与后面的地址线的测试地址发生冲突,引起测试失败或者还得增加擦除块的操 作。而块擦除时间是比较长的。
以 32 位的数据总线系统中的 FLASH 芯片测试为例,FLASH 芯片数据线测试流程图见 图 3:
第 4 页 共 8页
一般来说flash芯片的质量应该由供应商来保证我们仅对生产过程中可能出现的故障进行测试因此建议使用快速测试这可使测试效率提高大约1特别说明的是由于数据线地址线的短路或者开路有时也会造成程序无法启动的现象此时可根据现象观察来进行判断
FLASH 测试方法
1 FLASH 测试方法概述
1.1 概述
z 根据测试需求不同:有的侧重于测试全面性,有的侧重于测试速度; z 根据不同的 FLASH 芯片,其擦除方法也不同,增加了芯片类型判断; z 该文档主要参照 intel flash28xxx 系列芯片进行叙述和整理,其他类型的 flash 的具
I=2
I=I+1
ptr=(0x01)<<I;
读出偏移地址为 ptr 地址空间 内容 X
N (X==0x55555555) ?
Y Y
(I<N)?
N
第 7 页 共 8页
FLASH 测试方法
uboot下nor flash操作
#define FLASH_OFFSET_CFI_RESP 0x20
flash_detect_cfi -> static int __flash_detect_cfi (flash_info_t * info, struct cfi_qry *qry) {
int cfi_offset;
u8 vcc_min; // 最小小Vcc
u8 vcc_max; //最大大Vcc
u8 vpp_min; //最小小Vpp
u8 vpp_max; //最大大Vpp
u8 word_write_timeout_typ; //字节写典型超时
u8 buf_write_timeout_typ; //缓存写典型超时
… //由于使用用的flash 是新型的CFI 规范的flash, 没有使用用
CONFIG_FLASH_CFI_LEGACY 这个宏, 所以flash_detect_legacy直接返回0 if (!flash_detect_legacy(cfi_flash_bank_addr(i), i)) flash_get_size(cfi_flash_bank_addr(i), i); size += flash_info[i].size;
nor flash 的使用用特点是 : 读操作可以按地址读, 写之前必须进行行擦除, 一一旦擦除 必须擦除整个扇区. 新型的flash 使用用3V 的电压便可以进行行整个扇区的擦除和写入入操作
任何芯片片的使用用, 都离不开驱动的支支持. uboot下的nor flash的驱动逻辑非非常简 单. 而而且, 对于符合 CFI ( Common Flash Interface )规范的flash芯片片,驱动有很 大大的通用用性. uboot 提供了很好的 flash 驱动逻辑 和 flash的使用用范例, 这些基本的使用用方方法 在linux里里也是同样的逻辑,只不过linux下需要加上一一层分区信息. 结合flash 芯片片 手手册, 可以对nor flash的使用用逻辑有较为清晰的理解.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NOR Flash 存储器测试方法介绍一、NOR FLASH简介NOR FLASH 是很常见的一种存储芯片,数据掉电不会丢失。
NOR FLASH支持Execute ON Chip,即程序可以直接在FLASH片内执行。
这点和NAND FLASH不一样。
因此,在嵌入是系统中,NOR FLASH很适合作为启动程序的存储介质。
NOR FLASH的读取和RAM很类似,但不可以直接进行写操作。
对NOR FLASH的写操作需要遵循特定的命令序列,最终由芯片内部的控制单元完成写操作。
从支持的最小访问单元来看,NOR FLASH一般分为8 位的和16位的(当然,也有很多NOR FLASH芯片同时支持8位模式和是16 位模式,具体的工作模式通过特定的管脚进行选择) 。
对8位的NOR FLASH芯片,或是工作在8-BIT模式的芯片来说,一个地址对应一个BYTE(8-BIT)的数据。
在对FLASH进行写操作的时候,每个BIT可以通过编程由1变为0,但不可以有0修改为1。
为了保证写操作的正确性,在执行写操作前,都要执行擦除操作。
擦除操作会把FLASH 的一个SECTOR,一个BANK或是整片FLASH 的值全修改为0xFF。
这样,写操作就可以正确完成了。
1. 8-BIT的NOR FLASH例如一块8-BIT的NOR FLASH,假设容量为4个BYTE。
那芯片应该有8个数据信号D7-D0 和2个地址信号,A1-A0。
地址0x0对应第0个BYTE,地址0x1对应于第1BYTE,地址0x2对应于第2个BYTE,而地址0x3则对应于第3 个BYTE2. 16-BIT的NOR FLASH对16位的NOR FLASH芯片,或是工作在16-BIT模式的芯片来说,一个地址对应于一个HALF-WORD(16-BIT)的数据。
例如,一块16-BIT的NOR FLASH,假设其容量为4个BYTE。
那芯片应该有16 个数据信号线D15-D0 和1个地址信号A0。
地址0x0对应于芯片内部的第0个HALF-WORD,地址0x1对应于芯片内部的第1个HALF-WORD。
3. NOR Flash结构FLASH一般都分为很多个SECTOR,每个SECTOR包括一定数量的存储单元。
对有些大容量的FLASH,还分为不同的BANK,每个BANK包括一定数目的SECTOR。
FLASH的擦除操作一般都是以SECTOR,BANK或是整片FLASH为单位的。
二、芯片资料本文档以SPANSION公司的S29JL064H芯片为例说明(芯片详细信息参见datasheet)。
该芯片是一个64 Megabit (8 M x 8-Bit/4 M x 16-Bit)的Nor Flash 芯片。
1. 管脚说明如下A21–A0 22 AddressesDQ14–DQ0 15 Data Inputs/Outputs (x16-only devices)DQ15/A-1 DQ15 (Data Input/Output, word mode), A-1 (LSBAddress Input, byte mode)CE# Chip EnableOE# Output EnableWE# Write EnableWP#/ACC Hardware Write Protect/Acceleration PinRESET#=Hardware Reset Pin, Active Low BYTE# Selects 8-bit or 16-bit modeRY/BY# Ready/Busy OutputVCC 3.0 volt-only single power supply(see Product Selector Guide for speedoptions and voltage supply tolerances)VSS Device GroundNC=Pin Not Connected Internally2. 芯片的Bus Operations 如下:3.芯片的Command Definitions4.解释说明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。
检测Product ID 需写入的指令序列为:向地址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。
Nor Flash支持扇区擦(Sector Erase)除和整片擦除(Chip Erase)块擦除。
向地址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.开短路测试测试方法、条件:1.I=-100uA2.I=100uA2.Leakage测试测试方法、条件:1. 测IIL: VCC=3.6V,input pin 加0 V,测试input pin电流2. 测IIH: VCC=3.6V,input pin 加3.6V,测试input pin电流3. 测IOZH:VCC=3.6V,由bus operations可知当CE为高IO pin处于HIGH Z状态,所以给CE加3.6V,IO pin加3.6V,测试IO pin电流4. 测IOZL:VCC=3.6V,由bus operations可知当CE为高IO pin处于HIGH Z状态,所以给CE加3.6V,IO pin加0V,测试IO pin电流3.擦除整个chip测试方法、条件:1. VCC=3.3V,2. 向地址0x5555 写入0xAA、向地址0x2AAA 写入0x55、向地址0x5555 写入0x80、向地址0x5555写入0xAA、向地址0x2AAA 写入0x55、向地址0x5555 写入0x103. 等待56 S 擦除完成,此时芯片内的数据都为0xFF4.工作电流测试5.Standby电流测试6.读所有chip 0xFF测试测试方法、条件: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电流,读IO pin 电压。
8.写并且读所有chip 0xFF测试测试方法、条件: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电流,读IO pin 电压。
10.擦除整个chip测试方法、条件:1. VCC=3.3V,2. 向地址0x5555 写入0xAA、向地址0x2AAA 写入0x55、向地址0x5555 写入0x80、向地址0x5555写入0xAA、向地址0x2AAA 写入0x55、向地址0x5555 写入0x103. 等待56 S 擦除完成,此时芯片内的数据都为0xFF11.CHECKBOARD测试测试方法、条件:1.VCC=3.3V2.向地址0x5555 写入0xAA、向地址0x2AAA 写入0x55、向地址0x5555 写入0xA0,向page0初始地址0x00 写#00,3. 地址增加1,即向地址0x01写#FF4. 逐步增加地址,同时向地址内交错写入数据00和FF,直到写满1个page。