Nor Flash的简单介绍

搬砖于:https://www.cnblogs.com/053179hu/p/10635601.html

  1. Nor是非易失性存储器之一

  2. Nor Flash最大的特点是支持XIP(Execute On Chip),就是可以直接在Nor Flash的皮内内存执行,在Nor Flash中的代码运行时不需要重定位复制到RAM内。Nor Flash的地址线跟数据线是分开的,数据的读取和RAM很类似,只要能够提供数据地址,数据总线就能正确给出数据,不过不能直接对他进行写操作,执行写操作之前需要发送固定的命令序列,然后发送写操作的地址和数据。

  3. Nor Flash存储器的最小的访问单元一般分为8位和16位的,也有一些Nor flash器件同时支持8和16位模式。

  4. Nor Flash一般有多个扇区,扇区是Nor Flash擦除的最小单位,Nor Flash每个扇区大小都是不固定的,扇区的排放一般分为两种模式top boot part和bottom boot part。这两种形式的区别是小块的扇区在Nor Flash芯片中防止的位置不同,Bottom Boot 类型的Nor Flash小块地址位于芯片0地址,Top Boot Part类型的小块地址位于芯片的高地址上。

符号 管脚名 功能
A0~A19 地址输入 地址信号,表示要读写数据的地址信息
Q0~Q15 数据输入/输出 数据输入/输出引脚,读周期内输出数据,写周期内输入数据
CE# 芯片使能 CE#为低电平时,芯片被选中,后续执行的操作才会有效
WE# 写使能 配合CE#和OE#以及地址引脚和数据引脚一起使用,当CE#低电平,OE#高电平,WE#为低电平时,Q0Q15上数据被写入到A0A19表示地址中
BYTE# 字或字节选择输入 当其为高电平时,数据输出为16bit模式;低电平时,数据输出为8bit模式
RESET# 硬件复位/扇区保护解锁引脚 硬件复位引脚,当输入信号为低电平时,芯片复位
OE# 输出使能 配合CE#和WE#以及地址引脚和数据引脚一起使用,当CE#低电平,WE#高电平,OE#为低电平时,将地址A0~A19内存中的数据传送到Q0 ~ Q15上
RY/BY# RY/BY#输出引脚 用于输出Ready和Busy信号,实际用时可以不接,可以用命令查询NOR Flash状态代替
VCC 电源供应引脚(2.7v~3.6v) 芯片供电电源
GND 地引脚 芯片电源地
WP#/ACC 硬件写保护/加速引脚 硬件写保护引脚,低电平有效
NC 不连接内部引脚 不用连接

S3C2440和NOR FLASH的连接


Nor Flash的数据宽度是16位的,与2440处理器的连接时,地址线必须错位进行连接。S3c2440的地址线A0悬空,A1连接NOR FLASH的地址线A1,以此排序,需要错位连接的原因是:2440处理器的每个地址对应的是一个byte的数据单元,而16-bit的Nor flash的每个地址对应是一个HALF-WORD(16-BIT)的数据单元。为了保持匹配,所以必须错位连接。这样,从2440处理器发出来的地址信号的最低位A0对16-BIT FLASH来说就被屏蔽掉了。


①、ARM处理器需要从地址0x0读取一个BYTE

  • ARM处理器在地址线An-A0上送出信号0x0;
    由于2440的A1连接NOR Flash A0,16-BIT FLASH在自己的地址信号An-A0上看到的地址是0x0,然后将地址0x0对应的16-BIT数据单元输出到D15-D0上;
    ARM处理器知道访问的是16-BIT的FLASH,从D7-D0上读取所需要的一个BYTE的数据。

②、ARM处理器需要从地址0x1读取一个BYTE

  • ARM处理器在地址线An-A0上送出信号0x1;
    由于2440的A1连接NOR Flash A0,16-BIT FLASH在自己的地址信号An-A0上看到的地址依然是0x0, 然后将地址0x0对应的16-BIT数据单元输出到D15-D0上;
    ARM处理器知道访问的是16-BIT的FLASH,从D15-D8 上读取所需要的一个BYTE 的数据。
    注意:有些ARM处理器内部可以设置地址的错位。对于支持软件选择地址错位的处理器,在连接16-BIT FLASH的时候,硬件上不需要把地址线错位。在设计的时候,应该参考芯片的数据手册,以手册为准,以免造成不必要的麻烦(如stm32连接是A0~A0)。

S3C2440驱动NOR Flash时序配置


上图为s3c2440操作Nor Flash的读时序

  • Tacs:表示片选使能前地址信号的设置时间
    Tcos:表示OE#信号使能前片选使能的设置时间,
    Tacc:表示表示数据的访问周期
    Tcoh:表示OE#信号释放后片选信号的保持时间
    Tcah:表示片选信号释放后地址的保持时间
    由于s3c2440为通用性能的处理器,他的外部可能接不同公司生成的不同型号的NOR Flash,所以这些参数值要根据所接型号的NOR FLASH的时序图进行设置。

下面根据NOR Flash芯片MX29LV60DBTI时序图来配置上述参数,MX29LV60DBTI的时序图如下图所示:

  • Tce:片选信号使能后多久输出数据有效,最大值为70ns

  • Toe:读信号发出后多久输出数据有效,最大值为30ns

  • Taa:地址信号发出后数据有效,最大值为70ns

  • Trc:读周期时间,最小70ns

  • Tdf:OE#或CE#高时,数据引脚浮空时间,最大30ns(可以忽略设置,当读取数据结束后,新的读取信号发出,要过70ns,数据线上数据有效,这段引脚浮空时间无影响)

上述最大值表示发出该信号后,间隔最大值的时间后,数据引脚的信号一定是有效的,在这个范围之内,数据信号的引脚可能有效。

为简单,我们一般设置2440的CE#、OE#、ADD控制信号同时发出,保持70ns后进行读取数据引脚的数据。NOR Flash连接s3c2440的Bank0地址,配置时序的寄存器为BANKCON0,该寄存器的各个位如下图所示:
内存控制器的时钟信号由HCLK时钟信号提供,假设设置的HCLK的值为100M,1clock = 10ns。根据前面分析,Tacs、Tcos寄存器位设置为0,Tacc寄存器的为设置为101 = 8clocks。

NOR Flash的读操作

unsigned int nor_read_word(unsigned int base, unsigned int offset)
{volatile unsigned short *p = (volatile unsigned short *)(base + offset);return *p;
}unsigned int nor_dat(unsigned int offset)
{return nor_read_word(NOR_FLASH_BASE, offset);
}

NOR Flash的扇区擦除

第1个总线周期:往555地址中写入AA
第2个总线周期:往2AA地址中写入55
第3个总线周期:往555地址中写入80
第4个总线周期:往555地址中写入AA
第5个总线周期:往2AA地址中写入55
第6个总线周期:往要擦除的扇区写入30

void nor_write_word(unsigned int base, unsigned int offset, unsigned int val)
{volatile unsigned short *p = (volatile unsigned short *)(base + offset);*p = val;
}/* offset是基于cpu的角度看到 */
void nor_cmd(unsigned int offset, unsigned int cmd)
{nor_write_word(NOR_FLASH_BASE, offset, cmd);
}/* 等待烧写完成 : 读数据, Q6无变化时表示结束 */void wait_ready(unsigned int addr){    unsigned int val;    unsigned int pre;    pre = nor_dat(addr);    val = nor_dat(addr);    while ((val & (1<<6)) != (pre & (1<<6)))    {        pre = val;        val = nor_dat(addr);            }}
void erase_nor_flash_sector(unsigned int addr)
{printf("erasing ...\n\r");nor_cmd(0x555<<1, 0xaa);    /* 解锁 */nor_cmd(0x2aa<<1, 0x55); nor_cmd(0x555<<1, 0x80);     /* erase sector */nor_cmd(0x555<<1, 0xaa);    /* 解锁 */nor_cmd(0x2aa<<1, 0x55); nor_cmd(addr, 0x30);     /* 发出扇区地址 */wait_ready(addr);  /* 等待操作完成 */
}

CPU外接NOR Flash,实际上就是将NOR Flash地址映射为CPU的统一编址。由于nor_cmd函数的offset是基于CPU的角度看到地址,而芯片手册上NOR Flash写入命令的地址从NOR Flash的实际物理地址,NOR Flash是16位的,它的0地址应该对应CPU的0地址和1地址。因此,NOR Flash的物理地址从CPU的角度来看,地址值应该是NOR Flash角度来看的两倍,所以在向某地址写入命令时,要将NOR Flash角度来看的地址右移一位。

NOR Flash的写操作

向NOR Flash地址中写入数据时,也应先发送相应的命令,发送命令的顺序如下:

第1个总线周期:往555地址中写入AA

第2个总线周期:往2AA地址中写入55

第3个总线周期:往555地址中写入A0

第4个总线周期:往要目标地址写入数据

void write_nor_flash(unsigned int addr,unsigned int val)
{/* 烧写 */nor_cmd(0x555<<1, 0xaa);     /* 解锁 */nor_cmd(0x2aa<<1, 0x55); nor_cmd(0x555<<1, 0xa0);     /* program */nor_cmd(addr, val);/* 等待烧写完成 : 读数据, Q6无变化时表示结束 */wait_ready(addr);}

写操作时值得注意的是,只有写入的目标的地址内容为0xff时,数据才能正确的写入,因此,一般情况下NOR Flash在写入时要对扇区进行擦除操作。NOR Flash在写入数据时只能将地址中的某位由1变0,而不能将某位由0变1。

假设NOR Flash某地址中存放字符a(0x61),如果未进行擦除前向该地址中写入字符G(0x47),最后该地址内容为A(0x41)。原因如下:

  • 字符a化为二进制—>1100001
  • 符G化为二进制—>1000111

由于写入时数据位只能由0变为1,最终结果100001,相当于执行原始数据和新写入数据进行&操作向NOR Flash执行上述步骤,验证上述过程

补充:

  1. 可以像内存一样读,不可以像内存一样
  2. 如果设置为Nand启动的话,cpu的0地址就是对应片内的4k内存;如果设置为nor启动的话,cpu的0地址就是对应片内的nor flash的0地址
  3. nor可以sip,可以直接在nor flash那里取指令来运行代码;nand不可以,他需要把4k的片内内存拷贝到cpu,才能执行
  4. nor flash 设置nor启动进入uboot模式

韦东山之学习笔记——NOR Flash相关推荐

  1. 3.韦东山嵌入式学习笔记-烧写工具

    程序烧写工具 oflash.SecureCRT.openJTAG.jlink 烧写方法 并口.openjtag.jlink.nor上的uboot 步骤 接口.接线.装驱动.装软件 如果PC有并口,装并 ...

  2. STM32学习笔记:FLASH读写之二

    因为关于STM32的Flash相关的知识点比较多,所以该内容的学习我们分为以下4个部分 1.RAM和ROM的一些基本概念 -- STM32学习笔记:FLASH读写之一 2.STM32的Flash寄存器 ...

  3. STM32学习笔记:FLASH读写之一

    因为关于STM32的Flash相关的知识点比较多,所以该内容的学习我们分为以下4个部分 1.RAM和ROM的一些基本概念 -- STM32学习笔记:FLASH读写之一 2.STM32的Flash寄存器 ...

  4. 韦东山Linux问题笔记

    一.韦东山JZ2440开发板的互ping问题 基本上老师那节互ping视频各个方面都有讲到,只不过它的侧重点不是大多数所遇到的问题,所以有一些问题讲的少了写,但基本都讲到了. 我用的是台式电脑,而韦东 ...

  5. 韦东山嵌入式学习视频

    本人微信公众号,同时本人也是韦东山老师的代理

  6. 韦东山linux学习之ubuntu 9.10 软件源 问题

    跟着开发板视频学习,安装了ubuntu9.10,然而由于现在官方已经不再提供软件更新的服务,软件我一直安装不上,搞了两天终于解决了. 一.安装VMware,配置等等就不详细说了,安装好系统后,网能连上 ...

  7. 2.6韦东山linux学习记录

    一.Source Insight 4.0使用教程(快速入门) Source Insight 4.0使用教程(快速入门)_喜欢纯音乐的博客-CSDN博客_sourceinsight4.0 二.启动方式选 ...

  8. 韦东山驱动视频笔记——3.字符设备驱动程序之poll机制

    linux内核版本:linux-2.6.30.4 目的:我们在中断方式的按键应用程序中,如果没有按键按下,read就会永远在那等待,所以如果在这个程序里还想做其他事就不可能了.因此我们这次改进它,让它 ...

  9. 韦东山第一期学习笔记——重定位

    重定位 说明 必须知道的几个概念 什么是代码重定位? 什么是位置无关码 什么是运行地址 为什么要代码重定位? nand flash启动的情况 nor flash启动的情况 两种方式的重定位 代码重定位 ...

  10. 【学习笔记】韦东山freertos直播学习笔记

    韦东山FreeRTOS学习 如果刚好有大佬看到发现笔记中有什么写错了的,欢迎大佬指点,我十分乐意受到大佬的指点哈哈哈,顺便我还想问一下csdn的编辑器有没有保存的快捷键啊,CTRL+S好像没有用啊. ...

最新文章

  1. visual studio 汇编 创建 项目
  2. javase基础socket编程之局域网聊天,局域网文件共享
  3. 【VMC实验室】在QCloud上创建您的SQL Cluster(5)
  4. springMVC处理跨域问题
  5. php ajax 懒加载demo,lazyload懒加载,怎么支持ajax获得的新内容?
  6. 最受开发人员欢迎的JDBC接口
  7. [HDU3756]Dome of Circus
  8. 几种类型的db,以及最新的db排名,看一下
  9. QGIS导入postgresql数据库shp数据
  10. mstar Android解锁,液晶电视维修之Mstar方案从强刷包提取引导的方法
  11. IEEEtran模板的参考文献管理问题a missing \item. \begin{thebibliography}{}
  12. 米家接入HomeKit系列五:Sir控制米家设备
  13. Java程序员的薪资取决于工作年限还是技术?
  14. Mongodb操作基础 分片
  15. 自媒体怎么快速入门?这几个技巧一定要掌握好
  16. AutoSAR系列讲解(入门篇)5.1-方法论概述
  17. 我是如何做到使得开源系统拥有安全的防护框架的呢?
  18. Visual Studio 2019 (VS2019)安装Spy++工具
  19. cacti 画图 断续问题处理
  20. 对接京东jingdong.homefw.task.bookOndoor(预约/派件)接口的需求和Java代码实现

热门文章

  1. 机器学习中最常见的四种分类模型
  2. 二分类模型评价指标-总结
  3. 思源黑体与思源宋体的区别
  4. 控制寄存器(CR0,CR1,CR2,CR3)和CR4
  5. UltraEdit 注册机使用激活方法
  6. Windows| 彻底修改 Windows 系统用户名
  7. [资源]世界国家中英文名称以及地区区号json格式
  8. 如何选择HR人事管理软件?HR人事管理系统软件有哪些
  9. 差分管电路图_最简单的单差分OCL功放电路图(四款单差分OCL功放电路设计原理图详解)...
  10. excel文件服务器未响应,excel打不开文件未响应怎么处理-处理excel无法打开文件未响应的方法 - 河东软件园...