大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是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. 实现Comparable接口

    1 import java.util.TreeSet; 2 3 4 /** 5 * PriorityQueue, TreeSet是排序集合,存储的对象必须实现Comparable接口. 6 * 原因是 ...

  2. mac下用clion进行sdl2游戏开发de环境搭建

    1. 故事背景 想从unity转unreal了,于是要使用c++进行开发.unreal引擎那么大,每次打开,我的小本都嗡嗡嗡的,想着不如用个轻量一些的引擎先开发吧,核心代码独立出来,到时候如果真要移植 ...

  3. html调用swf的语句

    <div style="width: 1000px; height: 202px; margin-left: auto; margin-right: auto"> &l ...

  4. Python3-sqlalchemy-orm 创建关联表带外键并插入数据

    #-*-coding:utf-8-*- #__author__ = "logan.xu" import sqlalchemy from sqlalchemy import crea ...

  5. 使用kubeadm安装kubernetes 1.21

    文章原文 配置要求 至少2台 2核4G 的服务器 本文档中,CPU必须为 x86架构 CentOS 7.8 或 CentOS Stream 8 安装后的软件版本为 Kubernetes v1.21.x ...

  6. 菜鸟入门Linux之路(方法论浅谈)

    Linux是为人熟知的OS之王,已"统治"世界.要想学好绝非易事. 作为菜鸟,可以与Linux亲密接触的方法很多,如视频.书籍.各种企培资料等等,如今的在线教育也如火如荼. 总结说 ...

  7. 洛谷P2424 约数和 题解

    题目 约数和 题解 此题可以说完全就是一道数学题,不难看出这道题所求的是 \(\sum\limits_{i=x}^{y}{\sum\limits_{d|i}{d}}\) 的值. 很显然,用暴力枚举肯定 ...

  8. 一、自动化监控利器-Zabbix

    目录 1. 监控的作用 1.1 为何需要监控系统 1.2 监控系统的实现 1.3 常用的监控软件 2. Zabbix简介 2.1 选择Zabbix的理由 2.2 Zabbix的功能特性 3. Zabb ...

  9. kivy之ProgressBar、ToggleButton实操学习

    之所以将kivy的ProgressBar(进度条)与ToggleButton(切换按钮)作一篇内容来记录学习,是因为这两个内容比较简单,源码内容篇幅也少. 两个功能实例源码均以main.py+prog ...

  10. Python国内镜像源及报错解决方法

    国内镜像源: 阿里云:https://mirrors.aliyun.com/pypi/simple/ 清华:https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科技 ...