6.1 SPI/QPI操作

数据手册翻译(2)6.2 写保护7 状态和配置寄存器
6 功能描述 6.1 SPI/QPI操作
图3 串行Flash存储器操作流程
6.1.1 标准SPI指令
通过符合SPI协议的总线进行访问,该总线包含四个信号:串行时钟(CLK),片选(/CS),串行数据输入(DI)和串行数据输出(DO) 。标准SPI指令使用DI引脚来向器件写入指令、地址和数据,这些写入行为在CLK的上升沿被采样 。DO引脚则用来从器件中读取数据或者状态,这些行为在CLK的下降沿采样 。
器件支持SPI总线模式0(0,0)和模式3(1,1) 。模式0和模式3的主要区别包括在非传输(也即主机在待机模式,未和器件进行数据传输)时CLK信号的状态 。对于模式0,CLK信号在/CS信号上升或者下降沿时,为低电平 。对于模式3,CLK信号则为高电平 。
6.1.2 双线SPI指令
可以通过“双输出快速读”(0x3B)或者“双IO快速读”(0xBB)指令来支持双线SPI操作 。这些指令使得主机和器件之间的数据传输速率为普通串行Flash器件的2到3倍 。双线SPI读指令是快速下载代码到RAM应用、非速度敏感的代码XIP执行的理想选择 。当使用双线SPI指令时,DI和DO引脚为双向IO引脚:IO0和IO1 。
6.1.3 四线SPI指令
支持四线SPI操作,可通过“四输出快速读”(0x6B)、“四IO快速读”(0xEB),“四IO字读取”(0xE7)以及“四IO八字读取”(0xE3)等指令来实现 。这些指令实现了相较于普通串行Flash而言4~6倍的传输速率 。这种情况适用于高速的随机访问,或者是从器件中拷贝代码到RAM中去,再或者是直接从器件取代码执行 。该模式下,DI和DO引脚成为IO0和IO1引脚,另外/WP和/HOLD引脚则成为IO2和IO3引脚 。注意四线SPI模式需要设置状态寄存器中的QE位为1 。
6.1.4 QPI指令
支持QPI操作,但需要将器件的工作模式从标准SPI/双线SPI/四线SPI模式切换为QPI模式,该切换通过指令“进入QPI”(0x38)来实现 。标准SPI协议需要消耗8个串行时钟周期将1字节长的指令码通过DI引脚传输到器件中 。QPI模式利用4个IO引脚来输入指令码,因此该传输过程仅需要2个时钟周期 。这可以显著地降低SPI指令开销,提高系统性能,尤其是在XIP环境中 。标准/双线/四线SPI模式和QPI模式是互斥的 。任何时刻仅可使用一种模式 。指令“进入QPI”(0x38)和“离开QPI”(0xFF)用来切换这两种模式 。在上电后,或者在通过指令“Reset (0x99)”复位器件后,器件的缺省模式为标准/双线/四线SPI模式 。要使能QPI模式,在状态寄存器2中的非易失性位QE要置位 。当使用QPI指令时,DI和DO引脚成为IO0和IO1引脚,另外/WP和/HOLD引脚则成为IO2和IO3引脚 。参考插图3 。
6.1.5 保持功能
对于标准SPI和双SPI操作,/HOLD信号允许在被选中(/CS为低电平)的情况下暂停操作 。/HOLD功能在SPI总线的数据和时钟线被多个器件共享时很有用 。例如,假设页缓存仅部分被写入,但此时出现高优先级中断需要使用SPI总线 。在这种情况下/HOLD功能可以保存正在执行的指令的状态和缓存的数据,从而使得一旦可再次使用SPI总线时,恢复之前的操作 。/HOLD引脚仅在标准SPI或者双线SPI模式下可以使用,四线SPI和QPI模式下不可用 。状态寄存器中的QE位决定/HOLD是否可用 。如果QE=0(出厂缺省状态),/HOLD引脚做/HOLD用,否则其为IO引脚,/HOLD功能不再可用 。
要使用/HOLD功能,必须通过设置/CS引脚为低电平来选中器件 。如果CLK信号为低电平,此时/HOLD信号的下降沿后保持功能会生效 。如果在/HOLD信号的下降沿,CLK信号不是低电平,则该功能会在下一次CLK下降沿后生效 。同样地,如果CLK信号为低电平,此时/HOLD信号的上升沿使得保持功能结束 。如果/HOLD的上升沿CLK不是低电平,则保持功能会在下一次CLK的下降沿后撤销 。在整个保持过程中,DO为高阻态,DI和CLK引脚的输入被忽略 。/CS信号在整个保持过程中必须为低电平,避免复位器件的内部逻辑 。