RISC-V E300 SOC架构介绍——6.QSPI 协议之控制寄存器描述

本章描述SiFive串行外设接口QSPI(本章的SPI指QSPI)控制器的原理

有关SPI/QSPI的工作原理及相关的通信协议见如下文章,网络上也有大量相关的文献及文章,这里不在赘述。

QSPI的原理结构图如下:
在这里插入图片描述

具体模块的设计参考下面这篇博客:传送门

一、SPI概述

  1. SPI支持单通道、双通道、和四通道的仅主机操作协议

  2. 基本控制器提供基于FIFO接口的来支持可编程的IO接口

  3. 软件通过FIFO将排队的帧来启动传输,传输完成后,从机在接收FIFO的响应

  4. 专用SPI0控制器植入SPI flash读序列,该序列器将外部SPI闪存内容设定为只读/只执行内存映射器件

  5. 如果输入时钟频率低于100MHz,并且外部的SPI flash器件支持通用Winbond/Numonyx串行读取(0x03)命令,6. SPI0控制器复位为允许存储器映射读取的状态。

  6. 序列访问会自动组合为长读命令,提高性能

  7. fctl寄存器在内存映射和可编程IO模式下控制切换;

     	1)可编程IO模式下:内存映射不能被外部SPI flash器件读,并且会立即返回0
     	2)硬件互锁,确保在转换切换和控制寄存器更新有效之前,完成当前传输完成
    

二、内存映射

  1. SPI控制寄存器地址映射如下表所示:

  2. SPI存储器被设计为要求自动对齐的32位存储器访问

    SPI内存地址的寄存器偏移量,带有*目前仅存在于直接映射flash接口(SPI0)控制器内。

    在这里插入图片描述

三、 串行时钟分频寄存器(sckdiv)

在这里插入图片描述

  1. sckdiv寄存器确定分频器用作产生串行时钟SCK,输入时钟和SCK之间的关系为:

  2. 计算公式:
    在这里插入图片描述

  3. 输入时钟为BUS上的时钟,复位值div为0x003

四、串行时钟模式寄存器(sckmode)

在这里插入图片描述

  1. sckmode寄存器定义串行时钟的极性相位,下面的两个表分别描述了pol和pha
  2. sckmode复位值为0
    在这里插入图片描述

五、片选ID寄存器(csid)

  1. 片选csid寄存器对CSpin端编码,用来通过硬件片选进行切换。
  2. 复位值为0
    在这里插入图片描述

六、片选默认寄存器(csdef)

  1. csdef寄存器指定cs pin无效状态(极性)
  2. 复位值为0xffff
    在这里插入图片描述

七、片选模式寄存器(csmode)

  1. csmode寄存器定义硬件片选行为,如下表所示:
    在这里插入图片描述

  2. 复位值为0

  3. 在HOLD模式下,仅当下面情况发生一种,CS pin才会被置位无效

     	1)csmode和csid被写入不同的值
     	2)写入csdef的值改变了pin 的状态
     	3)启用了Direct-mapped的flash模式
    

八、延迟控制寄存器(delay0和delay1)

  1. Delay0和delay1寄存器允许插入一个以SCK为单位的任意长度的延迟
    在这里插入图片描述

    1. cssck指定CS和SCK第一个上升沿之间的延迟

      当sckmode.pha = 0,额外的半周期延迟需要执行,复位值为0x01
      
    2. sckcs指定最后一个下降沿与CS无效之间的延迟

        当sckmode.pha =1,额外的半周期延迟需要执行,复位值为0x01
      
    3. intercs指定在声明与未声明之间的最小CS无效时间,复位值为0x01

    4. interxfr指定两个连续没有声明的帧之间的延迟

       仅在sckmode为HOLD和OFF时可用,复位值为0x00
      

九、 帧格式寄存器(fmt)

  1. fmt寄存器通过可编程的IO接口(FIFO)启动传输的帧格式
    在这里插入图片描述

    1. Proto:SPI协议,没有用到的DQ pin为三态
ValueDescriptionData Pins
0SingleDQ0(MOSI),DQ1(MISO)
1DualDQ0,DQ1
2QuadDQ0,DQ1,DQ2,DQ3
  1. Endian: SPI字节顺序
ValueDescription
0首先传输MSB
1首先传输LSB
  1. Dir: SPI I/O方向
ValueDescription
0RX:对于dual、quad协议,DQ pin是三态的
对于signal 协议,DQ0 pin作为正常引脚驱动发送数据
1TX:接收FIFO未填充
  1. Len:指定每帧的bit数,范围在0-8之间

  2. 寄存器的复位值为0x80000

    	1)Proto = single
    	2)Dir = Rx
    	3)Endian = MSB
    	4)Len= 8
    

十、数据传输寄存器(txdata)

在这里插入图片描述

  1. 写入txdata寄存器会将数据字段中包含的值加载至发送FIFO中

  2. 对于fmt.len<8:

     	1)当fmt.endian = MSB时,值应当左对齐
     	2)当fmt.endian = LSB时,值应当右对齐
    
  3. full标志表明传输FIFO已经准备好接收新的输入,设置后,将忽略对txdata的写入。读取时,数据字段返回ox00

十一、 数据接收寄存器(rxdata)

  1. 读取rxdata寄存器会从接收的FIFO读取帧数据。

  2. 对于fmt.len<8:

     	1)当fmt.endian = MSB时,值应当左对齐
     	2)当fmt.endian = LSB时,值应当右对齐
    
  3. empty标志表明接收FIFO有了新值,可以被读,设置后,data字段不包含有效的帧数据,对忽略对rxdata的写入

十二、发送中断阈值寄存器(txmark)

在这里插入图片描述

  1. Txmark寄存器指定TX FIFO水印中断出发的阈值
  2. 复位值为0

十三、接收中断阈值寄存器(rxmark)

在这里插入图片描述

  1. rxmark寄存器指定RX FIFO水印中断出发的阈值
  2. 复位值为0

十四、 中断寄存器(ie和ip)

在这里插入图片描述

  1. ie寄存器控制哪一个SPI中断有效,ip为只读寄存器,表示预中断的条件,ie复位值为0
  2. 当发送FIFO的数目严格小于txmark寄存器指定的计数时,txwm被拉高
    当足够多的条目超多watermark时,将被清零
  3. 当接收FIFO的数目严格大于rxmark寄存器指定的计数时,rxwm被拉高
    当足够多的条目超过watermark时,将被清零

十五、 SPI Flash 接口控制寄存器(fctrl)

  1. 当fctrl寄存器的en设置为1时,控制器进入SPI flash模式
  2. DMA访问使控制器在硬件中自动对SPI flash读取进行排序
  3. 复位值为0x1

十六、SPI Flash 指令格式寄存器(ffmt)

在这里插入图片描述

  1. ffmt寄存器定义了在SPI flash模式下,DMA访问时,读指令的格式
  2. 一条指令包括一个命令字节,和可变数量的地址字节,空周期(padding)和数据字节
  3. 各寄存器描述
    在这里插入图片描述
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页