大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是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 Specification3.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特性的支持的更多相关文章

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

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

  2. 痞子衡嵌入式:关于i.MXRT中FlexSPI外设lookupTable里配置Normal read的一个小误区

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT中FlexSPI外设lookupTable里配置Normal read的一个小误区. 关于串行四线NOR Flash,当其作 ...

  3. 痞子衡嵌入式:理解i.MXRT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值. 关于 FlexSPI 外设的 loo ...

  4. 痞子衡嵌入式:i.MXRT中FlexSPI外设不常用的读选通采样时钟源 - loopbackFromSckPad

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT中FlexSPI外设不常用的读选通采样时钟源 - loopbackFromSckPad. 最近碰到一个客户,他们在 i.MX ...

  5. 痞子衡嵌入式:其实i.MXRT下改造FlexSPI driver同样支持AHB方式去写入NOR Flash

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT下改造FlexSPI driver以AHB方式去写入NOR Flash. 痞子衡前段时间写过一篇 <串行NAND Fl ...

  6. 痞子衡嵌入式:在i.MXRT启动头FDCB里使能串行NOR Flash的DTR模式

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在FDCB里使能串行NOR Flash的DTR模式. 前两篇文章 <IS25WP系列Dummy Cycle设置> 与 < ...

  7. 痞子衡嵌入式:在i.MXRT启动头FDCB里使能串行NOR Flash的Continuous read模式

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在FDCB里使能串行NOR Flash的Continuous read模式. 前面关于串行Flash传输时序的文章 <Fast R ...

  8. 痞子衡嵌入式:在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺. 恩智浦 MCU SE 团队近期一直在加班加点赶 SBL 项目 ...

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

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

随机推荐

  1. 1063 Set Similarity——PAT甲级

    1063 Set Similarity Given two sets of integers, the similarity of the sets is defined to be Nc/Nt*10 ...

  2. vue中v-model的学习

    v-model在表单元素input.radio.checkBox.textarea创建双向数据绑定,他会根据类型选取正确的方法来更新元素,本质不过是语法糖,负责监听用户的输入操作以更新数据并对一些极端 ...

  3. Mybatis-Plus插件配置

    yml配置 1 # Mybatis-Plus 2 mybatis-plus: 3 # 配置mapper的扫描,找到所有的mapper.xml映射文件 4 mapper-locations: com.x ...

  4. Windows开发常用快捷键

    毕业后一直在从事Windows开发工作,掌握些常用的Windows快捷键可以大大的提升工作效率,同时还能秀一波操作.本文记录在工作中常用的Windows快捷键,以及VS常用快捷键.掌握了这些键盘操作, ...

  5. 后端程序员之路 36、Apache Kafka

    Apache Kafkahttp://kafka.apache.org/ Kafka,很容易就联想到<海边的卡夫卡>,文艺程度和Casablanca有得一拼.Kafka是一个分布式消息系统 ...

  6. Cloudam云端携手高校探索云计算在生命科学领域的应用

    随着云计算服务和实践的成熟,越来越多的行业对于云计算的需求也日益增加.不同行业的需求与云计算融合,就需要更大的算力支撑.这也意味着,云计算的需求市场日渐扩大,Cloudam云端自主研发的云E算力平台应 ...

  7. HDOJ-1260(动态规划水题)

    Tickets HDOJ-1260 #include<bits/stdc++.h> using namespace std; const int maxn=2003; int n; int ...

  8. PBR:基于物理的渲染(Physically Based Rendering)+理论相关

    一: 关于能量守恒 出射光线的能量永远不能超过入射光线的能量(发光面除外).如图示我们可以看到,随着粗糙度的上升镜面反射区域的会增加,但是镜面反射的亮度却会下降.如果不管反射轮廓的大小而让每个像素的镜 ...

  9. Python flask-restful框架讲解

    Restful 是 Flask 的扩展,增加了对快速构建 REST api 的支持.它是一个轻量级的概念,与您现有的 ORM/librarie 一起工作.Restful 鼓励最小化设置的最佳实践.如果 ...

  10. SQL字符串传参

    technicianCode in('${techList.collect { it.technicianCode }.join("','")}')