大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT全系列下FlexSPI外设AHB Master ID定义与AHB RX Buffer指定的异同

  因为 i.MXRT 全系列型号都不含内部 Flash(部分 SIP 版本除外),因此用于连接外部 NOR Flash 的 FlexSPI 外设格外受宠。为了提高代码在 Flash 的原地执行效率,恩智浦设计团队为 FlexSPI 赋予了 Prefetch 特性用来加速访问效率(用 AHB RX Buffer 缓存数据)。

  痞子衡之前写过一篇关于 Prefetch 效果的实测文章 《FlexSPI外设下AHB读访问情形(有预取)》,那篇文章里只涉及了最简单的应用场景,即单个 AHB RX Buffer 占据全部 RX Buffer 空间且仅服务单个 AHB Master - CPU,而实际项目中可能有多个 AHB Master 会对 Flash 进行 AHB 读访问,这就引申出了今天的主题:

一、AHB Master与AHB RX Buffer

  i.MXRT 系列上 AHB master 包含 Core、DMA、加密模块等多达 16 个,这些 Master 都有能力对 Flash 主动发起 AHB 读访问。为了更好地服务这些 Master,FlexSPI 上用于存放预取数据的 AHB RX Buffer 不止一个,一般有 4/8 个,用户可以按需自由分配这些 AHB RX Buffer 的大小(总大小是一定的,一般是 1/2KB),并且可以将某个 AHB RX Buffer 指定给具体的 Master 来独占使用。

  • Note: i.MXRT 系列上不支持将多个 AHB RX Buffer 分配给同一个 AHB master,这种需求实际上可以通过配置不同的 AHB RX Buffer 大小来实现。

  下面是 i.MXRT 全系列型号上 AHB RX Buffer 情况总结:

i.MXRT型号 FlexSPI外设个数 单FlexSPI上AHB RX Buffer个数 单FlexSPI上AHB RX Buffer总大小
i.MXRT1011 1 4 1KB
i.MXRT1015 1 4 1KB
i.MXRT102x 1 4 1KB
i.MXRT105x 1 4 1KB
i.MXRT106x 2 4 1KB
i.MXRT116x 2 8 2KB
i.MXRT117x 2 8 2KB
i.MXRT5xx 2 8 FlexSPI0: 1KB

FlexSPI1: 2KB
i.MXRT6xx 1 8 2KB

  多个 AHB RX Buffer 带来的好处是显而易见的,相比于单个 AHB RX Buffer,其能有效避免因不同 AHB master 频繁交替访问 Flash 导致 AHB RX Buffer 被不断清除与重新缓存的低效情况发生。

二、AHB Master ID定义

2.1 i.MXRT10xx

  在 i.MXRT10xx 上,AHB master 们被分成了如下表中的四类(正好可分配到 4 个 AHB RX Buffer 上),除了 Core、eDMA、DCP 外,其余 Master 被直接打包在一起了(无法拆分)。Master ID 值用 4bit 来表示。

2.2 i.MXRT5xx/6xx

  在 i.MXRT5xx 上,Master ID 值也是用 4bit 来表示,但是 AHB master 们被进一步细分成了八类(可与 8 个 AHB RX Buffer 一一对应),如下表所示,其实主要最后一类 AXI:AHB Bridge 是打包的。此外这个型号上 FlexSPI0/1 不是完全对等的,所以其各自 Master ID 定义值也不太一样。

  在 i.MXRT6xx 上,Master ID 定义与上表中 FlexSPI1 下的定义一致。

2.3 i.MXRT11xx

  在 i.MXRT11xx 上,Master ID 值是用 16bit 来表示的,并且 AHB master 们都有自己专属的 ID 定义,没有任何原生打包现象,如下表所示。这个系列是全新架构,它在 ID 设计上新引入了 Remap 技术,这种 Remap 技术允许用户将多个 Master 打包在一起,从而指定到同一个 AHB RX Buffer 上。这样 17 个 Master 就可以指定到 8 个 AHB RX Buffer 上了。

三、AHB RX Buffer指定

  要想正常使用 AHB RX Buffer,必须保证 FlexSPI 外设的 Prefetch 功能是开启的,即仅当如下寄存器中的 PREFETCHEN 位被使能才行。每个 AHB RX Buffer 都有独立的配置寄存器(AHBRXBUFxCR0)。

FlexSPI->AHBCR[PREFETCHEN],总 Prefetch 开关
FlexSPI->AHBRXBUFxCR0[PREFETCHEN],单个 AHB RX Buffer 开关

3.1 i.MXRT5xx/6xx/10xx

  i.MXRT5xx/6xx/10xx 中 Master ID 是用 4 bit 来表示的,它们的 AHB RX Buffer 指定在 FlexSPI->AHBRXBUFxCR0[MSTRID] 中。

3.2 i.MXRT11xx

  i.MXRT11xx 中 Master ID 是用 16 bit 来表示的,因此 FlexSPI->AHBRXBUFxCR0[MSTRID] 位其实是无效的(即 Reserved 状态),它们的 AHB RX Buffer 指定应在如下 FlexSPI->HMSTRxCR 寄存器中,不过首先得要使能 Master ID Remap 功能(HMSTRIDREMAP = 1,这个 bit 建议不要设为 0)。

FlexSPI->AHBCR[HMSTRIDREMAP],总 Master ID Remap 开关

  至此,i.MXRT全系列下FlexSPI外设AHB Master ID定义与AHB RX Buffer指定的异同痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

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

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

痞子衡嵌入式:i.MXRT全系列下FlexSPI外设AHB Master ID定义与AHB RX Buffer指定的异同的更多相关文章

  1. 痞子衡嵌入式:解锁i.MXRTxxx上FlexSPI模块自带的地址重映射(Remap)功能

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT三位数系列隐藏的FlexSPI Remap功能. 前段时间痞子衡写了一篇文章 <利用i.MXRT1060,1010上新 ...

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

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

  3. 痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(1) - 执行在不同CM内核下

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是超级下载算法开发笔记(1)之执行在不同CM内核下. 文接上篇 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计&g ...

  4. 痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(2) - 识别当前i.MXRT型号

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是超级下载算法开发笔记(2)之识别当前i.MXRT型号. 文接上篇 <超级下载算法(RT-UFL)开发笔记(1) - 执行在不同CM ...

  5. 痞子衡嵌入式:FlexSPI复位方式不当会导致i.MXRT系列下OTFAD加密启动失败

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是FlexSPI复位方式不当会导致i.MXRT系列下OTFAD加密启动失败问题. 本篇是<系统时钟配置不当会导致i.MXRT1xxx ...

  6. 痞子衡嵌入式:一种i.MXRT下从App中进入ROM串行下载模式的方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT下在App中利用ROM API进ISP/SDP模式的方法. 我们知道i.MXRT系列分为两大阵营:CM33内核的i.MXRT ...

  7. 痞子衡嵌入式:实抓Flash信号波形来看i.MXRT的FlexSPI外设下AHB读访问情形(无缓存)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是实抓Flash信号波形来看i.MXRT的FlexSPI外设下AHB读访问情形. 上一篇文章 <i.MXRT中FlexSPI外设对A ...

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

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

  9. 痞子衡嵌入式:Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致(J-Link/DAPLink)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致. 本篇是 <IAR EWARM复位类型>.<M ...

随机推荐

  1. ecshop文件架构

    /*ECShop 2.5.1 的结构图及各文件相应功能介绍ECShop2.5.1_Beta upload 的目录┣ activity.php 活动列表┣ affiche.php 广告处理文件┣ aff ...

  2. UDP实现在线聊天功能

    发送端 //发送 public class UDPChat01 { public static void main(String[] args) throws Exception { //开启端口 D ...

  3. 紫色飞猪的研发之旅--06go自定义状态码

    在实际开发中,需要前后端需要协商状态码,状态码用于后端返前端时使用.在一个团队中,定义的状态码讲道理应该是一致的,项目开始的起始阶段状态码应该是定义了个七七八八的,随着功能的叠加而不断增加.此系列将围 ...

  4. Linux内核编译配置脚本

    环境 宿主机平台:Ubuntu 16.04.6 目标机:iMX6ULL Linux内核编译配置脚本 在linux开发过程中熟练使用脚本可以大大简化命令行操作,同时对于需要经常重复操作的指令也是一种备忘 ...

  5. Golang入门学习(二):控制分支

    文章目录 @[TOC] 1. 控制分支 1.1 if-else分支 1.2 switch分支 1.4 while 和do...while循环结构 1.5 多种循环结构 1.6 break 1.7 co ...

  6. python模块--datetime

    datatime.date类 构造器 返回值类型 说明 (year, month, day) date   类方法/属性     .max date datetime.date(9999, 12, 3 ...

  7. 海量列式非关系数据库HBase 原理深入

    HBase读数据流程: 前置关键词描述: Block Cache :读缓存,缓存上一次读的数据,整个ReginServer只有一个 MemStore :写缓存,缓存上一次写的数据,每个Store有一个 ...

  8. sqlmap --eval 用法

    今天查资料发现 sqlmap 有一个 --eval 的参数 --eval=EVALCODE Evaluate provided Python code before the request (e.g. ...

  9. 计算字符串的长度.len,RuneCountInString

    内置函数len(),可以返回字符串/数组/切片/map/channel的长度. unicode/utf8包 函数:RuneCountInString(输入一个字符串),返回int类型的字符串长度.由于 ...

  10. Maven项目之间关系介绍

    Maven项目之间的关系 依赖关系 单纯的项目A中需要项目B中的资源,将项目B打成Jar包被A依赖,此时项目A直接调用项目B中资源即可. 项目A和项目B此时形成最基本的依赖关系. 继承关系 需要场景: ...