i.MXRT中FlexSPI外设不常用的读选通采样时钟源

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是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 周期。
因为 dummy 周期的存在,flexspi 外设内部实际上有一个 read strobe 信号(即 dqs)来控制数据的选通性(即什么时候开始数据有效,将数据存入内部 fifo)。更直白点说,read strobe 信号的存在就是由于 flexspi 外设无法支持如下这种情况的读时序(下图中 command 实际应为 command&addr)。
二、flexspi内部read strobe设计
在 i.mxrt 参考手册里有如下 flexspi 前端采样单元框图,其中 ipp_ind_dqs_fa/b_int[x] 即是 read strobe 信号,它控制着 fifo 中实际数据的存储。
ipp_ind_dqs_fa/b_int[x] 信号共有四种来源,最原始的信号源由 flexspi->mcr0[rxclksrc] 选择,中间可能还会经过 dllxcr 单元(这部分以后会另写文章单独介绍)、phase chain 单元做处理,然后送到采样单元里。
下图是 flexspi->mcr0[rxclksrc] = 0 的情况,此时 read strobe 经由 ipp_do_dqs0_fa/b 纯内部 loopback 回来,没有经过任何延迟单元。这种配置一般仅用于经典 spi 传输模式(低速 60mhz sdr 场合),适用低容量 spi nor / eeprom,这时候 flexspi dqs pad 可用作其它功能或者 gpio。
下图是 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 需要悬空。
note: 痞子衡有一篇旧文 《使能串行nor flash的dtr模式》 跟这种配置相关,这时候 dummy cycle 数的设置很关键。
下图是 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 与外部存储器相连。
note: 痞子衡有两篇旧文 《串行nor flash的dqs信号功能》、《启动含dqs的octal flash可不严格设dummy cycle》 跟这种配置相关。
三、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 被解放出来了,这也是它的最主要意义。
别小看只是省了一个 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痞子衡便介绍完毕了,掌声在哪里~~~


乘用车自动驾驶的技术和商业路径
TMS320F28377DZWTQR微控制器简介
系统级芯片六个优化方面详解
美国科学家设计出一种新型锂空气电池 750次充电/放电循环后仍能正常工作
关于PLC几种常见的编程设计方法
i.MXRT中FlexSPI外设不常用的读选通采样时钟源
华为携手奥迪推动智能车联网产业的发展
一位老程序员的职业总结
三星S8单飞,华为P10撑场,今年MWC竟然如此开场
小米6尊享陶瓷版拆机图解
移相全桥ZVZCS DC/DC变换器综述
飞机的刹车与其他类型的刹车有什么不同?
CASAIM北区召开2022年总结暨表彰大会
华为第二款可折叠手机疑似通过3C认证 最高支持65W输出
追觅科技荣获全球速卖通2020-2021年度“十大黑马品牌”
蚂蚁智联宣布获得数千万元Pre-A轮融资
分析自动化领域中十大伺服电机的特点分析
数据区块链与人工智能的合并将成为一种必然的趋势
锂电池PSE认证测试标准
制作电子管功放的技巧及要领