HyperBus Nor Flash小记

Interface

这里写图片描述

Mandatory I/O Summary
Symbol Type Description
CS# 主设备输出,从设备输入 Chip Select:
当改信号从High变为Low时,HyperBus开始传输。
当该信号从低变为高时, HyperBus结束传输。
CK,CK# 主设备输出,从设备输入 Differential Clock:
command,address和data输出与CK和CK#相关。Differential Clock只用于1.8V I/O设备
Single Ended Clock:
在3.0V 的HyperBus的设备上,只有CK使用, CK#不使用
DQ[7:0] 输入输出 Data Input/Ouput:
command,address和data均在改信号线上进行输入输出
RWDS 输入输出 Read Write Data Strobe:
在Command/Address传输时段,RWDS用于指示是否需要额外的initial latency。 在Slave Output时段,该信号用于采样DQ[7:0]的数据。
(High = addtional latency, Low = no additional latency)
Optional I/O Summary
Symbol Type Description
RESET# 主设备输出,从设备输入,内部上拉 Hardware RESET:
当该信号为Low时,从设备会初始化并回到Standby状态。与此同时,RWDS和DQ[7:0]处于高阻状态。从设备的的RESET#引脚有一个内部上拉电阻,默认为High。
RSTO# 主设备输入,从设备输出, Open Drain Reset Output:
RSTO#是从设备输出,当它为Low时,表示从设备复位,改信号可以用来作为系统的复位信号。从设备一旦完成POR,RSTO#可以保持LOW一段时间,改时间可以由用户来配置。
INT# 主设备输入,从设备输出, Open Drain Interrupt Output:
当INT#为Low时, 意味着hyperflash发生了一个中断。

Protocal

当HyperBus处于Idle状态(CK=Low & CK#=High)时,CS#从High变成Low,hyperbus的传输开始进行。最前面的三个时钟周期传输3个word的Command/Address(CA0, CA1, CA2),这三个word的CA用来决定这个传输一些特性。
PS:这里面的word是2个byte,就是16bit。一个时钟周期是指两个clock,至于为什么这样定,我也不知道,Hyperbus的specification就是这么定的
所以3个word的CA信息一共是48个bit。

CA Bit# Bit Name Bit Function
47 R/W# 表示该次传输是读还是写
1=读,0=写
46 Address Space(AS) 表示该次读写的space是memory还是register。
0=memory 空间, 1=register空间。
register空间用来读取Device ID和一些配置的register。
45 Burst Type 表示传输的burst是liner还是warpped。
0=warpped burst,1=linear burst。
我也不知道该位怎么用,一般设置为1。
44-16 Row & Upper Column Address Row的大小是跟设备相关的。
以Cypress的S26KS512S hyperflash为例。128Mbit的flash使用CA[35:16]作为Row & Upper Column Address。改Address用来寻找Memory Array中的一个Half-Page
15-3 Reserved 保留位
2-0 Lower Column Address 和upper column address一起用来选择一个Half-Page的位置的偏移量


这里写图片描述

这里写图片描述

当传输完CA信息后,bus上需要传输一些dummy clock初始化RWDS信号。RWDS就是CK加了一些延迟的信号,用作高速读操作时的DQS。

当数据传输开始,读数据是在RWDS的边沿进行采样,写数据是在Single-ended clock(即3.0V的CK)的边沿采样,或者在Differential clock(即1.8V CK和CK#)模式下,在CK和CK#交叉点进行数据采样。

一旦完成数据传输,host就可以把CS#拉高并且把clock置为IDLE状态。当clock已经是IDLE状态了,拉嘎CS#就能结束一次传输。

读时序

下面贴出一个实际的读数据的时序, 读数据的地址是0x400。CA[48:0] = 0xA000004000。其中CA[47] = 1代表读,CA[46] = 0, CA[45] =1代表linear burst,ROW & Upper Column Address = 0x0000040 = 0x400 / 0x10, Lower Column Address=0x0 = 0x400 % 0x10。在插入了一些dummy的时钟周期后,进行了数据的采集。
这里写图片描述

这里写图片描述
其中, 插入在CA和数据之间的dummy clock的个数是随设备不同而不同的,同时也跟Hyperbus的采样频率有关,这个需要参考不同的Hyberbus设备的手册才能知道。

写时序

写时序分为Write Transactions with Initial Latency和Write Transactions without Initial Latency。由于我并没有涉及太多的写设备的工作,所以这里就不多讲了。有Initial Latency的时序跟读时序差不多,只不过需要注意的是采样的时钟并不是RWDS即DQS,而是CK和CK#。而没有Initial Latency的就更简单了,直接数据就跟在CA后面,下面贴出官方Specification的是时序图。这里写图片描述

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/u011280717/article/details/78461900
今日推荐