SPI
Nuclei SPI(串行外设接口)是一种专为单通道、双通道或四通道nor-flash芯片设计的通信接口。它可在以下三种模式中任意一种下运行:
普通(寄存器)模式:通过配置相应寄存器实现SPI的发送与接收。
DMA模式:SPI DMA接口采用流式预处理协议,便于构建包含命令与数据流的SPI传输。
XIP模式:外部flash被映射到设备地址空间,系统将其视作内部存储器。
主要特性
SPI控制器支持通过单通道、双通道、四通道以及半双工单通道协议进行主从操作。
可编程时钟极性和相位(CPOL/CPHA)。
可配置的最高有效位优先或最低有效位优先。
主/从模式可配置频率(最高FPCLK/2)。
SPI总线忙状态标志。
基准控制器提供了一个基于FIFO的接口,用于执行程序化I/O操作。软件通过将帧入队到发送FIFO中来启动传输;当传输完成后,从设备的响应将被放入接收FIFO中。
支持SPI摩托罗拉和TI格式。
硬件CRC特性。
带数据选通的高速读取操作。
支持双flash模式。
SPI自由运行时钟模式。
专用SPI控制器实现了一个SPI flash读写序列器。该SPI控制器被复位至允许内存映射读取(XIP)的状态。
RX 和 TX 的缓冲区或 FIFO 大小可在 硬件具体 级别进行配置。
支持SDR和DDR模式。
适用于DDR模式的可配置SCK采样点。
功能描述
SPI架构
spi架构图
接口协议模式
半双工模式
通过将SPI_CR寄存器中的HSDMODE字段设置为1来启用半双工模式。
在此模式下,仅允许以串行方式发送/接收单个比特。通过SO管脚(其I/O与IO0共用)发送数据,通过SI管脚(其I/O同样与IO0共用)接收数据。 在每个配置为单模式的阶段中,:
IO0(SO/SI)为输入输出模式
IO1 处于输出模式,并被强制设为 1
IO2 处于输出模式,并被强制置为 0(以禁用写保护功能)。
IO3 处于输出模式,并被强制置为 1(以禁用保持功能)。
单线模式
传统SPI模式仅允许以串行方式发送/接收单个比特。 在这种模式下,数据通过SO信号发送至 flash 存储器(该信号的I/O与IO0共用)。 从 flash 接收到的数据通过SI(其IO0/ IO1/ IO2/ IO3均处于高电平状态,且I/O与IO1共享)传入。 各相可分别配置为使用此单比特模式,方法是将FFMT/FFMT1中的CMD_PROTO、ADDR_PROTO、MODE_PROTO和DATA_PROTO字段设置为00。 在每个配置为单模的相位中: - IO0(SO)处于输出模式 - IO1(SI)处于输入模式(高阻态) - IO2 处于输出模式,并被强制置为 0(以禁用写保护功能)。 - IO3 处于输出模式,并被强制置为 1(以禁用保持功能)。
双线模式
在双SPI模式下,通过IO0/IO1信号同时发送/接收两个比特。 各相可分别配置为使用双SPI模式,方法是将FFMT/FFMT1中的CMD_PROTO、ADDR_PROTO、MODE_PROTO和DATA_PROTO字段设置为01。 在每个配置为双模的相中: - 在读操作的数据阶段,IO0/IO1处于高阻态(输入模式);而在其他所有情况下,则为输出模式。 - IO2 处于输出模式,并被强制设为 0 - IO3 处于输出模式,并被强制置为 1。
四线模式
在四线SPI模式下,通过IO0/IO1/IO2/IO3信号同时发送/接收四个比特。 各相可分别配置为使用四线SPI模式,方法是将FFMT/FFMT1中的CMD_PROTO、ADDR_PROTO、MODE_PROTO和DATA_PROTO字段设置为10。 在每个以四路模式配置的相位中,数据阶段进行读操作时,IO0/ IO1/ IO2/ IO3 均处于高阻态(输入);而在其他所有情况下,则作为输出。
八线模式(如果有)
在八线SPI模式下,八个比特通过IO0/ IO1/ IO2/ IO3/ IO4/ IO5/ IO6/ IO7信号同时进行发送或接收。 各相可分别配置为使用四通道SPI模式,方法是将FFMT/FFMT1中的CMD_PROTO、ADDR_PROTO、MODE_PROTO和DATA_PROTO字段设置为11。
SDR模式
正常寄存器模式可通过SPI_CR寄存器配置为SDR模式。默认情况下,DDR_EN位(SPI_CR[2])为0,NUQSPI模块以单倍数据速率(SDR)模式运行。 XIP模式可通过配置FFMT1.DDR_EN寄存器来设置SDR模式。不同相位可分别进行配置,通过将FFMT1中的DDR_EN[3:0]字段分别设为命令、地址、模式或数据,以启用SDR模式。 在SDR模式下,当NUQSPI驱动IO0/SO、IO1、IO2和IO3信号时,这些信号仅在CLK的下降沿发生跳变。 在SDR模式下,当NUQSPI驱动IO0/SO、IO1、IO2和IO3信号时,这些信号仅在CLK的下降沿发生跳变。 在SDR模式下接收数据时,NUQSPI假定Flash存储器也通过CLK下降沿发送数据,并使用CLK的下一个(上升)沿对这些信号进行采样。
DDR模式
正常寄存器模式可通过SPI_CR寄存器配置为SDR模式。默认情况下,DDR_EN位(SPI_CR[2])为1,NUQSPI器件以单数据速率(DDR)模式运行。 XIP模式可通过配置FFMT1.DDR_EN寄存器来设置DDR模式。各相可分别通过将FFMT1中的DDR_EN[3:0]字段设为命令、地址、模式或数据,以启用DDR模式。 在DDR模式下,当NUQSPI驱动地址/交替字节/数据阶段的IO0/SO、IO1、IO2、IO3信号时,CLK的每个下降沿和上升沿各发送一位数据。
spi DDR模式读flash时序图
主从模式
SPI模块支持主模式和从模式。在主模式下,SCK信号被设置为输出;而在从模式下,SCK信号则被配置为输入。在主模式中,SPI可支持4至32位的数据长度;而在从模式下,SPI仅支持8位、16位和32位的数据长度。此外,从模式下仅支持单数据速率(SDR)模式。
TI模式
通过在SPI_CR寄存器中对ti_mode位域进行特定设置,可将SPI配置为符合TI协议。在此模式下,SCK和SS信号的极性、相位及传输方向,以及数据位的排列顺序均已固定,因此无需再设置CPOL、CPHA和LSBFRST等参数。此时,SS信号以最低有效位(LSB)数据位为基准,通过脉冲方式同步整个协议流程,如图所示:
spi TI模式时序图
CRC
为了确保传输和接收数据的可靠性,系统中实现了两个独立的33位或两个独立的17位CRC计算器。当最大数据长度为32位时,SPI接口支持5至33位长度的任意CRC多项式;而在外设实例中,由于最大数据长度被限制为16位,此时支持的CRC多项式长度范围则为5至17位。多项式的长度由存储在CRCPOLY寄存器中的值的最高有效位决定,且该值必须大于DSIZE字段所定义的数据帧长度。当应用最大数据长度时,还需额外设置CRC33_17位,以明确多项式字符串的最高有效位,同时确保其长度始终超过数据长度。随后,SPI_CFG1中的CRCSIZE字段用于指定从CRC计算寄存器中传输并作为CRC帧进行比较的最高有效位数量。这一数值与数据帧长度相互独立,但必须等于数据帧长度,或为其整数倍。
通信格式
极性相位说明
在SPI通信过程中,接收与发送操作是同时进行的。串行时钟(SCK)同步控制着数据线上信息的移位和采样过程。通信格式取决于时钟相位、时钟极性和数据帧结构。为了实现设备间的协同通信,主设备和从设备必须采用相同的通信格式,并确保正确同步。 软件可通过SPI_SCKMODE寄存器中的CPOL和CPHA位,选择四种可能的时序关系。其中,CPOL(时钟极性)位用于控制在无数据传输期间时钟的空闲状态值。该位对主模式和从模式均有效。若CPOL被复位,则SCK引脚的空闲状态为低电平;若CPOL被置位,则SCK引脚的空闲状态为高电平。 如果CPHA位被置位,SCK引脚上的第二个边沿将捕获首次传输的数据位(若CPOL位复位,则为下降沿;若CPOL位置位,则为上升沿)。每次发生这种类型的时钟跳变时,数据都会被锁存。如果CPHA位被复位,SCK引脚上的第一个边沿将捕获首次传输的数据位(若CPOL位置位,则为下降沿;若CPOL位复位,则为上升沿)。同样,每次出现这种时钟跳变类型时,数据也会被锁存。CPOL(时钟极性)和CPHA(时钟相位)两位的组合决定了数据捕获所用的时钟边沿。
spi极性相位图
nor-flash通信命令序列
NUQSPI通过命令与nor-flash进行通信。每个命令可包含5个阶段:指令(instruction)、地址(address)、模式(mode)、空闲周期(dummy)和数据(data)。这些阶段中的任一阶段均可配置为跳过,但至少需包含指令、地址、备用字节或数据阶段中的一个。nCS信号在每个命令开始前拉低,并在每个命令执行完毕后重新置高。
spi四线读nor-flash时序图
spi四线写nor-flash时序图
指令阶段(Instruction Phase)
在此阶段,8位指令被配置到FFMT[23:16]寄存器的“读取指令”字段,并配置到FFMT1[7:0]寄存器的“写入指令”字段,随后发送至Flash存储器,以指定所要执行的操作类型。尽管大多数Flash存储器每次只能通过IO0/SO信号接收一位指令(单SPI模式),但指令阶段也可选择每次同时发送2位数据(在双SPI模式下通过IO0/IO1实现)或4位数据(在四SPI模式下通过IO0/IO1/IO2/IO3实现)。这一配置可通过FFMT[9:8]寄存器中的“CMD_PROTO”字段进行设置。当FFMT.CMD_EN = 0时,指令阶段将被跳过,命令序列直接从地址阶段开始。
地址阶段(Address Phase)
在地址阶段,会向flash存储器发送1至4字节数据,以指示操作的地址。待发送的地址字节数由FFMT[3:1]寄存器中的addr_len字段配置。地址阶段每次可传输1位(在单SPI模式下通过SO引脚)、2位(在双SPI模式下通过IO0/IO1引脚)或4位(在四SPI模式下通过IO0/IO1/IO2/IO3引脚)。这一配置可通过FFMT[11:10]寄存器中的ADDR_PROTO字段进行设置。当ADDR_LEN = 00时,地址阶段将被跳过,命令序列直接进入下一阶段(如有)。
模式阶段(Mode Phase)
在交替字节阶段,1至4个字节会被发送到Flash存储器,通常用于控制操作模式。待发送的交替字节数量由FFMT1[31:28]寄存器中FFMT1.mode_cnt字段配置。而具体要发送的字节,则通过FFMT1.mode_code寄存器指定。在交替字节阶段,每次可发送1位(通过单SPI模式下的SO线)、2位(通过双SPI模式下的IO0/IO1线),或4位(通过四重SPI模式下的IO0/IO1/IO2/IO3线)。这一配置可通过FFMT1[19:18]寄存器中的FFMT1.MODE_PROTO字段来实现。 当FFMT1.MODE_CNT = 0时,跳过交替字节阶段,命令序列直接进入下一阶段。
Dummy-cycle阶段
在空闲周期阶段,会提供1至31个时钟周期,期间不进行任何数据的发送或接收,以便为flash存储器预留时间,使其能够从容应对后续更高频率时钟下的数据传输阶段。该阶段所持续的时钟周期数由FFMT[7:4]寄存器中FFMT.PAD_CNT字段指定。当PAD_CNT为零时,空闲周期阶段将被跳过,命令序列将直接进入数据阶段(如存在)。
数据阶段(Data Phase)
数据阶段可一次发送/接收1位(在单SPI模式下通过SO/SI)、2位(在双SPI模式下通过IO0/IO1),或4位(在四SPI模式下通过IO0/IO1/IO2/IO3)。这一配置可通过FFMT[13:12]寄存器的FFMT.DATA_PROTO字段进行设置。
SPI配置流程
主设备和从设备的配置步骤几乎相同。有关具体模式的设置,请参阅相应章节。当需要初始化标准通信时,请按以下步骤操作:
普通模式配置
正确编写GPIO寄存器:配置GPIO以用于MOSI、MISO和SCK引脚。
请向SPI_SCKDIV、SPI_FMT、SPI_FCTRL、SPI_CR和SPI_SCKMODE寄存器写入适当值,设置其中所有未保留的位及位域,但需注意以下例外情况:首先,确定所使用的SPI模式。若为普通模式下的主模式,则将SPI_CR.MSTR置1,同时SPI_FCTRL.FLASH_EN置0。接着,配置SPI的时钟分频系数:SPI_SCkDIV.DIV = 1;配置相位极性:SPI_SCKMODE.PHA=0,SPI_SCKMODE.POL=0。此外,还需设定SPI协议类型:FMT.PROTO = 0(单线协议);数据大小及格式:FMT.ENDINA = 0(大端模式);数据收发方向:FMT.DIR = 1(仅发送方向);最后,配置SPI数据长度:FMT.LEN = 8(1字节)。
写入SPI_TXDATA寄存器会将待发送的数据填充到txfifo中。
最后,判断SPI是否已发送完毕。如果只有一条数据,只需判断STATUS.BUSY = 0即可。若需等待txfifo中的所有数据全部发送完成,则可判断STATUS.SPI_DONE = 0。
XIP模式配置
正确编写GPIO寄存器:配置GPIO以用于MOSI、MISO和SCK引脚。
请写入SPI_SCKDIV、SPI_FFMT、SPI_FFMT1、SPI_FCTRL、SPI_CR和SPI_SCKMODE寄存器,以设置其中所有未保留位及位字段的正确值,但需注意以下例外情况:首先,将SPI控制器切换至XIP模式,随后设置SPI_CR.MSTR=1,并使能 flash 访问功能,即SPI_FCTRL.FLASH_EN=1。接着,配置SPI时钟分频系数:SPI_SCkDIV.DIV = 1;同时设定时钟相位极性,使PHA=0且POL=0。然后,完成SPI伪命令、地址、空闲周期等信息的配置。对于读取数据的配置,需先启用FFMT.CMD_EN,再分别设置地址长度FFMT.ADD_LEN、读取空闲阶段的长度FFMT.PAD_CNT,以及各阶段所采用的数据协议(分别对应命令FFMT.CMD_PROTO、地址FFMT.ADDR_PROTO和数据FFMT.DATA_PROTO)。最后,配置读取命令FFMT.CMD_CODE与读取空闲数据FFMT.PAD_CODE。
配置 flash 写入命令 FFMT1.WCMD_CODE。如果写入操作需要填充数据,则应配置 FFMT1.WAPD_CNT。
最后,您可以通过ICB总线访问 flash 。
寄存器说明 —————>
寄存器偏移及简单描述列表
偏移 |
寄存器名称 |
功能描述 |
|---|---|---|
0x0 |
SPI_SCKDIV |
串行时钟分频器寄存器 |
0x4 |
SPI_SCKMODE |
采样极性/相位配置寄存器 |
0x8 |
SPI_DDR_SCKSAMPLE |
DDR模式下SPI采样点调整寄存器 |
0xC |
SPI_FORCE |
SPI pad输出使能控制寄存器 |
0x10 |
SPI_CSID |
片选ID寄存器 |
0x14 |
SPI_CSDEF |
片选默认设置寄存器 |
0x18 |
SPI_CSMODE |
片选模式寄存器 |
0x1C |
SPI_VERSION |
硬件版本指示寄存器 |
0x20 |
SPI_ADDR_WRAP |
SPI flash偏移地址寄存器 |
0x24 |
SPI_BOUNDARY_CFG |
SPI flash边界地址配置寄存器 |
0x28 |
SPI_DELAY0 |
总线延迟控制寄存器0 |
0x2C |
SPI_DELAY1 |
总线延迟控制寄存器1 |
0x30 |
SPI_FIFO_NUM |
指示发送/接收有效fifo数量寄存器 |
0x34 |
SPI_TSIZE |
SPI DMA发送数据数量配置寄存器 |
0x38 |
SPI_RSIZE |
SPI DMA接收数据数量配置寄存器 |
0x40 |
SPI_FMT |
帧格式配置寄存器(普通模式,非XIP) |
0x48 |
SPI_TXDATA |
发送数据寄存器 |
0x4C |
SPI_RXDATA |
接收数据寄存器 |
0x50 |
SPI_TX_MARK |
发送水限配置寄存器(普通模式,非XIP) |
0x54 |
SPI_RX_MARK |
接收水限配置寄存器(普通模式,非XIP) |
0x60 |
SPI_FCTRL |
SPI XIP模式接口控制寄存器(XIP模式,非普通模式) |
0x64 |
SPI_FFMT |
SPI XIP指令格式寄存器0(XIP模式,非普通模式) |
0x70 |
SPI_IE |
SPI中断使能寄存器(普通模式,非XIP) |
0x74 |
SPI_IP |
SPI中断pending寄存器(普通模式,非XIP) |
0x78 |
SPI_FFMT1 |
SPI XIP指令格式寄存器1(XIP模式,非普通模式) |
0x7C |
SPI_STATUS |
SPI状态寄存器(普通模式,非XIP) |
0x80 |
SPI_SDR_SCKSAMPLE |
SDR模式下SPI采样点调整寄存器 |
0x84 |
SPI_CR |
SPI控制寄存器 |
0xC0 |
SPI_CRC_POLY |
SPI CRC多项式配置寄存器 |
0xC4 |
SPI_CRC_TX |
SPI发送CRC值寄存器 |
0xC8 |
SPI_CRC_RX |
SPI接收CRC值寄存器 |
0xCC |
SPI_CRC |
SPI CRC初始值寄存器 |
寄存器详细说明
SPI_SCKDIV
地址偏移:
0x00
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_sckdiv |
11:0 |
RW |
0x4 |
|
预留 |
31:12 |
/ |
0x0 |
/ |
SPI_SCKMODE
地址偏移:
0x04
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_cpha |
0 |
R/W |
0x0 |
|
spi_cpol |
1 |
R/W |
0x0 |
|
保留 |
31:2 |
/ |
0x0 |
/ |
SPI_DDR_SCKSAMPLE
地址偏移:
0x08
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_ddr_scksample |
11:0 |
R/W |
0x0 |
串行时钟DDR模式的采样点样本,用于调整采样点寄存器。
|
保留 |
31:12 |
/ |
0x0 |
/ |
SPI_FORCE
地址偏移:
0x0C
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_force_en |
0 |
R/W |
0x1 |
SPI输出控制(当不使用其他pad时)
|
spi_force_wp |
1 |
R/W |
0x0 |
SPI写保护控制
|
保留 |
31:2 |
/ |
0x0 |
/ |
SPI_CSID
地址偏移:
0x10
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_csid |
2:0 |
R/W |
0x1 |
|
保留 |
31:3 |
/ |
0x0 |
/ |
SPI_CSDEF
地址偏移:
0x14
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_csdef |
3:0 |
R/W |
0xf |
|
保留 |
31:4 |
/ |
0x0 |
/ |
SPI_CSMODE
地址偏移:
0x18
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_csmode |
1:0 |
R/W |
0x0 |
|
保留 |
31:2 |
/ |
0x0 |
/ |
SPI_VERSION
地址偏移:
0x1C
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_version |
31:0 |
RO |
0x00020201 |
指示版本号2.2.1
|
SPI_ADDR_WRAP
地址偏移:
0x20
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_offset_addr |
31:0 |
R/W |
0x0 |
SPI flash 偏移地址
|
SPI_BOUNDARY_CFG
地址偏移:
0x24
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_boundary_cfg |
31:0 |
RW |
0x3ff |
|
SPI_DELAY0
地址偏移:
0x28
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_cssck |
7:0 |
RW |
0x1 |
|
保留 |
15:8 |
/ |
0x0 |
/ |
spi_sckcs |
23:16 |
RW |
0x1 |
|
保留 |
31:24 |
/ |
0x0 |
/ |
SPI_DELAY1
地址偏移:
0x2C
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_intercs |
7:0 |
RW |
0x3 |
|
保留 |
15:8 |
/ |
0x0 |
/ |
spi_interxfr |
23:16 |
RW |
0x0 |
|
保留 |
31:24 |
/ |
0x0 |
/ |
SPI_FIFO_NUM
地址偏移:
0x30
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_tx_num |
2:0 |
RO |
0x0 |
|
保留 |
15:3 |
/ |
0x0 |
/ |
spi_rx_num |
18:16 |
RO |
0x0 |
|
保留 |
31:19 |
/ |
0x0 |
/ |
SPI_TSIZE
地址偏移:
0x34
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_tsize |
31:0 |
RW |
0xffffffff |
TX SPI DMA数据大小配置寄存器
|
SPI_RSIZE
地址偏移:
0x38
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_rsize |
31:0 |
RW |
0xffffffff |
RX SPI DMA大小配置寄存器
|
SPI_FMT
地址偏移:
0x40
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_proto |
1:0 |
RW |
0x0 |
|
spi_endian |
2 |
RW |
0x0 |
|
spi_dir |
3 |
RW |
0x0 |
|
spi_proto_hi |
4 |
RW |
0x0 |
用于扩展SPI_FMT.spi_proto寄存器到高位 |
spi_endian_byte |
5 |
RW |
0x0 |
|
保留 |
15:6 |
/ |
0x0 |
/ |
spi_len |
21:16 |
RW |
0x8 |
|
保留 |
31:22 |
/ |
0x0 |
/ |
SPI_TXDATA
地址偏移:
0x48
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_txdata |
31:0 |
WO |
0x0 |
发送数据 |
SPI_RXDATA
地址偏移:
0x4C
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_rxdata |
31:0 |
RO |
0x0 |
接收数据 |
SPI_TX_MARK
地址偏移:
0x50
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_tx_mark |
2:0 |
RW |
0x0 |
Tx FIFO水线标记(主/从模式)(用于普通模式,非XIP模式)
|
保留 |
31:3 |
/ |
0x0 |
/ |
SPI_RX_MARK
地址偏移:
0x54
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_rx_mark |
2:0 |
RW |
0x0 |
Rx FIFO水线标记(主/从模式)(用于普通模式,非XIP模式)
|
保留 |
31:3 |
/ |
0x0 |
/ |
SPI_FCTRL
地址偏移:
0x60
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_flash_en |
0 |
RW |
0x1 |
|
spi_flash_wmask_en |
1 |
RW |
0x0 |
|
spi_flash_wen |
2 |
RW |
0x0 |
|
spi_flash_burst_en |
3 |
RW |
0x0 |
|
spi_flash_wrap_en |
4 |
RW |
0x0 |
|
spi_boundary_en |
5 |
RW |
0x0 |
|
保留 |
31:6 |
/ |
0x0 |
/ |
SPI_FFMT
地址偏移:
0x64
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_cmd_en |
0 |
RW |
0x1 |
|
spi_addr_len |
3:1 |
RW |
0x3 |
地址字节数(0到4)(XIP模式) |
spi_pad_cnt |
7:4 |
RW |
0x0 |
Dummy Cycle数(XIP模式) |
spi_cmd_proto |
9:8 |
RW |
0x0 |
|
spi_addr_proto |
11:10 |
RW |
0x0 |
|
spi_data_proto |
13:12 |
RW |
0x0 |
|
spi_endian |
14 |
RW |
0x0 |
|
spi_data_proto_hi |
15 |
RW |
0x0 |
用于扩展SPI_FFMT.spi_data_proto寄存器到高位 |
spi_cmd_code |
23:16 |
RW |
0x3 |
命令字节值(XIP模式) |
spi_pad_code |
31:24 |
RW |
0x0 |
Dummy Cycle期间传输的前8位(XIP模式) |
SPI_IE
地址偏移:
0x70
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_tx_irq_en |
0 |
RW |
0x0 |
|
spi_rx_irq_en |
1 |
RW |
0x0 |
|
spi_tx_udr_en |
2 |
RW |
0x0 |
|
spi_rx_ovr_en |
3 |
RW |
0x0 |
|
spi_rx_udr_en |
4 |
RW |
0x0 |
|
spi_t0_ovr_en |
5 |
RW |
0x0 |
|
保留 |
6 |
/ |
0x0 |
/ |
spi_done_en |
7 |
RW |
0x0 |
|
保留 |
10:8 |
/ |
0x0 |
/ |
spi_tx_done_en |
11 |
RW |
0x0 |
|
spi_rx_done_en |
12 |
RW |
0x0 |
|
spi_tifer_en |
13 |
RW |
0x0 |
|
spi_cfg_err_en |
14 |
RW |
0x0 |
|
保留 |
31:15 |
/ |
0x0 |
/ |
SPI_IP
地址偏移:
0x74
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_tx_irq |
0 |
RO |
0x0 |
发送水线中断挂起(正常模式非XIP) |
spi_rx_irq |
1 |
RO |
0x0 |
接收水线中断挂起(正常模式非XIP) |
保留 |
31:2 |
/ |
0x0 |
/ |
SPI_FFMT1
地址偏移:
0x78
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_wcmd_code |
7:0 |
RW |
0x2 |
命令值(XIP模式) |
spi_wpad_cnt |
12:8 |
RW |
0x0 |
Dummy Cycle数(XIP模式) |
spi_pad_cnt_h |
13 |
RW |
0x0 |
Dummy Cycle高位(XIP模式) |
spi_ddr_en |
17:14 |
RW |
0x0 |
|
spi_mode_proto |
19:18 |
RW |
0x0 |
|
spi_mode_code |
27:20 |
RW |
0x0 |
模式字节值(XIP模式) |
spi_mode_cnt |
31:28 |
RW |
0x0 |
XIP模式位数(XIP模式) |
SPI_STATUS
地址偏移:
0x7C
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_busy |
0 |
RO |
0x0 |
SPI传输忙状态(主/从模式)(正常模式非XIP) |
保留 |
1 |
/ |
0x0 |
/ |
spi_ovr |
2 |
RW |
0x0 |
|
spi_udr |
3 |
RW |
0x0 |
|
spi_tx_full |
4 |
RO |
0x0 |
TX FIFO满标志位(正常模式非XIP) |
spi_rx_empty |
5 |
RO |
0x1 |
RX FIFO空标志位(正常模式非XIP) |
保留 |
8:6 |
/ |
0x0 |
/ |
spi_rx_udr_err |
9 |
RW |
0x0 |
|
spi_tx_ovr_err |
10 |
RW |
0x0 |
|
spi_tx_empty |
11 |
RO |
0x1 |
TX FIFO空标志位(正常模式非XIP) |
spi_rx_full |
12 |
RO |
0x0 |
RX FIFO满标志位(正常模式非XIP) |
spi_done |
13 |
RW |
0x0 |
SPI发送完成且TX FIFO为空(正常模式非XIP)
|
保留 |
16:14 |
/ |
0x0 |
/ |
spi_tx_done |
17 |
RW |
0x0 |
SPI发送完成(正常模式非XIP)
|
spi_rx_done |
18 |
RW |
0x0 |
SPI接收完成(正常模式非XIP)
|
spi_tifer |
19 |
RW |
0x0 |
SPI TI从模式帧错误(正常模式非XIP)
|
spi_cfg_err |
20 |
RW |
0x0 |
SPI配置帧错误(正常模式或XIP模式)
|
保留 |
31:21 |
/ |
0x0 |
/ |
SPI_SDR_SCKSAMPLE
地址偏移:
0x80
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_sdr_scksample |
11:0 |
RW |
0x0 |
串行时钟SDR模式的采样点样本,用于调整采样点寄存器。
|
保留 |
31:12 |
/ |
0x0 |
/ |
SPI_CR
地址偏移:
0x84
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_mster |
0 |
RW |
0x1 |
|
spi_dma_en |
1 |
RW |
0x0 |
|
spi_ddr_en |
2 |
RW |
0x0 |
|
spi_csi |
3 |
RW |
0x0 |
|
spi_csoe |
4 |
RW |
0x1 |
|
spi_ssm |
5 |
RW |
0x0 |
|
保留 |
7:6 |
/ |
0x0 |
/ |
spi_st_dma_tx_en |
8 |
RW |
0x0 |
|
spi_st_dma_rx_en |
9 |
RW |
0x0 |
|
spi_st_dma_rcontinous_mode |
10 |
RW |
0x0 |
|
spi_st_dma_tcontinous_mode |
11 |
RW |
0x0 |
|
spi_ti_mode |
12 |
RW |
0x0 |
|
spi_receive_fifo_enable |
13 |
RW |
0x1 |
|
spi_crc_enable |
14 |
RW |
0x1 |
|
spi_crc_len |
20:15 |
RW |
0x0 |
CRC长度配置,支持4位-32位 |
spi_fdm_clk_mode |
21 |
RW |
0x0 |
|
spi_double_flash_mode |
22 |
RW |
0x0 |
|
spi_dqs_mode |
23 |
RW |
0x0 |
DQS模式配置 |
spi_st_ti_mode |
24 |
RW |
0x0 |
ST-TI模式配置 |
spi_dqs_dm_en |
25 |
RW |
0x0 |
DQS数据掩码使能 |
spi_rx_fifo_clr_r |
26 |
RW |
0x0 |
RX FIFO清除寄存器 |
spi_tx_fifo_clr_r |
27 |
RW |
0x0 |
TX FIFO清除寄存器 |
保留 |
31:28 |
/ |
0x0 |
/ |
SPI_CRC_POLY
地址偏移:
0xC0
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_crc_poly |
31:0 |
RW |
0x0 |
SPI CRC多项式配置寄存器 |
SPI_CRC_TX
地址偏移:
0xC4
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_crc_tx_value |
31:0 |
RO |
0x0 |
SPI发送CRC值寄存器 |
SPI_CRC_RX
地址偏移:
0xC8
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_crc_rx_value |
31:0 |
RO |
0x0 |
SPI CRC接收值寄存器 |
SPI_CRC
地址偏移:
0xCC
字段 |
位域 |
读写属性 |
复位值 |
描述 |
|---|---|---|---|---|
spi_crc_init |
31:0 |
RW |
0x0 |
SPI CRC初始值配置寄存器 |