痞子衡嵌入式:理解i.MXRT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值。
关于 FlexSPI 外设的 lookupTable,痞子衡之前写过一篇非常详细的文章 《从头开始认识i.MXRT启动头FDCB里的lookupTable》,这篇文章几乎可以帮助解决所有串行 QuadSPI NOR Flash(四线) 以及 Octal Flash(八线)的读时序配置问题,因为这些 Flash 都只用单一行地址(Row Addr)来寻址。
但是市面上也有一些特殊的存储器(比如八线 HyperBus Flash/RAM, OctalRAM 等)采用了行列混合寻址方式,对于这类存储器,我们在 FlexSPI 里配置读时序,尤其是读时序里的地址序列参数值时需要稍微注意一下,今天痞子衡就来聊聊这个话题:
一、FlexSPI外设关于行列地址Memory支持
先来看 FlexSPI 外设是如何支持行列混合寻址存储器的,在 FLSHxxCR1 寄存器里有 CAS 控制位,这里配置得即是存储器列地址(Column Addr)位宽。对于不支持列地址的存储器,CAS 需要被设置为 0;如果存储器支持列地址,那么 CAS 需要根据存储器实际情况来设置。
如果 FLSHxxCR1[CAS] 位不为 0 ,那么 FlexSPI 外设在传输时序里会拆分实际映射 Flash Address (即存储器自身偏移地址) 为行地址 FA[31:CAS] 和列地址 [CAS-1:0] 来分别传输。
在最终 lookupTable 里我们可以用这样的时序配置来实现存储器的读访问,这里 RADDR_DDR 子序列即传输行地址,CADDR_DDR 子序列即传输列地址(注:如下示例是在 FLSHxxCR1[CAS] = 3 的设置下)。
看到这里,似乎已经把 FlexSPI 对于行列地址 Memory 的支持讲完了。但是我相信你还是会有疑问,上面序列表里 RADDR_DDR 和 CADDR_DDR 具体参数值设置似乎没有讲清楚,为什么行列地址加起来位宽是 0x18 + 0x10 一共 40bit (一般 Memory 行列地址总位宽也就 32 bit)?并且明明 CAS 值只是 3,为何 CADDR_DDR 里设成 0x10 也行?
是的,这里需要再详细展开,首先我们要明白一点,因为 FlexSPI 连接得是八线 Memory,在实际总线上行、列地址传输位一定都是 8bits 的整数倍,如果 RADDR/CADDR_DDR 参数值设置得不是 8bits 的整数倍,不足 8bits 的部分,FlexSPI 会自动在低位插入相应保留位(即下图低保留bits,这些保留位的值是什么不确定,对 FlexSPI 来说也不在乎),然后在 RADDR/CADDR_DDR 设置的参数值范围内,如果对应 Memory 实际行、列地址位宽小于参数值,超出实际行、列地址的部分会被 FlexSPI 自动填入 0 值(即下图高0填充bits)。
二、常见行列混合地址Memory读配置实例
大部分 HyperBus Flash/RAM 在行、列地址设计上是一样的,痞子衡罗列了市面上常见的型号如下,我们就以 MIMXRT1050-EVKB 板卡上那颗 S26KS512 为例来介绍。
1. ISSI 出品的 IS26KSxxx 系列 HyperFlash
2. ISSI 出品的 IS66/67WVH 系列 HyperRAM
3. Cypress/Infineon 出品的 S26KSxxx 系列 HyperFlash
4. Cypress/Infineon 出品的 S80KSxxx 系列 HyperRAM
5. Winbond 出品的 W957D8、W959D8 系列 HyperRAM
我们在 S26KS512 手册里可以找到如下读时序图,主要关注时序最前面 48bits 的 Command-Address 序列,在手册 Command / Address Bit Assignments 表里有这 48bits 的详细定义,其中 CA[37:16] 是行地址与高位列地址,CA[2:0] 是低位列地址。
再来看 \SDK_2_12_0_EVKB-IMXRT1050\boards\evkbimxrt1050\driver_examples\flexspi\hyper_flash\polling_transfer 例程里的如下 lookupTable,RADDR_DDR 参数值是 0x18,CADDR_DDR 参数值是 0x10,根据上一节的分析,RADDR_DDR 里的高 2bits 会被 FlexSPI 设为 0(RADDR[21:0] 用于传输 CA[37:16])。因为 CAS = 3,所以 CADDR_DDR 里的高 13bits 也会被 FlexSPI 设为 0(CADDR[2:0] 用于传输 CA[2:0]),这是符合 S26KS512 手册时序定义的。
flexspi_device_config_t deviceconfig = {
.columnspace = 3,
.enableWordAddress = true,
};
const uint32_t customLUT[CUSTOM_LUT_LENGTH] = {
/* Read Data */
[0] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18),
[1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04),
};
三、特殊行列混合地址Memory读配置实例
最近我们在支持客户的过程中也发现了一些 Memory 有着不一样的行、列地址设计,比如如下这颗 IS66WVO OctalRAM。从手册里找到其 Command / Address bit assignment 表里 48bits 的定义。与上一节 HyperBus Flash/RAM 不一样的是,其高位列地址并不是在 8bits 对齐处出现的。
1. ISSI 出品的 IS66/67WVO 系列 OctalRAM
对于 IS66WVO 这样的行、列地址设计,我们在 lookupTable 里该如何填入 RADDR/CADDR_DDR 参数值呢?首先 CAS 设为 4,CADDR_DDR 设为 0x08 可以解决 CA[3:0] 传输问题。现在的重点是 RADDR_DDR 参数值,总共 24bits 传输位,低位还需要留 2 个保留位,所以 RADDR_DDR 仅能被设为 0x16(RADDR[20:2]用于传输 RA[12:0] + CA[9:4]),即如下面代码:
flexspi_device_config_t deviceconfig = {
.columnspace = 4,
.enableWordAddress = false,
};
const uint32_t customLUT[CUSTOM_LUT_LENGTH] = {
/* Read Data with continuous burst Sequence in DDR command mode */
[0] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x00),
[1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x16, kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x08),
[2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DUMMY_DDR, kFLEXSPI_8PAD, 0x1E, kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04),
};
至此,i.MXRT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值痞子衡便介绍完毕了,掌声在哪里~~~
欢迎订阅
文章会同时发布到我的 博客园主页、CSDN主页、知乎主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:理解i.MXRT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值的更多相关文章
- 痞子衡嵌入式:关于i.MXRT中FlexSPI外设lookupTable里配置Normal read的一个小误区
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT中FlexSPI外设lookupTable里配置Normal read的一个小误区. 关于串行四线NOR Flash,当其作 ...
- 痞子衡嵌入式:i.MXRT中FlexSPI外设对AHB Burst Read特性的支持
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是FlexSPI外设对AHB Burst Read特性的支持. 痞子衡之前写过一篇关于FlexSPI LUT的文章 <从头开始认识i ...
- 痞子衡嵌入式:i.MXRT中FlexSPI外设不常用的读选通采样时钟源 - loopbackFromSckPad
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT中FlexSPI外设不常用的读选通采样时钟源 - loopbackFromSckPad. 最近碰到一个客户,他们在 i.MX ...
- 痞子衡嵌入式:i.MXRT中不支持DQS的FlexSPI引脚组连接Flash下载与启动注意事项
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT中不支持DQS的FlexSPI引脚组连接Flash下载与启动注意事项. 最近痞子衡在支持一个印度客户,这个客户项目主芯片选择 ...
- 痞子衡嵌入式:i.MXRT全系列下FlexSPI外设AHB Master ID定义与AHB RX Buffer指定的异同
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT全系列下FlexSPI外设AHB Master ID定义与AHB RX Buffer指定的异同. 因为 i.MXRT 全系列 ...
- 痞子衡嵌入式:i.MXRT连接特殊Octal Flash时(OPI DTR模式下反转字节序)下载与启动注意事项(以MX25UM51245为例)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是OPI DTR模式下反转字节序的Octal Flash在i.MXRT下载与启动注意事项. 在恩智浦官方参考设计板 MIMXRT595-E ...
- 痞子衡嵌入式:MCUXpresso IDE下SDK工程在Build配置上与IAR,MDK差异
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso IDE下SDK工程在Build配置上与IAR,MDK差异. 恩智浦 SW 团队每个季度都会公布 SDK.Tool ...
- 痞子衡嵌入式:实抓Flash信号波形来看i.MXRT的FlexSPI外设下AHB读访问情形(无缓存)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是实抓Flash信号波形来看i.MXRT的FlexSPI外设下AHB读访问情形. 上一篇文章 <i.MXRT中FlexSPI外设对A ...
- 痞子衡嵌入式:其实i.MXRT下改造FlexSPI driver同样支持AHB方式去写入NOR Flash
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT下改造FlexSPI driver以AHB方式去写入NOR Flash. 痞子衡前段时间写过一篇 <串行NAND Fl ...
随机推荐
- IDEA插件配置之Eclipse Code Formatte
1.下载 在idea中的Plugins中下载插件 Eclipse Code Formatte,下载过之后重启. 2.配置 将自己下载的xml文件加载进来即可. 这个xml文件可自行在网上找找,有需要的 ...
- Java 集合常见知识点&面试题总结(上),2022 最新版!
你好,我是 Guide.秋招即将到来(提前批已经开始),我对 JavaGuide 的内容进行了重构完善,公众号同步一下最新更新,希望能够帮助你. 你也可以在网站(javaguide.cn)上在线阅读, ...
- NC14380 位数差
NC14380 位数差 题目 题目描述 给一个数组 \({a}\) ,定义 \(h(a,b)\) 为在十进制下 \(a + b\) 与 \(a\) 的位数差,求 \(\displaystyle\sum ...
- java反序列化漏洞专项
背景条件:java的框架,java的应用程序,使用序列化,反序列化操作非常多.在漏洞挖掘中,代码审计中,安全研究中,反序列化漏洞是个重点项,不可忽视.尤其是java应用程序的rce,10个里面有7个是 ...
- Tapdata “设擂招贤”携手 LeetCode 举办全球极客技术竞赛
2021年11月28日 Tapdata 专场全球极客技术竞赛将在 LeetCode 平台开赛,面向程序员"设擂招贤",打擂成功的前50名挑战者将优先获得 Tapdata 高端技 ...
- CA证书、自颁发证书、自签名证书联系
一.理论基础 ssl:secure socket layer(安全套接层协议)的缩写,通过此协议可以保证两个应用通信的可靠性和保密性.openssl:是ssl协议的实现.提供了对称加密算法.非对称加密 ...
- 方法引用_通过this引用本类的成员方法和方法引用_类的构造器(构造方法)引用和数组的构造器引用
package com.yang.Test.ThisMethodReference; /** * 通过this引用本类的成员方法 */ public class Husband { //定义一个买房子 ...
- SpringCloud微服务实战——搭建企业级开发框架(四十五):【微服务监控告警实现方式二】使用Actuator(Micrometer)+Prometheus+Grafana实现完整的微服务监控
无论是使用SpringBootAdmin还是使用Prometheus+Grafana都离不开SpringBoot提供的核心组件Actuator.提到Actuator,又不得不提Micrometer ...
- AI全流程开发难题破解之钥
摘要:通过对ModelArts.盘古大模型.ModelBox产品技术的解读,帮助开发者更好的了解AI开发生产线. 本文分享自华为云社区<[大厂内参]第16期:华为云AI开发生产线,破解AI全流程 ...
- redis学习之数据类型
<?php //连接本地的 Redis 服务 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); echo "Co ...