背景

支持一款nor flash时,出于性能考虑,一般会查看其nor支持的最高频率以及主控端spi控制器的最高频率,以选择一个合适的运行频率。

对于一款主控支持多款flash的情况,还得考虑好兼容性等问题。

主控端的最高频率,可以查看主控的规格书,本文主要说下nor的频率限制。

让我们带着问题出发,假设我们的主控端最高spi clk为100M,那该怎么识别nor的限制,驱动又可以怎么处理?

正确识别频率限制

让我们打开nor的规格书,搜索 "freq", 很容易看到104M, 133M之类的字样 。

如图是几款flash的规格书截图

winbond: w15q128

mxic: mx15l128

gd: gd25q127

看到这个结果是不是很开心,看起来这些flash都可以跑100M以上。那我的主控端的控制器本身最高就100M,就直接把spi clk配置成100M就可以了呗。

是这样吗?不是!

其实flash的这个频率是有例外情况的。规格书中会具体说明。下面以mxic为例截图说明

比如对于READ命令,其频率限制是fR

FAST READ命令,其频率限制是fC

DUAL READ,其频率限制是fT

QUAD READ, 其频率限制是fQ

fR,fC,fT, fQ 分别是多少呢?规格书中也会给出一个表

从表中可以看出,原来最普通,看起来最稳的READ命令,其实是最特殊的一个。除了READ之外的所有命令,都能支持133M。而READ只能支持可怜的50M。

看来我应该把标题取成 “震惊,nor flash最慢的一条命令竟然是...”

那下面的fT和fQ标注的84M又是什么意思?不是说都支持133M吗,怎么又冒出来一个84M

原来双线和四线操作,要支持133M也是有条件的,需要插入dummy。也就是在关键时刻,加点空的操作,这样才能在高频率的clk下工作。

那加多少dummy合适呢,这也是明码标价童叟无欺的,直接看规格书中的表格。

解决手段

我们最开始的假定是,主控可以跑100M,那让主控跑100M的话,这些频率限制怎么解决呢?

从表格可以看出,假设主控端clk跑到100M,那么驱动里面插入8个dummy就可以使得双线四线都达到104M。

那READ只支持50M,怎么办?这个其实很好解决,既然知道READ的这个限制,那么不用它就是了。

基本nor flash都提供了双线,四线操作,驱动中应该尽量支持起来,提高性能。退一步讲即使不支持双线四线,我们还有FAST_READ命令可以用,这个是支持100M以上的。

READ并不孤单

那么看来不用READ,我们就可以在100M的频率下愉快地玩耍了是吗? 很遗憾,不是的。

多看几款规格书,我们就可以发现,READ并不孤单,有些nor flash,不止READ跑不到100M,读ID之类的命令也跑不到100M。

如果说READ还可以改用其他命令,那么READ ID对于兼容多款nor来说,基本是绕不过去的了。

怎么解决呢 ?稳定起见,驱动中只能先用低频去读出ID,再用高频做正常读写。当然如果不是量产项目,那么直接使用100M也可能是可以读出来的。

实测数据

目前实测到各家的这个频率限制其实是有裕量的。

规格书限制为80M的READ,实测用100M也可以正常工作。

规格书限制为50M的READ,在75M下可正常工作,在100M下则概率性可正常工作。

规格书限制为80M的READ ID,在100M下可正常工作。

但以上只是在少量样片上测试的结果,实际上超出了规格书的限制范围肯定是有风险的。

真正量产的话说不定就有边界IC会出问题,所以最好还是认真读规格书,正确认识频率限制,并提前在驱动中做好处理。

本文地址: https://www.cnblogs.com/zqb-all/p/12115303.html

nor flash之频率限制的更多相关文章

  1. MSP430常见问题之FLASH存储类

    Q1:用IAR Embedded Workbench for MSP430 通过JTAG往MSP430上写程序.为了知道片内程序的版本,必须读出Flash 中内容.什么工具软件可以通过JTAG口实现这 ...

  2. Flash硬件原理

    1.2.1. 什么是Flash Flash全名叫做Flash Memory,从名字就能看出,是种数据存储设备,存储设备有很多类,Flash属于非易失性存储设备(Non-volatile Memory ...

  3. nand flash详解及驱动编写

    https://www.crifan.com/files/doc/docbook/linux_nand_driver/release/html/linux_nand_driver.html#nand_ ...

  4. nor flash之4字节地址模式

    背景 容量低于 16M bytes 的 nor,一般使用 3 字节地址模式,即命令格式是 cmd + addr[2] + addr[1] + addr[0] + ... 使用超过 16M bytes ...

  5. ESP8266开发之旅 进阶篇② 闲聊Arduino IDE For ESP8266烧录配置

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  6. Android系统“资源调度框架”

    Android系统"资源调度框架" 目录 Android系统"资源调度框架" 一.一些问题的思考 "资源"是什么 "资源" ...

  7. Flash调用麦克风

    import flash.events.ActivityEvent;import flash.media.Microphone;var deviceArray:Array = Microphone.n ...

  8. nor flash和nand flash的区别

    NOR和NAND是现在市场上两种主要的非易失闪存技术.Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面.紧接着,1989年,东芝公司发表了 ...

  9. Flash视频播放器开发经验总结

    HTTP协议更优 目前几乎所有的视频点播网站全部采用HTTP协议传输数据.因为相对于诸如RTMP等协议来说,HTTP协议是无状态的,数据传输完毕就断开连接,这样服务器就可以腾出资源来服务更多的用户.而 ...

随机推荐

  1. spring data jpa 原生sql 别名字段无法注入

    开发四年只会写业务代码,分布式高并发都不会还做程序员?->>>    在使用entityManager.createNativeQuery(sql,User.class)这个方法时, ...

  2. mysql 查询当天、昨天、本周、上周、本月、上月、今年、去年数据

    mysql查询今天.昨天.7天.近30天.本月.上一月 数据 今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT ...

  3. qt中绘制文字

    (1)颜色QPen (2) 字体QFont (3)位置与对齐 void CircleWidget::paintEvent(QPaintEvent *event) { QPainter painter( ...

  4. Android Http实现文件的上传和下载

    最近做一个项目,其中涉及到文件的上传和下载功能,大家都知道,这个功能实现其实已经烂大街了,遂.直接从网上荡了一堆代码用,结果,发现网上的代码真是良莠不齐,不是写的不全面,就是有问题,于是自己重新整理了 ...

  5. 模板—树上倍增LCA

    int LCA(int x,int y) { if(x==y)return x; if(dep[x]>dep[y])swap(x,y); while(dep[x]<dep[y]) ;;i+ ...

  6. 将Eclipse中文注释字体变大方法

    今天下了最新的eclipse玩,结果发现注释变得灰常小,差点看瞎哥24K氪金狗眼 于是在网上找了找解决方法,结果都不对 最后自己试出来了... 方法:  Window --> Preferenc ...

  7. 测试代码的执行时间魔法方法%time和%timeit

    对于规模更大.运行时间更长的数据分析应用程序,你可能会希望测试一下各个部分或函数调用或语句的执行时间.你可能会希望了解某个复杂计算过程中到底是哪些函数占用的时间最多.幸运的是,在开发和测试代码的过程中 ...

  8. mosquitto/openssl 在RK3288上的编译以及MQTT客户端的代码示例

    1,依赖库openssl 的交叉编译 (1)配置编译器信息 setarch i386 ./config no-asm shared --cross-compile-prefix=arm-linux-a ...

  9. CODE FESTIVAL 2017 qual A C Palindromic Matrix(补题)

    彩笔看到题目后,除了懵逼,没有啥反应了,唯一想的就是 这是不是dp啊?看了题解才发现,原来是这样啊. 画几个矩阵看看就能看出来规律. 思路:先假设这是个M * N的矩阵 如果M和N都是偶数,则每个出现 ...

  10. 字符串编辑距离(Edit Distance)

    一.问题描述定义字符串编辑距离(Edit Distance),是俄罗斯科学家 Vladimir Levenshtein 在 1965 年提出的概念,又称 Levenshtein 距离,是指两个字符串之 ...