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

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是 i.MXRT中FlexSPI外设不常用的读选通采样时钟源 – loopbackFromSckPad

最近碰到一个客户,他们在 i.MXRT500 上使能了 FlexSPI->MCR0[RXCLKSRC] = 2(即 loopbackFromSckPad),这个选项字面上的意思是设置读选通采样时钟源为 SCK 引脚,这个选项在恩智浦官方的代码包里未曾使能过。客户在使用过程中遇到高频时 SCK 引脚被降压的问题(从正常的 1.8V 降至 1.2V),那么这个 loopbackFromSckPad 选项到底是什么作用以及有什么使用限制呢?且听痞子衡道来:

  • Note1: 参考手册里显示支持 loopbackFromSckPad 选项的型号有 i.MXRT1040/1050/1060/1064/1180/500
  • Note2: 参考手册里没有提及支持 loopbackFromSckPad 选项的型号有 i.MXRT1010/1015/1020/1024/1160/1170/600

一、为什么存在Read Strobe?

对于串行 SPI 接口存储器,FlexSPI 外设主要支持如下两种读数据时序:一是所谓的经典 SPI 模式,IO0 (MOSI) 专用于发送命令和地址,IO1 (MISO) 专用于接收数据(图中上面的时序)。二是 Multi-I/O SPI 模式,SIO[n:0] 一起用于发送命令地址以及接收数据(图中下面的时序)。

显然经典 SPI 模式下 IO[1:0] 是单向的,而 Multi-I/O SPI 模式下,SIO[n:0] 是双向的。当 SIO 用于双向传输时,过程中必然存在引脚方向切换,而 FlexSPI 外设在处理 SIO 方向切换时无法做到零等待周期读取数据,这就是为什么 Multi-I/O SPI 读时序中总是会存在 Dummy 周期。

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

因为 Dummy 周期的存在,FlexSPI 外设内部实际上有一个 Read Strobe 信号(即 DQS)来控制数据的选通性(即什么时候开始数据有效,将数据存入内部 FIFO)。更直白点说,Read Strobe 信号的存在就是由于 FlexSPI 外设无法支持如下这种情况的读时序(下图中 COMMAND 实际应为 COMMAND&ADDR)。

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

二、FlexSPI内部Read Strobe设计

在 i.MXRT 参考手册里有如下 FlexSPI 前端采样单元框图,其中 ipp_ind_dqs_fa/b_int[x] 即是 Read Strobe 信号,它控制着 FIFO 中实际数据的存储。

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

ipp_ind_dqs_fa/b_int[x] 信号共有四种来源,最原始的信号源由 FlexSPI->MCR0[RXCLKSRC] 选择,中间可能还会经过 DLLxCR 单元(这部分以后会另写文章单独介绍)、Phase Chain 单元做处理,然后送到采样单元里。

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

下图是 FlexSPI->MCR0[RXCLKSRC] = 0 的情况,此时 Read Strobe 经由 ipp_do_dqs0_fa/b 纯内部 loopback 回来,没有经过任何延迟单元。这种配置一般仅用于经典 SPI 传输模式(低速 60MHz SDR 场合),适用低容量 SPI NOR / EEPROM,这时候 FlexSPI DQS Pad 可用作其它功能或者 GPIO。

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

下图是 FlexSPI->MCR0[RXCLKSRC] = 1 的情况,此时 Read Strobe 经由悬空的 DQS 引脚 ipp_do_dqs1_fa/b 再 loopback 回来,此时有了 DQS 引脚绕一圈的延迟。这种配置可用于 Multi-I/O SPI 传输模式(较高速 133MHz SDR 场合),适用不含 DQS 引脚的大容量 QuadSPI NOR Flash,但是 FlexSPI DQS Pad 需要悬空。

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

下图是 FlexSPI->MCR0[RXCLKSRC] = 3 的情况,此时 Read Strobe 完全由外部存储器的 DQS 引脚输出 ipp_ind_dqs3_fa/b 直通进来。这种配置可用于 Multi-I/O SPI 传输模式(最高速 166MHz/200MHz DDR 场合),适用于包含 DQS 引脚的 OctalSPI NOR Flash,这时 FlexSPI DQS Pad 与外部存储器相连。

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

三、loopbackFromSckPad选项意义

前面铺垫了那么多,终于来到本文的主题了,即下图 FlexSPI->MCR0[RXCLKSRC] = 2 的情况,此时 Read Strobe 经由 SCK 引脚 ipp_ind_sck_fa/b 再 loopback 回来,此时有了 SCK 引脚绕一圈的延迟。

这种配置从应用角度与 FlexSPI->MCR0[RXCLKSRC] = 1(即 loopbackFromDqsPad) 差不多,也可用于 Multi-I/O SPI 传输模式(较高速 133MHz SDR 场合),适用不含 DQS 引脚的大容量 QuadSPI NOR Flash,但是这时候 FlexSPI DQS Pad 被解放出来了,这也是它的最主要意义。

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

别小看只是省了一个 DQS 引脚,也许你认为 i.MXRT I/O 那么多,省一个引脚意义不大,但是如果某些 FlexSPI 引脚组不带 DQS 信号,你又想配置 FlexSPI 以 60MHz 以上频率去访问 Flash,这时候 FlexSPI->MCR0[RXCLKSRC] = 2 选项就会帮上大忙了,见痞子衡旧文 《不支持DQS的FlexSPI引脚组连接串行NOR Flash注意事项》

四、loopbackFromSckPad使用限制

FlexSPI->MCR0[RXCLKSRC] = 2 选项虽好,但有如下两个实际使用限制:

  • 存在信号完整性问题:主要出现在 SCK 频率过高或者板级 PCB 上 SCK 信号走线过长时。
  • SCK自由运行模式下不可用:对于某些 FPGA 应用,有时需要设置 FlexSPI->MCR0[SCKFREERUNEN] = 1,即 SCK 需要持续给外部设备内部 PLL 提供参考时钟。

至此,i.MXRT中FlexSPI外设不常用的读选通采样时钟源 – loopbackFromSckPad痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

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

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

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

Original: https://www.cnblogs.com/henjay724/p/16817234.html
Author: 痞子衡
Title: 痞子衡嵌入式:i.MXRT中FlexSPI外设不常用的读选通采样时钟源 – loopbackFromSckPad

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/800284/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Karmada跨集群优雅故障迁移特性解析

    摘要:在 Karmada 最新版本 v1.3中,跨集群故障迁移特性支持优雅故障迁移,确保迁移过程足够平滑。 在多云多集群应用场景中,为了提高业务的高可用性,用户的工作负载可能会被部…

    Python 2023年10月14日
    039
  • Laravel项目中使用GroupBy时报错

    今天用Laravel做一个新的项目,GroupBy一个字段内容为中文时候,一直报错。 $list = ApCategories::where(‘site_code’, ‘MY’) …

    Python 2023年6月12日
    073
  • 控制Python浮点数输出位数

    在Python的一些长效任务中,不可避免的需要向文本文件、二进制文件或者数据库中写入一些数据,或者是在屏幕上输出一些文本,此时如何控制输出数据的长度是需要我们注意的一个问题。比如对…

    Python 2023年11月3日
    027
  • flask+vue实现简单的Web应用

    简介 flask是python在web开发上的一个比较轻量的开发框架,vue是前端视图库,是一个MVVM框架。flask+vue可以实现快速的现代web应用开发,这里我们以简单的读…

    Python 2023年8月9日
    058
  • python:矩阵的基本运算

    一、Python 矩阵基本运算 引入 numpy 库 import numpy as np python矩阵操作 1)使用 mat 函数创建一个 2X3矩阵 a = np.mat(…

    Python 2023年8月30日
    051
  • python第三方库pygame的使用

    作用:pygame一般用来做游戏 注意:1.在使用pygame提供的功能之前,需要调用init方法 2.在游戏结束前需要调用 quit 方法 pygame中的各个函数: 1.pyg…

    Python 2023年9月17日
    039
  • pygame 之最小开发框架&壁球游戏

    看了几个小时课本,企图看懂。但是几个小时之后我放弃了这样的尝试。 之前提到的课本里讲述pygame是从类入手的。这对于一个类学了半吊子的家伙,显然并不友好。于是,我果断放弃了课本,…

    Python 2023年9月21日
    047
  • Python实现大学绩点计算——利用pandas对excel处理

    Python中有许多读写与修改excel表格的方式,例如xlrd、openpy、pandas等等。而得益于pandas独有的dataframe数据类型,能够对读写进的excel表格…

    Python 2023年8月8日
    043
  • 【人工智能基础】鸢尾花分类 – 机器学习领域的Hello World

    1 项目简介 【参考】鸢尾花分类 【背景】假设有一名植物学爱好者对她发现的鸢尾花的品种很感兴趣。她收集了每朵鸢尾花的一些测量数据:花瓣的长度和宽度以及花萼的长度和宽度,所有测量结果…

    Python 2023年10月25日
    031
  • Python如何读取Excel表内容

    用python读取excel表中的数据 假如说有如下一张存储了数据的excel表,其中x1-x6是特征,y_label是特征对应的类别标签。我们想要使用python对以下数据进行数…

    Python 2023年8月1日
    043
  • gdb使用简介

    Pwn 是一种基于 的调试器,主要用于漏洞利用和逆向工程。下面是一些 Pwn 的基本步骤: 1. 安装Pwn 可以 pip来安装Pwn ,命令如下: pip install pwn…

    Python 2023年11月6日
    036
  • 进程大杂烩

    1、fork函数的使用 使用fork()函数创建一个进程pid_t fork(void)fork函数调用成功,返回两次返回为0, 代表当前进程是子进程返回为正数,代表当前进程为父进…

    Python 2023年11月8日
    040
  • 五花八门的Pandas取数操作

    公众号:尤而小屋作者:Peter编辑:Peter Pandas系列_DataFrame数据筛选(上) 本文介绍的是如何在pandas进行数据的筛选和查看。因为pandas中有各种花…

    Python 2023年8月7日
    049
  • NV12等常用YUV数据格式

    NV12等常用YUV数据格式 1. YUV 采样表示法 2. YUV 格式 3. 数据格式 * 3.1 4:4:4 格式 3.2 4:2:2 格式 3.3 4:2:0 格式 4. …

    Python 2023年10月8日
    047
  • 腾讯云短信服务(详细教程-Django框架、API接口)实现

    今天和大家分享如何实现短信服务,以腾讯云服务为例 目录 一、准备工作 二、短信服务接口开发 2.1 服务配置 2.2接口开发 三、测试短信服务 四、结束语 一、准备工作 腾讯云短信…

    Python 2023年8月6日
    0113
  • 【pandas】dataframe高级用法三

    上一篇: DataFrame数据筛选(二) DataFrame数据处理(一) 文章目录 一、筛选数据 – 1. 布尔值筛选法 2.删除满足条件的行 3. datafra…

    Python 2023年8月7日
    055
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球