大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是同一厂商不同系列Flash型号下Dummy Cycle设置方法的差异

  上一篇文章 《在i.MXRT启动头FDCB里调整Flash工作频率也需同步设Dummy Cycle》, 痞子衡是以i.MXRT1170-EVK上板载Flash型号IS25WP128为例来介绍Dummy Cycle设置的。最近痞子衡在支持一个i.MXRT1020客户的问题,需要用到i.MXRT1020-EVK,这个板载Flash是IS25LP064A,跟IS25WP128一样是来自同一Flash厂商ISSI的QSPI NOR产品,痞子衡想当然地认为之前的经验可以直接用在这颗Flash上,于是把FDCB原封不动地拷贝过来直接使用,但是发现i.MXRT1020竟然启动不了,这是怎么回事?

一、同一厂商不同系列Flash型号Dummy Cycle设置差异

  ISSI(芯成半导体)是一个比较老牌的存储器厂商,规模上不算顶级,但旗下Flash产品线众多,品类很齐全。其中串行NOR产品涵盖QuadSPI NOR、Octal Flash、Twin Quad NOR、HyperFlash等。

ISSI Flash种类: https://www.issi.com/US/product-flash.shtml

  恩智浦官方EVK板上选用的是IS25xP系列,属于最常用的QuadSPI NOR大类。这个系列主要分两大类:3.3V供电的IS25WP系列、1.8V供电的IS25LP系列。

  前面我们对IS25WP系列Flash的Dummy Cycle设置很了解了,那么IS25LP系列Flash是不是一样的设计呢?我们查看IS25LP064A数据手册来确认一下。

  我们找到如下Read Dummy Cycle与最大工作频率的对应表,从表里可以看到当IS25LP工作在Fast Read Quad I/O模式时,默认的6个Dummy Cycle适用的最大工作频率是104MHz(这点上与IS25WP系列是一致的),不过与IS25WP系列不同的是IS25LP系列Dummy Cycle仅有四档(2bit设置,对应4/6/8/10四种值),而IS25WP系列Dummy Cycle有十五档(4bit设置,对应1-15取值),所以Dummy Cycle设计在IS25LP上其实是精简版。

二、如何更改Flash里的Dummy Cycle?

  意识到IS25LP与IS25WP在Dummy Cycle设计上的差异,改起来就容易了。我们继续看Flash数据手册,IS25LP064A内部有个8bit的Read Register,其bit4-bit3是Dummy Cycles设置(精简设计一),寄存器类型里标明仅易失性一种属性(精简设计二)。

  在IS25LP064A的指令集表里,可以看到专门写Read Register的指令,即SRP指令,注意指令值就是唯一的0xC0(精简设计三)。

  分析到这里,额外的小工程修改Dummy Cycle是不可能了,只能老老实实在i.MXRT每次启动时直接借助FDCB启动头里的设置用SRP指令更改Flash的Dummy Cycle,即如下所示:

// 设置Dummy Cycle数
#define FLASH_DUMMY_CYCLES 8
#define FLASH_DUMMY_VALUE 0x2
// 写Read Register时序在LUT中的index(可自定义位置,但不要占BootROM预设的几个时序位置)
#define CMD_LUT_SEQ_IDX_SET_READ_PARAM 7
// BootROM中预设的LUT命令时序的index
#define CMD_LUT_SEQ_IDX_READ 0
#define CMD_LUT_SEQ_IDX_READSTATUS 1
#define CMD_LUT_SEQ_IDX_WRITEENABLE 3 const flexspi_nor_config_t qspiflash_config = {
.memConfig =
{
.tag = FLEXSPI_CFG_BLK_TAG,
.version = FLEXSPI_CFG_BLK_VERSION,
.readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackFromDqsPad,
.csHoldTime = 3u,
.csSetupTime = 3u,
// Enable Safe configuration
.controllerMiscOption = 0x10,
.deviceType = kFlexSpiDeviceType_SerialNOR,
.sflashPadType = kSerialFlash_4Pads,
.serialClkFreq = kFlexSpiSerialClk_133MHz,
.sflashA1Size = 8u * 1024u * 1024u,
// 使能Flash寄存器配置操作
.configCmdEnable = 1u,
.configModeType[0] = kDeviceConfigCmdType_Generic,
// 指示Flash寄存器配置时序在LUT中index
.configCmdSeqs[0] =
{
.seqNum = 1,
.seqId = CMD_LUT_SEQ_IDX_SET_READ_PARAM,
.reserved = 0,
},
// 设定Flash寄存器配置值(这里就是写入Read Register的值)
// Note1: 这里写入Read Register的值在IS25WP系列和IS25LP系列有区别
.configCmdArgs[0] = FLASH_DUMMY_VALUE << 3,
.lookupTable =
{
// Fast Read Quad I/O
[4*CMD_LUT_SEQ_IDX_READ] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB, RADDR_SDR, FLEXSPI_4PAD, 0x18),
[4*CMD_LUT_SEQ_IDX_READ + 1] = FLEXSPI_LUT_SEQ(MODE8_SDR, FLEXSPI_4PAD, 0x00, DUMMY_SDR, FLEXSPI_4PAD, FLASH_DUMMY_CYCLES-2),
[4*CMD_LUT_SEQ_IDX_READ + 2] = FLEXSPI_LUT_SEQ(READ_SDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0x00), // READ STATUS REGISTER
[4*CMD_LUT_SEQ_IDX_READSTATUS] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01),
[4*CMD_LUT_SEQ_IDX_READSTATUS + 1] = FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x00, 0, 0, 0), // WRTIE ENABLE
[4*CMD_LUT_SEQ_IDX_WRITEENABLE] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0x00), // Flash寄存器配置时序(这个时序需要上面READ STATUS, WRITE ENABLE的配合)
// Note2: 这里写入的指令在IS25WP系列和IS25LP系列有区别
[4*CMD_LUT_SEQ_IDX_SET_READ_PARAM] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xC0, WRITE_SDR, FLEXSPI_1PAD, 0x01),
[4*CMD_LUT_SEQ_IDX_SET_READ_PARAM + 1] = FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x00, 0, 0, 0),
},
},
.pageSize = 256u,
.sectorSize = 4u * 1024u,
.blockSize = 64u * 1024u,
.isUniformBlockSize = false,
};

  至此,同一厂商不同系列Flash型号下Dummy Cycle设置方法的差异痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页知乎主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:同一厂商不同系列Flash型号下Dummy Cycle设置方法可能有差异 (以IS25LP064为例)的更多相关文章

  1. 痞子衡嵌入式:串行NOR Flash的页编程模式对于量产时间的影响

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是串行NOR Flash的页编程模式对于量产时间的影响. 任何嵌入式产品最终都绕不开量产效率话题,尤其是对于主控是非内置 Flash 型 ...

  2. 痞子衡嵌入式:串行NOR Flash的Continuous read模式下软复位后i.MXRT无法启动问题解决方案之RESET#

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT上使能NOR Flash的Continuous read模式在软复位后无法正常启动问题的解决经验. 前一篇文章 <在i ...

  3. 痞子衡嵌入式:串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP. 在嵌入式世界里,当我们提起XiP设备(支持代码原地 ...

  4. 痞子衡嵌入式:16MB以上NOR Flash使用不当可能会造成软复位后i.MXRT无法正常启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT上使用16MB以上NOR Flash软复位无法正常启动问题的分析解决经验. 痞子衡这几天在支持一个i.MXRT1050客户项 ...

  5. 痞子衡嵌入式:串行NOR Flash的DQS信号功能简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是串行NOR Flash的DQS信号功能. 串行NOR Flash在嵌入式里的应用相当广泛,既可用作数据存储也可以用作代码(XiP)存储, ...

  6. 痞子衡嵌入式:一个奇怪的Keil MDK下变量链接强制对齐报错问题(--legacyalign)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是一个奇怪的Keil MDK下变量链接强制对齐报错问题. 痞子衡最近一直在参与恩智浦SBL项目(就是一个适用LPC和i.MXRT的完整OT ...

  7. 痞子衡嵌入式:恩智浦LPC系列MCU开发那些事 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是恩智浦LPC系列微控制器相关知识. 恩智浦半导体最早于2003年便开始推出LPC系列MCU,但早期的产品LPC2000/3000系列属 ...

  8. 痞子衡嵌入式:在i.MXRT启动头FDCB里调整Flash工作频率也需同步设Dummy Cycle

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是Flash工作频率与Dummy Cycle的联系. 上一篇文章 <从头开始认识i.MXRT启动头FDCB里的lookupTable ...

  9. 痞子衡嵌入式:在i.MXRT启动头FDCB里使能串行NOR Flash的DTR模式

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在FDCB里使能串行NOR Flash的DTR模式. 前两篇文章 <IS25WP系列Dummy Cycle设置> 与 < ...

随机推荐

  1. RabbitMq手动确认时的重试机制

    本文转载自RabbitMq手动确认时的重试机制 消息手动确认模式的几点说明 监听的方法内部必须使用channel进行消息确认,包括消费成功或消费失败 如果不手动确认,也不抛出异常,消息不会自动重新推送 ...

  2. Java自学第8期——多线程

    1.多线程: 操作系统支持同时运行多个任务,一个任务通常是一个程序,所有运行中的程序就是一个进程().程序内部包含多个顺序执行流,每个顺序执行流就是一个线程. 并发:两个或者多个事件在同一个时间段内交 ...

  3. java对象克隆复制

    原文链接:https://blog.csdn.net/ztchun/article/details/79110096 自己先简单描述总结一下:当想要将一个对象中已有的值直接给另外一个对象的时候,其实并 ...

  4. 第6章 for循环

    目标 掌握for循环的使用方法 理解for循环的嵌套 在第3章中,我们学习了times循环.times循环可以让一段代码重复执行指定的次数. 本章我们将学习另一种循环结构--for循环.它同样能让一段 ...

  5. CentOS7系统重置root密码

    https://blog.csdn.net/qq_42969074/article/details/88080821

  6. 利用Visual Studio调试JavaScript脚本

    方法1: 方法2: 打开IE,按F12调试. 方法3: JS断电点debugger代替

  7. SpringCloud组件

    1.Hystrix 1.1.简介 Hystrix,英文意思是豪猪,全身是刺,看起来就不好惹,是一种保护机制. Hystrix也是Netflix公司的一款组件. 主页:https://github.co ...

  8. 洛谷 P4747 [CERC2017]Intrinsic Interval 线段树维护连续区间

    题目描述 题目传送门 分析 考虑对于 \([l,r]\),如何求出包住它的长度最短的好区间 做法就是用一个指针从 \(r\) 向右扫,每次查询以当前指针为右端点的最短的能包住 \([l,r]\) 的好 ...

  9. 剑指 Offer 44. 数字序列中某一位的数字 + 找规律 + 数位

    剑指 Offer 44. 数字序列中某一位的数字 Offer_44 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author Wale ...

  10. windows跳转端口

    //将客户机端口内网33306转发到外网,在通过本地连接ssh -L 3306:10.0.0.208:3306 ttx@180.180.180.182--通过git bash执行命令--10.0.0. ...