Nor flash 以及nandflash原理总结
?一、NOR FLASH ?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为单位的。 2.处理器和NOR FLASH的硬件连接 ??????? 从前面的介绍,我们知道从处理器的角度来看,每个地址对应的是一个BYTE的数据单元。而,NOR FLASH的每个地址有可能对应的是一个BYTE的数据单元,也有可能对应的是一个HALF-WORD的数据单元。所以在硬件设计中,连接ARM处理器和NOR FLASH时,必须根据实际情况对地址信号做特别的处理。 ?????? 如果ARM处理器外部扩展的是16-BIT的NOR FLASH,地址线必须要错位连接。图2给了一个ARM处理器和16-BIT NOR 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来说就被屏蔽掉了。 上面的描述可能比较抽象,下面让我们来看2个ARM处理器访问16-BIT 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点: 3.从软件角度来看ARM处理器和NOR FLASH的连接 在本节后面的描述中,我们使用了下面的2个定义: 二、NAND FLASH 1.NAND Flash 地址分类 NAND flash 以页为单位读写数据,而以块为单位擦除数据。按照这样的组织方式可以形成 2、NAND Flash 地址的表示
以NAND_ADDR 为例: 第1 步是传递column address,就是NAND_ADDR[7:0],不需移位即可传递到I/O[7:0]上, 而halfpage pointer 即A8 是由操作指令决定的,即指令决定在哪个halfpage 上进行读 写,而真正的A8 的值是不需程序员关心的。 第2 步就是将NAND_ADDR 右移9 位,将NAND_ADDR[16:9]传到I/O[7:0]上; 第3 步将NAND_ADDR[24:17]放到I/O 上; 第4 步需要将NAND_ADDR[25]放到I/O 上; 因此,整个地址传递过程需要4 步才能完成,即4-step addressing。 如果NAND Flash 的 容量是32MB(256Mbit)以下,那么,block adress 最高位只到bit24,因此寻址只需要3 步。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |