NOR Flash地址位宽

上传人:ldj****22 文档编号:28940088 上传时间:2018-01-21 格式:DOC 页数:13 大小:62KB
返回 下载 相关 举报
NOR Flash地址位宽_第1页
第1页 / 共13页
NOR Flash地址位宽_第2页
第2页 / 共13页
NOR Flash地址位宽_第3页
第3页 / 共13页
NOR Flash地址位宽_第4页
第4页 / 共13页
NOR Flash地址位宽_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《NOR Flash地址位宽》由会员分享,可在线阅读,更多相关《NOR Flash地址位宽(13页珍藏版)》请在金锄头文库上搜索。

1、http:/ FlashNOR FLASH 是 INTEL 在1988年推出的一款商业性闪存芯片,它需要很长的时间进行抹写,大半生它能够提供完整的寻址与数据总线,并允许随机存取存储器上的任何区域,而且它可以忍受一万次到一百万次抹写循环,是早期的可移除式闪存储媒体的基础。目录NOR Flash 的访问方式NOR Flash 的烧写方式NOR Flash 的原理NOR Flash 的访问方式在 NOR FLASH的读取数据的方式来看,它与 RAM 的方式是相近的,只要能够提供数据的地址,数据总线就能够正确的挥出数据。考虑到以上的种种原因,多数微处理器将 NOR FLASH 当做原地运行(Execu

2、te in place,XIP)存储器使用,这其实以为着存储在 NOR FLASH 上的程序不需要复制到 RAM 就可以直接运行。由于 NOR FLASH 没有本地坏区管理,所以一旦存储区块发生毁损,软件或驱动程序必须接手这个问题,否则可能会导致设备发生异常。 在解锁、抹除或写入 NOR FLASH 区块时,特殊的指令会先写入已绘测的记忆区的第一页(Page) 。接着快闪记忆芯片会提供可用的指令清单给实体驱动程序,而这些指令是由一般性闪存接口(Commmemory Interface, CFI)所界定的。 与用于随机存取的 ROM 不同, NOR FLASH 也可以用在存储设备上;不过与 NA

3、ND FLASH 相比,NOR FLASH 的写入速度一般来说会慢很多。ONTNOR Flash 的烧写方式相对于硬件工程师和嵌入式软件工程师一般在完成设计之后常常需要验证 FLASH 是否在工作。在应用当中,也有很多时候需要对 FLASH 进行写操作。该文章简单介绍了基于 ARM 芯片的 NOR FLASH 烧写,并提供了2个具体的实例和源代码,希望对有需要的朋友有点帮助。在开始之前,先声明一下,这篇文章只是介绍了如何写 NOR FLASH 的烧写驱动,和 H-JTAG/H-FLASHER 没有直接的联系。在后面的介绍里,如无特别说明,处理器指的是 ARM 处理器, FLASH 指的都是 N

4、OR 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 的写操作需要遵循特定的命令序列,最终

5、由芯片内部的控制单元完成写操作。从支持的最小访问单元来看,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,而地址0

6、x3则对应于第 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 包括一定数目

7、的 SECTOR。FLASH的擦除操作一般都是以 SECTOR,BANK 或是整片 FLASH 为单位的。在对 FLASH 进行写操作的时候,每个 BIT 可以通过编程由1变为0,但不可以有0 修改为1 。为了保证写操作的正确性,在执行写操作前,都要执行擦除操作。擦除操作会把FLASH 的一个 SECTOR,一个 BANK 或是整片 FLASH 的值全修改为0xFF 。这样,写操作就可以正确完成了。2。 ARM 处理器的寻址ARM 可以说是目前最流行的32位嵌入式处理器。在这里只提一下 ARM 处理器的寻址,为后面做个铺垫。从处理器的角度来看,系统中每个地址对应的是一个 BYTE 的数据单元。

8、这和很多别的处理器都是一样的。3。 处理器和 NOR FLASH 的硬件连接从前面的介绍,我们知道从处理器的角度来看,每个地址对应的是一个 BYTE 的数据单元。而,NOR FLASH 的每个地址有可能对应的是一个 BYTE 的数据单元,也有可能对应的是一个 HALF-WORD 的数据单元。所以在硬件设计中,连接 ARM 处理器和 NOR FLASH 时,必须根据实际情况对地址信号做特别的处理。如果 ARM 处理器外部扩展的是8-BIT 的 NOR FLASH, 数据线和地址线的连接应该如图1 所示。 从图中我们可以看到,处理器的数据信号 D0-D7和 FLASH 的数据信号 D0-D7是一一

9、对应连接的,处理器的地址信号 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,依次类推。需要错位连接的

10、原因是 :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 处理器内部可以设置地址的错位。对于支持软件选择地址错位的处理器

11、,在连接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对

12、应的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

13、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 处理

14、器访问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 进行操作。H

15、Y29F040的容量为512 K-BYTE,总共包括8 个 SECTOR,每个 SECTOR 的容量是64K-BYTE。该芯片支持 SECTOR 擦除,整片擦除和以 BYTE 为基本单位的写操作。HY29F040的命令定义如表-1 所示。下面,我们来看看如何实现基本的擦除和编程操作。在本节后面的描述中,我们使用了下面的2 个定义 :U32 sysbase; /该变量用来表示 FLASH 的起始地址#define SysADDR8(sysbase, offset) (volatile U8*)(sysbase)+(offset) /用来方便对指定的 FALSH 地址进行操作先解释一下 SysAd

16、dr8 的定义。这个宏定义了一个 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 地址 0x5555

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号