你们好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给你们分享的是串行NOR Flash的DQS信号功能。html
串行NOR Flash在嵌入式里的应用至关普遍,既可用做数据存储也能够用做代码(XiP)存储,串行NOR Flash种类不少,最先期有Standard SPI(一线),后来发展到QuadSPI(四线),到如今OctalSPI或者HyperBus SPI(八线),I/O管脚愈来愈多,数据吞吐率也愈来愈高。但到八线Flash的时候,你会发现多了一个特殊的控制信号DQS,DQS是Data Strobe Signal缩写,中文直译叫数据选通讯号,这个DQS信号有什么做用呢?今天痞子衡带你们分析一下:微信
咱们对DQS信号更深的印象应该来源于DDR,DDR是DDR SDRAM的简称,其自己也是Double Data Rate(双倍数据速率)的缩写。从RAM分类来看,DDR是DRAM范畴内的重要组成,DDR已经发展到了第n代了。.net
在DDR中,DQS信号主要做用是用来在一个时钟周期内准确的区分出每一个数据传输周期,从而便于接收方准确接收数据。DQS信号是双向的,在写入DDR时它用来传送由主设备发来的DQS信号,读取DDR时则由DDR生成DQS向主设备发送,因此DQS其实就是数据的同步信号。关于DQS以及DDR原理能够参看网上一篇很好的文章《DDR工做原理》。code
那么Flash上的DQS功能与DDR上DQS是否是同样呢?有相同点也有不一样点,我们继续往下看:htm
咱们来看一款典型的Octal Flash,来自MXIC的MX25UM51345G。这款Flash包含DQS引脚(I/O属性为输出),从芯片数据手册里找到跟DQS信号相关的主要是下面这张输出时序图,DQS信号仅在DTR模式(SCLK双边沿采样)时生效,而且只在Flash输出数据时起做用(主设备写Flash时,DQS不起做用),即DQS信号是Flash发出的用于通知读取Flash的主设备SIO[7:0]数据线开始更新的标志。blog
让咱们结合AC特性表里的Symbol再来进一步分析,SCLK信号边沿用于触发Flash数据更新,可是SIO[7:0]数据线并非在SCLK边沿就马上更新而且稳定的,这里有必定的时延(tCHQV),在tCHQV时间内,Flash核心收到SCLK触发信号,开始准备数据,并陆续放到SIO[7:0]线上。因为tCHQV时间相对较长,主设备仅根据SCLK信号边沿不知道应该何时去拿数据,所以诞生了DQS,DQS信号边沿标志着SIO数据线开始更新,可是SIO[7:0]一共8根数据线,这8根数据线更新不是彻底同步的,这就有一个硬性规定,即tDQSQ时间,各数据线SIO[x]在DQS信号跳变开始后不得超过tDQSQ最大时间必须把数据更新完毕。get
tCHQV - 从SCLK信号跳变到SIO[7:0]输出有效的时间 tQSV - 从SCLK信号跳变到DQS信号跳变的时间 tDQSQ - 从DQS信号跳变到SIO[7:0]输出有效的时间 tQH - SIO[7:0]输出保持时间
再来看一款典型的Hyper Flash,来自Cypress的S26KS512S。这款Flash包含RWDS引脚(I/O属性为输出),RWDS就是DQS信号。与Octal Flash不一样的是,Hyper Flash的时钟信号CK每每是差分的,差分信号由于其补偿纠正特性,使得时钟跳变间隔比较稳定,所以数据传输从CK与CK#交叉点开始进行。Hyper Flash自然是DTR传输模式,RWDS做用与Octal Flash上的DQS是彻底一致的。同步
一样结合AC特性表里的Symbol来进一步分析,CK差分信号跳变用于触发Flash数据更新,在tCKD时间内,Flash核心收到CK触发信号,开始准备数据,并陆续放到DQ[7:0]线上。RWDS信号边沿标志着DQ数据线开始更新,各数据线DQ[x]在RWDS信号跳变开始后不得超过tDSS最大时间必须把数据更新完毕。博客
tCKD - 从CK差分信号跳变到DQ[7:0]输出有效的时间 tCKDS - 从CK差分信号跳变到RWDS信号跳变的时间 tDSS - 从RWDS信号跳变到DQ[7:0]输出有效的时间
至此,串行NOR Flash的DQS信号功能痞子衡便介绍完毕了,掌声在哪里~~~flash
文章会同时发布到个人 博客园主页、CSDN主页、知乎主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就能够在手机上第一时间看了哦。