大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是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. ProjectEuler 005题

    题目: 2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any ...

  2. 高德地图&兴趣点(poi)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  3. TensorFlow-Slim 简介+Demo

    github介绍:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/slim 基于slim实现的yolo- ...

  4. Ubuntu下安装Python3(与旧Python2版本共存)

    官网下载Python3的源码 进行配置,在源码目录运行如下命令. ./configure --prefix=/usr/local/python3 --enable-shared 进行编译,在源码目录运 ...

  5. JavaScript之创建对象的模式

    使用Object的构造函数可以创建对象或者使用对象字面量来创建单个对象,但是这些方法有一个明显的缺点:使用相同的一个接口创建很多对象,会产生大量的重复代码. (一)工厂模式 这种模式抽象了创建具体对象 ...

  6. MySQL主主互备不同步的解决方法

    MySQL主主互备不同步 首先在服务器上执行show slave satus;可以看到很多同步的参数: Master_Log_File: SLAVE中的I/O线程当前正在读取的主服务器二进制日志文件的 ...

  7. Linux下Sed替换时无法解析变量

    1.问题描述 用sed替换文件中的IP时,想替换成$es_ip中的值,但是却不能解析这个变量$es_ip sed -ri 's/([0-9]{1,3}\.){3}[0-9]{1,3}/$es_ip/g ...

  8. 20210826 Lighthouse,Miner,Lyk Love painting,Revive

    考场 T1 这不裸的容斥 T2 这不裸的欧拉路,先从奇数度点开始走,走不了就传送 T3 什么玩意,暴力都不会 T4 点分树??? 仔细想了一波,发现 T1 T2 都好做,T3 二分答案后可以暴力贪心, ...

  9. error: object file .git/objects/...

    cd .git find . -type f -empty -delete -print tail -n 2 .git/logs/refs/heads/master git show xxxx(版本号 ...

  10. Identity角色管理一(准备工作)

    因角色管理需要有用户才能进行(需要将用户从角色中添加,删除)故角色管理代码依托用户管理 只需在Startup服务中添加角色管理即可完成 public void ConfigureServices(IS ...