痞子衡嵌入式:i.MXRT中FlexSPI外设对AHB Burst Read特性的支持
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是FlexSPI外设对AHB Burst Read特性的支持。
痞子衡之前写过一篇关于FlexSPI LUT的文章 《从头开始认识i.MXRT启动头FDCB里的lookupTable》,这个LUT机制是i.MXRT上能够实现对串行NOR Flash进行AHB读访问的原因(也是程序能够XiP原地执行的基础)。那篇文章的最后留了一个小伏笔,即FlexSPI的Prefetch不使能,SEQ_CTL工作一次获取的数据由AHB Burst Read策略决定,那么这个Burst Read策略到底是什么?今天痞子衡来跟大家好好聊一聊:
一、什么是Burst Read?
说起Burst Read概念,其实也没啥玄机,中文直译就叫突发读取(其实有个更接地气的翻译:连续读取),这个概念要跟Single Read(或者Random Read)对比来看。
对于一个NOR Flash器件而言,主设备(这里指i.MXRT)如果要读取它的内容,必须按照手册规定的读时序,这个读时序中肯定有我们要提供地址信息,这样Flash器件才能知道该把哪个地方的数据送出来。在一次读时序中(一个CS拉低期间,发送一次地址信息),Single Read就是读取固定大小的数据(比如4bytes),而Burst Read可以灵活调整读取数据的长度(一般来说用于一次读取更长的数据)。
二、AMBA AHB支持哪些Burst Type?
前面讲了,Burst Read可以灵活调整读取数据的长度,即当前读时序内,地址信息发送完后,主设备想读多少byte数据相应输出所需的SCK时钟数即可(地址根据上次访问按序自增),那么主设备是不是可以任意输出SCK时钟呢?一般情况下是的,这种就是典型的线性递增类型(简称INCR)。
除了INCR类型外,还有另一种环绕类型(简称WRAP),这种类型下,主设备输出SCK时钟并不总是得到线性地址递增的数据,而是在一个指定长度数据块里不断循环,这种类型应用场景更多在RAM型器件(比如用于栈)。
下表是ARM官方 AMBA Specification 第 3.6 Burst operation 小节里关于Burst Type全部定义与解释。我们主要关注INCR类:INCR4/8/16一次访问长度是4/8/16 * data block (具体data block大小由HSIZE[2:0]决定),INCR即不定长度。
在 AMBA Specification 里找到关于HSIZE[2:0]定义如下,这个HSIZE是由AHB master根据访问自动设置的。
下图是典型的INCR型不定长Burst访问时序图,图中共有两次INCR型Burst:第一次INCR Burst共读取4bytes,Burst开始于HADDR = 0x20处,共发起了HSIZE = Halfword的两次传输;第二次INCR Burst共读取12bytes,Burst开始于HADDR = 0x5c处,共发起了HSIZE = Word的三次传输。
Note: HTRANS共有四种传输类型:IDLE、BUSY、NONSEQ、SEQ,前两种顾名思义,NONSEQ代表一次Burst的首次传输,SEQ代表一次Burst的后续传输。
三、FlexSPI对AHB Burst Read的支持
现在我们回到FlexSPI的LUT机制,在它的指令集关于读写序列的解释里,特别提到了当访问类型是AHB的时候,一次访问的数据长度取决于Burst Size和Burst Type。
Burst type一共有如下8种(其实对应了AMBA AHB Burst Type),Burst size也有8/16/32/64bits四种(即data block,未完全实现HSIZE[2:0]里定义的所有值),FlexSPI模块会自动响应AHB master访问请求来调度Burst type和Burst size去完成对应Flash的访问。
下表具体解释了FlexSPI模块对于AHB读访问的响应,表中 hbeat_start_address 就是上一小节里Burst访问时序里的HADDR[31:0]值,即AHB master当前节拍下(beat)要读的地址;hburst_start_address 是当前Burst类型下访问总长度区域的首地址,hburst_end_address 就是当前Burst类型下访问总长度区域的末地址加1。表中特别强调了当Prefetch被关掉后,INCR型Burst下每个节拍访问均会被当做SINGLE Burst来处理。
现在我们终于理解,FlexSPI的SEQ_CTL工作一次获取的数据其实是受AHB master控制的。当Prefetch不使能的时候,FlexSPI就是个身不由己的数据传送器,AHB master怎么要求,FlexSPI就怎么做。只有开了Prefetch功能,FlexSPI才会有灵魂,它会利用自己1KB大小的AHB RX Buffer干一些取巧的事。
至此,FlexSPI外设对AHB Burst Read特性的支持痞子衡便介绍完毕了,掌声在哪里~~~
欢迎订阅
文章会同时发布到我的 博客园主页、CSDN主页、知乎主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:i.MXRT中FlexSPI外设对AHB Burst Read特性的支持的更多相关文章
- 痞子衡嵌入式:实抓Flash信号波形来看i.MXRT的FlexSPI外设下AHB读访问情形(无缓存)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是实抓Flash信号波形来看i.MXRT的FlexSPI外设下AHB读访问情形. 上一篇文章 <i.MXRT中FlexSPI外设对A ...
- 痞子衡嵌入式:关于i.MXRT中FlexSPI外设lookupTable里配置Normal read的一个小误区
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT中FlexSPI外设lookupTable里配置Normal read的一个小误区. 关于串行四线NOR Flash,当其作 ...
- 痞子衡嵌入式:理解i.MXRT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值. 关于 FlexSPI 外设的 loo ...
- 痞子衡嵌入式:i.MXRT中FlexSPI外设不常用的读选通采样时钟源 - loopbackFromSckPad
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT中FlexSPI外设不常用的读选通采样时钟源 - loopbackFromSckPad. 最近碰到一个客户,他们在 i.MX ...
- 痞子衡嵌入式:其实i.MXRT下改造FlexSPI driver同样支持AHB方式去写入NOR Flash
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT下改造FlexSPI driver以AHB方式去写入NOR Flash. 痞子衡前段时间写过一篇 <串行NAND Fl ...
- 痞子衡嵌入式:在i.MXRT启动头FDCB里使能串行NOR Flash的DTR模式
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在FDCB里使能串行NOR Flash的DTR模式. 前两篇文章 <IS25WP系列Dummy Cycle设置> 与 < ...
- 痞子衡嵌入式:在i.MXRT启动头FDCB里使能串行NOR Flash的Continuous read模式
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在FDCB里使能串行NOR Flash的Continuous read模式. 前面关于串行Flash传输时序的文章 <Fast R ...
- 痞子衡嵌入式:在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺. 恩智浦 MCU SE 团队近期一直在加班加点赶 SBL 项目 ...
- 痞子衡嵌入式:i.MXRT全系列下FlexSPI外设AHB Master ID定义与AHB RX Buffer指定的异同
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT全系列下FlexSPI外设AHB Master ID定义与AHB RX Buffer指定的异同. 因为 i.MXRT 全系列 ...
随机推荐
- hadoop环境搭建:高可用
目录 1.硬件配置 2.软件版本 3.准备工作 3.1.配置网络环境 3.2.安装JDK 3.3.安装ZOOKEEPER 4.安装Hadoop 5.启动 6.问题 7.配置文件 1.硬件配置 采用3台 ...
- KSM概念学习
KSM: Kernel SamePage Merging 内核同页合并 简介 KSM允许内核在两个或多个进程(包括虚拟客户机)之间共享完全相同的内存页. KSM让内核扫描检查正在运行中的程序,并比较他 ...
- ImageApparate(幻影)镜像加速服务让镜像分发效率提升 5-10 倍
作者介绍 李昂,腾讯高级开发工程师,主要关注容器存储和镜像存储相关领域,目前主要负责腾讯容器镜像服务和镜像存储加速系统的研发和设计工作. 李志宇,腾讯云后台开发工程师.负责腾讯云 TKE 集群节点和运 ...
- Springboot项目架构设计
导航 前言 流水线 架构的艺术 项目架构 理解阿里应用分层架构 superblog项目架构 结语 参考 本节是<Spring Boot 实战纪实>的第7篇,感谢您的阅读,预计阅读时长3mi ...
- LeetCode674. 最长连续递增序列
原题链接 1 class Solution: 2 def findLengthOfLCIS(self, nums: List[int]) -> int: 3 ans = begin = 0 4 ...
- POJ-2387(原始dijkstra求最短路)
Til the Cows Come Home POJ-2387 这题是最简单的最短路求解题,主要就是使用dijkstra算法,时间复杂度是\(O(n^2)\). 需要注意的是,一定要看清楚题目的输入要 ...
- 那些你不知道的DOU+投放技巧,以及常见的审核失败原因丨国仁网络
作为小额付费投放工具,DOU+一直深受各大中小商家的青睐.虽然它的审核比较严格,但转化效果还是非常明显的. 近日,抖音发布重要公告:内容低质的视频将无法购买DOU+推广,并可能因违反平台规则导致无法观 ...
- 有必要了解的大数据知识(一) Hadoop
前言 之前工作中,有接触到大数据的需求,虽然当时我们体系有专门的大数据部门,但是由于当时我们中台重构,整个体系的开发量巨大,共用一个大数据部门,人手已经忙不过来,没法办,为了赶时间,我自己负责的系统的 ...
- od快捷键
视图.查看相关: Alt+l 记录 Alt+e 可执行模块 Alt+m 内存 Alt+c cpu(反汇编视图) Ctrl+p 补丁 Alt+k 调用堆栈 Alt+b 断点 Alt+f5 设置窗口总在 ...
- Detach blobs with a contact point
https://answers.opencv.org/question/87583/detach-blobs-with-a-contact-point/ 一.问题描述 带有接触点的斑点时遇到问题,需要 ...