背景 支持一款nor flash时,出于性能考虑,一般会查看其nor支持的最高频率以及主控端spi控制器的最高频率,以选择一个合适的运行频率。 主控端的最高频率,可以查看主控的规格书,本文主要说下nor的频率限制。 让我们带着问题出发,假设我们的主控端最高spi clk为100M,那该怎么识别nor的限制,驱动又可以怎么处理? 正确识别频率限制 让我们打开nor的规格书,搜索 "freq", 很容易看到104M, 133M之类的字样 。 看来我应该把标题取成 “震惊,nor flash最慢的一条命令竟然是...” 那下面的fT和fQ标注的84M又是什么意思? 多看几款规格书,我们就可以发现,READ并不孤单,有些nor flash,不止READ跑不到100M,读ID之类的命令也跑不到100M。
设置: 物理基地址(phys), 大小(size), 位宽(bankwidth), 虚拟基地址(virt) */ s3c_nor_map->name = "s3c_nor"; s3c_nor_map ->phys = 0; s3c_nor_map->size = 0x1000000; /* >= NOR的真正大小 */ s3c_nor_map->bankwidth = 2; s3c_nor_map ->virt = ioremap(s3c_nor_map->phys, s3c_nor_map->size); simple_map_init(s3c_nor_map); /* 3. s3c_nor_mtd) { printk("use jedec_probe\n"); s3c_nor_mtd = do_map_probe("jedec_probe", s3c_nor_map */ add_mtd_partitions(s3c_nor_mtd, s3c_nor_parts, 2); return 0; } static void s3c_nor_exit(void
Linux NOR 开发指南 1 简介 编写目的 此文档描述Sunxi NOR 模块的使用方法,为相关人员调试提供指导 适用范围 boot0: 适用于brandy-2.0 u-boot: 适用于 Framework:这层主要是处理不同厂家的NOR 物理特色差异,初始化SPINOR的工作状态,如工作线宽(1 线、2 线、4 线、8 线)、有效地址位(16M 以上的NOR 需要使用4 地址模式), 对应代码目录:drivers/mtd/spi-nor/spi-nor.c M25P80(generic SPI NOR controller driver):这层主要对SPI NOR Framework //配置根据需求选择 All available flash: //flash类型,只区分nor和非nor方案,Android方案无此选项,默认非nor 0. default 1. nor Choice ├─spi-nor.c ---spi nor驱动代码 └──其他 ├── spi --spi的接口代码 └── makefile ---编译文件 版 3 接口描述 3.1 驱动物理层接口 3.1.1
下主面要介绍下nor flash写保护,这个是可以在驱动层面做的。 nor写保护 写保护是nor提供的功能,即可以通过配置一些寄存器,将某些区域保护起来。 BP保护 大多数nor flash支持使用BP位来配置写保护,这种保护的特点是其保护的数据是成片的,一般是从flash头部开始的一片数据,或者从flash尾部开始的一片数据。 不同厂家的保护bit设置都不太一样,涉及到BP bit,SEC bit, CMP bit等,每适配一款新的nor,都得重新查下规格书才行。
最近研究了下nor flash的掉电问题,对nor的掉电有了更多的认识。总结分享如下 擦除从0变1,写入从1变0 nor flash的物理特性是,写入之前需要先进行擦除。 多次写入的例子 在uboot中就有一个利用nor这个特性的例子。当使用了冗余env功能时,flash上会维护两份env,我们记为envA和envB吧。 对此uboot支持几种策略,其中一种可适用于nor的策略FLAG_BOOLEAN,uboot会在env的头部结构中,使用了一个字节flags来表示其是否有效。 写入过程掉电 对于nor来说,一次写入可以连续写256 bytes,那如果在中途发生了掉电,再次上电后读出来的数据会是什么样的呢? 当写入一笔数据时,nor就是按顺序写入的,掉电后的数据特征为前面部分数据是正确数据,后面部分数据是0xFF。前后的交界点并未对齐到256 bytes。
之前有介绍过写保护,这里就不赘述了,可参考:https://www.cnblogs.com/zqb-all/p/12182920.html 但没有谈到开销,今天有同事问起,便记录一下 性能 不考虑写保护的nor
擦写寿命长;5,耐高低温冲击;6,容量适宜(128MB~4GB) 具体可以可以看链接:http://www.longsto.com/product/31.html 我们把存储产品大概分为E2PROM,NOR 二,NOR Flash 是目前应用领域最广泛的一种存储芯片了.基本上主流的电子产品里都有使用。甚至我们手机摄像头内部,屏幕驱动电路板上都会用到。主要用来存储代码和一些比较小的数据文件。 主流是SPI NOR接口; 主流容量:1Mbit~128Mbit; 封装:SOP-8居多,也有更小的;尺寸也都比较小。 NOR Flash架构决定了它的容量不能做大,而且读取速度比较慢。 二,NOR Flash 是目前应用领域最广泛的一种存储芯片了.基本上主流的电子产品里都有使用。甚至我们手机摄像头内部,屏幕驱动电路板上都会用到。主要用来存储代码和一些比较小的数据文件。 主流是SPI NOR接口; 主流容量:1Mbit~128Mbit; 封装:SOP-8居多,也有更小的;尺寸也都比较小。 NOR Flash架构决定了它的容量不能做大,而且读取速度比较慢。
NAND NOR FLASH闪存产品概述 随着国内对集成电路,特别是存储芯片的重视,前来咨询我们关于NOR Flash,NAND Flash,SD NAND, eMMC, Raw NAND的客户越来越多了 擦写寿命长;5,耐高低温冲击;6,容量适宜(128MB~4GB) 具体可以可以看链接:http://www.longsto.com/product/31.html 我们把存储产品大概分为E2PROM,NOR 二,NOR Flash 是目前应用领域最广泛的一种存储芯片了.基本上主流的电子产品里都有使用。甚至我们手机摄像头内部,屏幕驱动电路板上都会用到。主要用来存储代码和一些比较小的数据文件。 主流是SPI NOR接口; 主流容量:1Mbit~128Mbit; 封装:SOP-8居多,也有更小的;尺寸也都比较小。 NOR Flash架构决定了它的容量不能做大,而且读取速度比较慢。
NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。 NOR的读速度比NAND稍快一些。 NAND的写入速度比NOR快很多。 应用程序对NOR芯片操作以“字”为基本单位。为了方便对大容量NOR闪存的管理,通常将NOR闪存分成大小为128KB或者64KB的逻辑块,有时候块内还分成扇区。读写时需要同时指定逻辑块号和块内偏移。 NOR闪存是随机存储介质,用于数据量较小的场合;NAND闪存是连续存储介质,适合存放大的数据。 由于NOR地址线和数据线分开,所以NOR芯片可以像SRAM一样连在数据线上。 由于NOR的这个特点,嵌入式系统中经常将NOR芯片做启动芯片使用。而NAND共用地址和数据总线,需要额外联结一些控制的输入输出,所以直接将NAND芯片做启动芯片比较难. NOR闪存的可靠性要高于NAND闪存,这主要是因为NOR型闪存的接口简单,数据操作少,位交换操作少,因此可靠性高,极少出现坏区块,因而一般用在对可靠性要求高的地方。
NAND FLASH,NAND为NOT AND(与非)之意,而NOR为NOT OR(或非)之意,该名称的命名是与两种FLAHS的架构有关的,如图所示: 两种Flash的架构对比 NAND FLASH 是把存储单元串行连在位线上,而 NOR FLASH 则是把存储单元并行的连到位线上。 所以 NOR 型的闪存存储器实现按位随机访问,而NAND 只能同时对多个存储单元同时访问。 对于 NOR FLASH,如果任意一个存储单元被相应的字线选中打开,那么对应的位线将变为 0,正是由于这种和 NOR 门电路相似的逻辑关系,使得这种结构的闪存被称为 NOR 型闪存,而 NAND FLASH
情况是这样的,Hadoop ha下,集群QJM的数据丢了,之后启动namenode后报Journal Storage Directory nor formatted,导致namenode启动失败
优化点 初步分析,从流程上看没什么问题,最大的耗时在擦除上,但毕竟nor的物理特性就是需要先擦除再写入的。 但仔细分析,其实还是有优化空间的,这个空间还就在于nor的擦除上。 nor拥有多条擦除的命令,可以擦除4k,32k,64k或者整片擦除。这些命令的耗时是不同的。 方案上由于分区规划设置了最小为4k的分区,所以nor就被配置为4k sector,则nor驱动使用的擦除命令就是对应的4k擦除的命令。而这是效率最低的一种擦除方式。 nor的几种擦除命令 这几种擦除方式,差异到底有多大呢? 找两款16M的norflash规格书看看。 ?
背景 容量低于 16M bytes 的 nor,一般使用 3 字节地址模式,即命令格式是 cmd + addr[2] + addr[1] + addr[0] + ... 驱动修改 新的 uboot, kernel 驱动中都是支持的,配置下就可以了,如配置上 SPI_NOR_4B_OPCODES 。 但软件退出的缺点是,只能解决正常重启的情况,无法处理硬件 reset 主芯片的操作,因为 reset 主芯片并不会让 nor 也 reset,那么 nor 就仍处于 4 字节地址模式,不响应 boot 另一种更好的处理方式是,硬件设计上支持让主芯片和 nor 同步 reset。 其他 nor 在 16M 这个容量是个分界点,不仅驱动上因为 4 字节地址模式的引入而更加复杂,价格上也是差别巨大,32M nor 远不止 16M nor 价格的两倍。
在上一章,我们添加了nor,nand启动后,uboot启动出如下图所示: ? print_size(flash_size, "\n"); //打印nor_flash的大小 } else { puts(failed); //初始化nand_flah ... ... } 从上面代码看出, board_init_r()会来初始化nor ,由于新的uboot不支持nor,所以flash_init()初始失败,然后打印一串错误代码后,等待复位. 由于2440在nand启动时,会自动装载nand的前4k内容,所以不支持norflash,因为nor的前4k内容被nand占用.
前言 随着国内对集成电路,特别是存储芯片的重视,越来越多的客户开始咨询关于NOR Flash、NAND Flash、SD NAND、eMMC、Raw NAND等存储产品的相关信息。 一、存储产品分类 我们将存储产品大致分为E2PROM、NOR Flash、NAND Flash三类,下面是具体分类介绍。 1.2 NOR Flash NOR Flash是目前应用最为广泛的存储芯片之一,几乎存在于所有主流电子产品中,如手机摄像头、屏幕驱动电路板等。它主要用于存储代码和小型数据文件。 主流NOR Flash多采用SPI接口,容量范围从1Mbit到128Mbit,封装形式多为SOP-8,且尺寸相对较小。 由于其架构限制,NOR Flash的存储容量无法做大,读取速度也相对较慢。
#第001节_Nor Flash原理及硬件操作 # Nor Flash的连接线有地址线,数据线,片选信号读写信号等,Nor Flash的接口属于内存类接口,Nor Flash可以向内存一样读,但是不能像内存一样写 Nor Flash的操作## 下面我们使用u-boot来体验Nor Flash的操作(开发板设置Nor启动,进入u-boot)。 Nor Flash的测试 nor_flash_test函数通过switch语句,分别处理识别NOR Flash,擦除NOR Flash某个扇区,编写某个地址,读某个地址。 写NOR Flash do_write_nor_flash的代码如下所示,开发板上的NOR Flash的位宽是16bit,所以可以把要写的数据构造出16bit然后在写进NOR Flash中。 读NOR Flash do_read_nor_flash函数代码如下,由于NOR Flash是内存类接口,可以像内存一样读取。
上章分析了uboot启动流程后,接下来便来配置新的单板,实现nor、nand启动 ---- 1.首先在uboot里新建单板2440 1.1将2410的单板文件夹拷贝成2440: cd board/samsung 上,测试 烧写测试时,由于新的uboot较大,可以使用nor上的旧uboot,通过DNW烧写新的uboot到nor上面. 的写保护 erase 0 +7FFFF //擦除nor上的 0~7FFFF地址内容, +7FFF=擦除长度=512kb,要大于新的uboot.bin才行 cp.b 30000000 发现无乱码了,表示nor启动成功,其中Flash: *** failed ***表示不支持norflash,因为我们只实现了重定位,并没有对nor实现写擦除等命令。 uboot支持nor flash、nand flash.
user").find({age:{$exists:0}}) db.getCollection("user").find({age:{$exists:false}}) 2、将exists配合ne、nin、nor 下面来看一下将exists配合ne、nin、nor、 查询user表name字段等于“测试小博”,并且name字段存在的记录: db.getCollection("user").find({name:{ :{$nin:[18,45,70],$exists:true}}) 查询user表age大于等于45或者是sex字段为空的记录: db.getCollection("user").find({ $nor
另外,在spinor 存储介质下,通过 u-boot-sun8iw21p1.bin 进行烧录,u-boot-spinor-sun8iw21p1.bin 启动,使用sys_partition_nor.fex 更具体的,nand分为并口nand和spinand,mmc分emmc和sd卡 主要需要区分的是nor和其他介质,因为需要打包的部分有所不同。 即,emmc和nand,sd卡一般可共用一份固件,而nor则需使用另一份固件 sys_config配置 在sys_config中有一个配置项,storage_type,取值及含义如下 ;-------- 的方案,必须配置为 storage_type = 3 对于其他介质,storage_type则不能配置为3 spinand切换为spinor sys_config 设置介质为nor [target] storage_type = 3 配置所用nor的大小 [norflash] size = 16 内核配置 make kernel_menuconfig ---> Device Drivers
or:[{name:{$eq:'小博'}},{name:{$eq:'测试小博'}}]}) db.user.find({$or:[{name:'小博'},{name:'测试小博'}]}) 4、逻辑运算符$nor 针对前面的$and、$or、$not的用法,大家可能见到过,但对于$nor操作,可能见的少一点,$nor简单的理解就是:多个条件中不满足其中的某一个。 比如查询name不为“小博”或者“测试小博”的数据: db.user.find({name:{$nin:['小博','测试小博']}}) db.user.find({$nor:[{name:'小博'}