DWC SSI简介
DWC SSI
1、简介
DWC_ssi可配置为:
- AHB slave
- AHB slave 和 AXI master
- AHB slave 和 AHB master
- APB slave 和 AHB master
1.2 特性 - 支持 serail master / serial slave / programmable serial master or slave
- 支持标准:
- Motorola SPI
- Standard/Dual/Quad/Octal SPI
- JEDEC xSPI(JESD251)version 1.0
- XccelaBus by Micron
- Hyperbus by Cypress Semiconductors
- Texas instruments Synchronous Serial Protocol(SSP)
- National Semiconductors Microwire
- 支持 Dynamic WaitState
- 支持 Execute In Place(XIP)SPI读、写
- 支持 增强(Dual/Quad/Octal)SPI
- 支持 DMA
- 支持FIFO深度8~256,固定宽度32位。AID mini深度为256
- 支持中断
- 支持boot模式
- 支持XIP
- 支持Bridge功能
AID mini的SPI IP三种用途:
- AHB SSI:作为普通的SPI传输数据
- Boot SSI:启动时读取外部flash中的启动程序
- AHB MST SSI:接收相关指令和数据后转换成对应的AHB总线读写,此设备可以访问整个芯片的地址空间
2、架构
2.3 传输模式 TMOD
通过配置CTRLR0配置传输模式TMOD - 2'b00 收发,数据从TX FIFO通过txd线发送到设备,同时从目标设备移位寄存器到rxd线返回数据到接收端FIFO
- 2'b01 发,发送端FIFO发数据,rxd回数据但移位寄存器不会加载数据到RX FIFO。应当屏蔽RX相关的中断。
- 2'b10 收,当配置为slave,TX FIFO不会出数据,数据接收从移位寄存器到RX FIFO。应当屏蔽TX相关的中断。
- 2'b11 EEPROM读,发送操作码或地址到eeprom,在发送期间,rxd线数据会被忽略;ssi会持续发数据直到发送端FIFO空,之后rxd上的数据会被存到接收端FIFO上。
2.4 接口
2.4.1 摩托罗拉(SPI)
极性/相位 4种模式(mode0~mode3),数据宽度4-32bit
2.4.2 TI同步串口协议 SSP
全双工
(未实现)
2.4.3 国家半导体 Microwire
半双工
(未实现)
2.5 数据传输 - DWC_ssi使能(SSI_EN=1)
- 从设备使能(SER)
- 发送端FIFO数据多于TXFTLR->TXFTHR
发送期间SR->BUSY置位,必须等到清空再进行下次发送
注意:数据写到发送端FIFO不置位BUSY,只有从设备被片选并且数据在发送的时候才置位BUSY。在轮询BUSY前要先轮询TFE
2.8 master和slave操作(可编程模式)
master和slave可以在ic配置。还有一种可编程模式,通过配置CTRLR0->SSIC_IS_MST配置master和slave。
2.9 时钟
ssi工作在过采样下。在master模式下sclk_out是ssi_clk的倍数。slave模式下,ssi使用同步过的外设时钟接收或发送数据。
当ssi配置为master,ssi_out最大是ssi_clk的一半:Fsclk_out = Fssi_clk / SCKDV,(0<=SCKDK<=65534, 0: disable)
sclk_out只在传输时翻转。
2.10 接收和发送端FIFO buffer
FIFO buffers是由D型触发器组成,可以配成8-256深度(AID 固定256)。收发端FIFO固定宽度32bit。串行传输时数据帧可配置为4到32bit,数据帧小于32bit必须右对齐写入到发送端FIFO,移位控制逻辑自动将接收到的数据在接收端FIFO右对齐。
FIFO每个位置存储单个数据帧,一个位置不能存储多个数据帧
注意:当ssi disable或者reset后收发端FIFO都被清空
AHB SSI、Boot SSI数据帧长度32bit
AHB MST SSI数据帧长度8bit
2.10.1 接收/发送端FIFO描述
- 发送端FIFO通过AHB写命令加载到ssi 数据寄存器(DR),数据被移位控制逻辑从TX FIFO放到发送端移位寄存器。TX FIFO当数据小于等于一个阈值,会产生一个FIFO空中断。TXFTLR决定这个阈值,可以用来通知处理器发送端FIFO快空。。
- 在已满的TX FIFO写数据会产生FIFO溢出中断。
- AHB读命令将TX FIFO数据读到DR寄存器,RX FIFO通过移位寄存器加载数据。RX FIFO在数据达到一个阈值之后会产生一个FIFO满中断,阈值为RXFTLR+1。可以用来通知处理器数据要满。当移位逻辑尝试加载数据到已满的FIFO时会产生FIFO满中断,但是这个新数据会被丢掉。
- 当尝试读一个空的RX FIFO时,会产生一个下溢(underflow)中断
2.10.3 FIFO buffer深度
8/16/32/64/128/256(AID 固定256)
2.10.4 相关FIFO寄存器 - RXFTLR
- TXFTLR
- TXFLR
- RXFLR
2.11 RXD采样延迟
ssi master的rxd采样延迟可调,为了保证在采样时rxd数据稳定,增加rxd采样延迟。软件可编程延时值(RX_SAMPLE_DLY)
2.12 DMA控制接口
通过AHB总线和DMA传输数据,ssi使用一收一发两个DMA通道。DMACR->TDMAE使能发送握手,DMACR->RDMAE使能接收握手。
2.12.1.1 操作概述
ssi dma控制器可配置数据的block size通过DMA->CTLx->BLOCK_TS
每次burst大小,DMA.CTLx.SRC_MSIZE = 4
SSI.DMARDLR + 1 = DMA.CTLx.SRC_MSIZE = 4
2.13 内部DMA特性
2.14 SSI中断
IC设计 支持常规独立中断,或仅组合中断,均支持mask - 发送FIFO空中断:发送端FIFO小于等于一个阈值产生中断,写FIFO直到大于阈值时硬件清中断
- 发送FIFO溢出中断:APB尝试写一个满的发送FIFO时产生中断,读TXEICR清中断
- 发送FIFO下溢中断:内部DMA模式/SPI bridge模式/XIP write,当FIFO空时产生中断,读TXEICR清中断
- 接收FIFO满中断:接收FIFO大于等于阈值时产生,读接收FIFO直到数据小于阈值硬件自动清中断
- 接收FIFO溢出中断:接收逻辑尝试在满的FIFO里放数据时产生中断,新数据会丢掉,读RXOICR清中断
- 接收FIFO下溢中断:AHB尝试从空的接收FIFO读会产生中断,读RXUICR清中断
- 多主机内容中断:ssi作为master时,被其他串行master认作为slave,并被传输数据时产生中断,读MSTICR清中断
- SPI传输错误中断:动态等待状态特性使能。
- SPI主机错误中断:仅当SPI Bridge模式支持,当master发起了slave不能处理的传输时生效。读SPIMECR清中断
- AHB错误中断:仅当SPI Bridge模式支持,当AHB master接收到error response时置位。读AHBECR清中断
- SSI完成中断:开启内部DMA功能才有效,当DMA传输完成后置位。读DONECR清除中断。(AID mini不支持内部DMA)
- AXI错误中断:开启内部DMA功能才有效,当AXI master接收到error response时置位。读AXIECR清中断。(AID mini不支持内部DMA)
- 组合中断请求:以上所有中断请求屏蔽后的OR结果,如果想屏蔽这个中断,必须屏蔽所有DWC_ssi的所有中断
2.15 Boot模式
SSIC_BOOT_MODE_EN=1,配置为复位后立刻启动。DWC_ssi接收数据寄存器上的写命令,不需要对DWC_ssi编程。
参数设置完成后,DWC_ssi复位后立刻写到数据寄存器,一旦DWC_ssi接收到需要的数据量,DWC_ssi开始写slave 0.
2.16 SPI增强模式
DWC_ssi支持双线/四线/八线SPI模式,对应信号txd,rxd和ssi_oe_n的位宽为2,4,8。串行时钟/相位4种组合在该模式下有效,与标准spi不一致。寄存器CTRLR0.TMOD选择读/写操作。
2.16.1 增强模式写操作 - 指令阶段
- 数据阶段
- 地址阶段
CTRLR0.SPI_FRF:定义传输的帧格式
SPI_CTRLR0:定义指令、数据、地址的长度
SPI_CTRLR0.INST_L:定义指令长度(0/4/8/16bits)
SPI_CTRLR0.ADDR_L:定义地址长度
CTRLR0.DFS:定义数据长度
2.16.2 增强模式读操作
dual/quad/octal spi读操作分为4个阶段 - 指令阶段
- 地址阶段
- 等待周期
- 数据阶段
等待周期可以通过SPIC_CTRLR0.WAIT_CYCLES控制,等待周期是让slave从输入切换到输出。
对于读操作,DWC_ssi一次性发送指令和控制数据,等待直到NDF个数据后
2.17 Slave模式的SPI增强操作
信号txd/rxd/ssi_oe_n宽度可配置为2,4,8,CTRLR0.TMOD可配置write/read
2.17.1 写操作
如果TMOD=2'b01,接收数据无效,且数据不会存储到接收FIFO。数据传输基于CTRLR0.SPI_FRF中设置的帧格式
DWC_ssi不期望从SPI master读任何数据,不像dual/quad/octal memory设备从它们读取数据需要指令和地址。数据传输从他的第一个时钟沿开始,提高了系统的整体性能。
2.17.2 读操作
如果TMOD=2'b10,发送数据无效,数据传输依据SPI_FRF帧格式
2.18 增强模式时钟拓展(stretching)
增强SPI模式支持时钟拓展特性:可以在传输数据过程中保护FIFO的溢出/下溢。如果TX FIFO为空,DWC_ssi master会屏蔽 sclk_out 然后当非空时恢复。同样的在接收业务上,RX FIFO满后屏蔽时钟 直到软件读取RX FIFO的数据(水位由RXFTLR控制)
SPI_CTRLR0.SPI_CLOCK_STRETCH_EN控制使能时钟拓展特性
2.19 动态等待状态 特性
传统SPI设备不支持流控。DWC_ssi支持 动态等待状态 特性:定义了一个协议,SPI slave在传输过程可以进行流控。
2.20 Dual-Data-Rate(DDR支持)
标准操作下,数据在spi上的传输发生在时钟上升沿或下降沿。DDR特性支持数据在上升沿和下降沿传输。只支持master,需要有对应的memory器件。
DDR特性在以下mode得到支持: - mode 0:SCPH=0 && SCPOL=0
- mode 3:SCPH=1 && SCPOL=1
2.20.1 DDR描述
DDR commands: - 地址和数据传输使用DDR格式,指令传输用标准格式
- 指令/地址/数据传输都用DDR格式
SPI_DDR_EN:决定地址/数据使用DDR格式
INST_DDR_EN:决定指令用DDR格式
只在增强模式下有效
2.21 Read Data Strobe Signal
支持读数据选通信号
当SSIC_HAS_RXDS=1 同时 SPI_CTRLR0.SPI_RXDS_EN=1,支持rxds信号,他决定输出信号的有效窗口
仅当:spi mode 0
2.22 Data Mask
SSIC_SPI_DM_EN=1 和 SPI_CTRLR0.SPI_DM_EN=1支持数据屏蔽。仅当增强SPI模式的DDR操作的写操作下有效。
数据传输时,如果想上传选择性的数据到memory,txd_dm信号可以屏蔽txd上的数据
2.23 Hyperbus Protocol Support
(未实现)
2.24 JEDEC xSPI Protocol Support
expanded SPI是非易失性存储设备的一个标准。支持单线命令和多线命令。
2.25 SPI Bridge Feature
DWC_ssi支持将spi所有的传输转换到AHB传输,因此外部的master可以直接访问内部的memory而无需cpu的干预。
DWC_ssi可以在boot模式下,复位后从外部的master加载boot程序。
(贴图)
所有的SPI传输都有以下阶段: - 指令阶段:8bit,决定数据传输类型和接下来的传输过程
- 地址阶段:仅支持24bit地址
- 数据阶段:接收/发送数据长度在指令阶段配置
2.26 XIP模式
DWC_ssi支持通过AHB transaction直接执行SPI memory读。AHB增加xip_en,该信号决定AHB是读写寄存器还是XIP传输。
当xip_en=1,DWC_ssi等待AHB发出的读请求,这个请求被转换成SPI在串行总线上的读操作。当数据由串口收到后返回给AHB transaction。地址通过haddr信号发送给SPI接口。
注意:AIDmini中Boot SSI采用此功能,且为master模式。
2.26.1 XIP读 应用模型
XIP仅支持在dual/quad/octal增强spi下使用,因此CTRLR0.SPI_FRF不能配置为0。
通常XIP操作包含地址和数据,编程flow:
1.配置CTRLR0.SPI_FRF
2.设置地址长度,等待周期,和transaction type(SPI_CTRLR0.TRANS_TYPE:收/发各自线数)。注意:最大地址长度为32
XIP传输可以包含指令段(SPI_CTRLR0.XIP_INST_EN=1):
1.设置指令长度(SPI_CTRLR0)
2.写指令操作码(XIP_INCR_INST,XIP_WRAP_INST)
编程做好后,在AHB接口上发起读transaction会被传输到SPI外设。
配置SPI_CTRLR0.XIP_DFS_HC=0后,AHB的hsize、hburst用于控制数据帧大小和数据帧数目。
2.26.2 XIP传输
当CTRLR0和SPI_CTRLR0寄存器配置好后,拉高xip_en开启XIP传输(向AHB总线发起读请求)。
例如从0x0地址开启4拍xip传输: - DWC_ssi工作在Octal SPI模式
- 数据帧长度由hsize信号控制,32bit
- burst的地址阶段种xip_en必须有效
- AHB接口发送的地址与AHB SPI线上发送的一致,SPI_CTRLR0.ADDR_L决定了SPI线上发送的地址位数
DWC_ssi首次接收到所有数据并传输到AHB接口上,一旦取得burst所需的数据量,slave片选释放。每次发起burst请求要向AHB接口发送地址。
(贴图)
DWC_ssi支持以下两种AHB传输:
case A:Fixed INCR/WRAP Burst Transfer
DWC_ssi收到固定的burst请求时,从SPI设备中取固定数量的数据。hburst决定了帧的数量(NDF),hsize决定了数据帧的大小,上图是固定增量的INCR4 burst。
对于WRAP请求,SPI从设备必须发送正确的数据,然后DWC_ssi把数据送到AHB接口。
case B: Undefined Incrementing Burst (INCR)
DWC_ssi一直从SPI设备取数据,除非在slave接口上检测到burst结束(IDLE传输),最大可以从SPI设备中取1KB的数据。如下图,当htrans信号上为IDLE传输时,DWC_ssi将他看作INCE burst的结束,释放slave选择线,传输最后一个数据到AHB接口完成burst传输。
(贴图)
2.26.3 AHB 等待传输
XIP传输时,AHB master有可能传输期间插入等待状态。此时,DWC_ssi不会中断spi接口上的传输,继续从spi slave上取数据,直到当前burst传输结束。
中间数据存储在DWC_ssi的RX FIFO中,等待周期结束后再发送到AHB接口。
下图为AHB上有busy周期的传输过程。AHB master收到D-1data,AHB插入busy周期。期间,没有数据会被发送到AHB master。当AHB恢复传输,DWC_ssi继续发送从SPI device收到的数据。
(贴图)
中间数据帧存到RX FIFO,可能导致FIFO溢出,所以RX FIFO深度必须考虑在内,如果RX FIFO溢出中断,必须尝试数据重传。(IC)
2.26.4 Burst提前结束
在AHB传输时可能发生Early burst termination(EBT),AHB检测到IDLE状态时,DWC_ssi完成当前SPI线上的传输,将最后一个数据发到AHB上。AHB master可以从最后一个地址重新开始burst传输,再次发送地址到SPI slave上。(类似caseB)
注意:XIP模式下,AHBmaster BUSY时,DWC_ssi不支持EBT。
2.26.6 支持Mode Bits
串行传输时,设备可以额外发送Mode Bits,DWC_ssi设置SPI_CTRLR0.XIP_MD_BIT_EN支持该功能。把要发送的mode bits值写入XIP_MODE_BITS寄存器,在寄存器为SPI_CTRLR0.XIP_MBL或XIP_CTRL.XIP_MBL中设置mode bits的长度,在地址阶段完成后发送mode bits,发送方式与地址一致。
(作用?)
2.26.9 Hyperbus模式的XIP传输
从haddr收到的32bit地址打包成hypterbus设备需要的48bit的CA帧格式。因为Hyperbus设备16bit寻址,包成48bit地址时忽略addr的最低有效位。
2.27 Concurrent XIP 和 Non-XIP 操作
XIP和Non-XIP是互斥的,因此当新的XIP或Non-XIP传输时,RX和TX FIFO应该为空。两种传输要串行,保证没有数据交叉或丢失。因为复杂度增加因此一些系统不会有这种需求。
DWC_ssi提供一种配置,可以并行处理XIP和non-XIP传输。DWC_ssi为XIP传输数据提供一个单独的FIFO,因此在开始新的XIP传输前不用保证RX和TX FIFO为空。
2.27.1 操作描述
配置参数SSIC_CONCURRENT_XIP_EN=1支持该功能。 - 可以并行处理XIP和Non-XIP(read / write),在串行接口上同一时间只能有一个transaction。DWC_ssi按照先到线服务的原则:当non-XIP正在SPI接口上传输,直到完成当前传输才可以进行XIP传输,反之亦然。
- 增加独立的XIP配置寄存器XIP_CTRL和slave选择寄存器XIP_SER,使用XIP_CTRL中定义的特性进行传输,对于non-XIP传输,使用CTRLR0,SPI_CTRLR0寄存器定义的特性进行SPI串行传输。
当DWC_ssi连接到多个master,master-A需要DMA transaction,但是master-B需要XIP传输时,两个master可能在任何时间发起请求。
SSIC_CONCURRENT_XIP_EN=0
此时,DWC_ssi处理master-A的DMA请求时,不会处理任何master-B的XIP传输请求,DWC_ssi返回ERROR响应,只有当DMA请求在对应串行接口上全部完成后才处理XIP请求,但是CPU也可以通过以下步骤产生中断进行XIP传输:
1.停止当前的DMA传输
2.清空TX RX FIFO
3.(可选)发送SPI suspend命令
4.保证SPI设备完成其内部操作(轮询设备的状态位)
5.允许XIP传输进行
6.如果(3)发起了SPI suspend命令,则发送SPI重发命令
7.检查SPI设备是否准备好重发DMA transaction(轮询设备状态位)
8.重新发送剩余数据的命令和地址
这个过程严重影响整体性能,因此最好分开进行dma和xip传输。
SSIC_CONCURRENT_XIP_EN=1
此时不需要上述步骤,只需要按规则进行以下编程: - 设置DWC_ssi中的DMA控制和DMA阈值寄存器
- 设置SER寄存器中的slave
- 设置XIP_SER寄存器的slave
- 保证DMA transaction的长度等于TXFTLR.TXFTHR中的值
这种方式提高了整体性能,配置好DWC_ssi后,CPU参与很少
2.28 XIP连续传输模式
DWC_ssi接收到XIP请求后,将来自AHB接口的地址发送到SPI接口,每个新的XIP读传输都是一样的处理方式。因此对于每个请求都要发送地址,导致了系统的延迟。
若memory设备允许在XIP传输之间保持slave选择信号不i按,DWC_ssi可以配置成连续XIP模式,提高性能。此时主机的2个或更多的AHB burst请求转为single SPI命令,通过确保命令和地址不重发,并且主机在这些burst期间不需要等待dummy周期。
2.28.1 描述
设置SPI_CTRLR0.XIP_CONT_XFER_EN=1使能该特性,此时收到第一个XIP命令后,DWC_ssi工作在连续XIP模式。对于第一个XIP传输,地址发送到SPI接口上(SPI_CTRLR0.XIP_INST_EN=1时增加指令)。接收到数据后,DWC_ssi保持slave选择线和时钟(sclk_out)到默认状态。对于后续AHB接口上的XIP传输,DWC_ssi重发时钟sclk_out,无需发送命令和地址到SPI接口上,数据直接从设备上取回,没有dummy周期。
以下两种情况DWC_ssi会退出连续模式: - XIP接口上收到了non-XIP命令(xip_en=0时任何AHB transaction)
- 当AHB transaction处理非连续的地址时,slave选择线移走,DWC_ssi开始新的XIP请求
DWC_ssi支持以下两种连续传输的方式: - continuous incremental transfer
- continuous WRAP transfer
2.28.2 Continuous Incremental Transfer
连续的XIP模式下,收到的第一个命令为INCR(hburst = 011/101/111)时,该传输定义为连续增量。该模式下,这次传输完成后,下一个命令也必须是增量的,地址必须与上一个burst连续。
如果收到的第一个transaction有以下特性,那么下个连续的地址从0x00001010开始:
HADDR = 0x00001000;HSIZE = 3'b010(32bits)and HBURST = 011(INCR4)
若此时AHB transaction(xip_en=1)的地址不是0x00001010,或者检测到WRAP传输,那么一开slave选择线,DWC_ssi发起新的XIP请求。
连续读模式下不支持未定义的INCR burst(hburst=001)
2.28.3 Continuous WRAP Transfer
连续的XIP模式下,收到的第一个命令为WRAP(hburst = 010/100/110)时,该传输定义为连续WRAP。该模式下,这次传输完成后,下一个命令的地址必须冲上一个burst地址的边界开始。
如果收到的第一个transaction有以下特性,那么下个连续的地址从0x00001010开始:
HADDR = 0x0000100c;HSIZE = 3'b010(32bits)and HBURST = 010(WRAP4)
若此时AHB transaction(xip_en=1)的地址不是0x00001010,那么移开slave选择线,DWC_ssi发起新的XIP请求。
2.29 XIP数据预取
对于AHB接口上的每个XIP请求,DWC_ssi发送指令和地址到终端设备,一段时间后,设备返回数据,在发送到AHB接口上,当读一大块的数据时,分成几个burst传输,每个传输所需时间相同,控制器必须要等待指令和地址阶段后才能得到数据。
使用DWC_ssi的数据预取功能时,控制器在当前XIP transaction时预取线序burst的数据。如果下一个transaction请求连续的地址,可以直接从RX FIFO中读走,而不是等待一个新的地址和数据阶段,提高了系统整体性能。
2.29.1 描述
预取的数据量要等与上一个AHB传输的burst长度或FIFO深度(两者取最小)。
例如,AHB定义burst长度为16,从0x00地址开始,DWC_ssi完成当前的16拍取数据后,接着再取16个数据放到数据寄存器。·如果AHB总线在此请求数据,地址从上一个传输结束的未知开始,此时数据从RX FIFO直接放回到AHB接口上。同时,DWC_ssi在此开始XIP传输,预取下一块数据。如果AHB master发送的不是连续的地址,RX FIFO中的数据刷新,并且开始一个新的transaction。
以下为应用场景:
case A:Transfer Request for the Contigous Address
此时,DWC_ssi返回FIFO中的所有数据,然后再取剩下的数据完成当前传输。完成后,DWC_ssi按照同样的方式,为下次传输预取数据。
例如:
1.T-0时刻,DWC_ssi收到burst为16的XIP请求
2.T-1时刻,DWC_ssi完成当前的XIP传输,继续再取16个数据帧
3.当DWC_ssi预取下一个16拍数据时,收到了另一个burst长度为16的XIP请求
4.此时,DWC_ssi用FIFO终端数据处理第二次burst请求
5.一旦但概念传输完成,DWC_ssi继续取16个数据帧完成预取
如果DWC_ssi一直收到XIP请求,这个处理过程就会一直执行预取,该功能可以用于拓展当前XIP传输,可以取任意量的数据。
(贴图)
case B:Transfer Request for the Non-Contiguous Address
此时,当前的串行传输结束后RX FIFO刷新,在串行线上开始新的传输
(贴图)
如果连续传输模式和预取模式都使能,从设备中预取数据,slave选择线一直置位。连续地址请求时,数据从RX FIFO中读出,同时DWC_ssi从连续地址预取数据。这个过程会一直持续,直到接收到一个非连续的地址,或AHB接口上的non-XIP transaction,此时,预取的数据从FIFO中刷掉,开始新的传输。
对于非连续的地址,或AHB接口上的non-XIP transaction,此时,预取的数据从FIFO中刷掉,开始新的传输。
对于非连续的模式,一旦预取完成后,就会释放slave选择线,发起新的XIP读请求时,再次置位slave选择线可以进行下一步预取。因此对于连续读模式,无需再次发送指令和地址到设备,数据可以很快取回,延迟相对较少。
仅在连续XIP模式下,支持WRAP涮熟类型,此时会预取增量地址的数据,若完成此时WRAP传输后,另一个WRAP传输产生,刷掉FIFO中预取的数据,重新开始新的传输。
若预取功能使能,不支持AHB未定义长度的增量传输(hburst=3'b001)
DWC-ssi响应以下应用场景的新传输请求:
Case1:The Next Burst Length Smaller than the Pref-Fetched Data
此时,DWC_ssi通过FIFO中数据响应burst请求,若RX FIFO中有足够的数据完成2个但概念burst长度的传输,则不会预取数据。
例如,初始的XIP请求为INCR16,DWC_ssi取16个数据帧来响应该请求,并再预取16个数据帧放入RX FIFO中,若下一个XIP请求为INCR4,DWC_ssi立刻响应,不会进行新的SPI传输,因为对于下一次预取来说,RX FIFO中有足够的数据(burst length2 = 42 = 8)
Case2:The Burst Length Larger than the Data Stored in RX FIFO
此时,DWC_ssi通过RX FIFO中的所有数据响应,同时开始XIP burst,渠道数据后完成剩下的burst。
DWC_ssi也会预取下一个burst长度的数据,放入RX FIFO。
例如,初始的XIP请求为INCR4,DWC_ssi取4个数据帧来响应请求,并再预取4个数据帧放入RX FIFO中,若下一个XIP请求为INCR16,DWC_ssi离婚可用4个数据帧响应,并再开始取28个数据帧(12个响应当前burst+预取16个)
Case3:AHB Master with New Transfer request in Middle of Pre-fetch
当预取还未完成的时候,AHB master发起了新的连续XIP传输请求时,DWC_ssi用取得的数据响应,并进行下一步的预取,类似上述case2.
AHB master发起了非连续地址的新的XIP涮熟是,正在进行的预取停止,并再SPI上开始新的XIP传输,当DWC_ssi关闭时,预取的数据冲刷掉。
如果想知道DWC-ssi是否正在预取连续地址的数据,软件可以轮询SR寄存器中的SSI busy状态,busy拉低时,开始non-XIP的操作。
5、寄存器
Block1:
- CTRL0
- CTRL1
- SSIENR
- MWCR
- SER
- BAUDR
- TXFTLR
- RXFTLR
- TXFLR
- RXFLR
- SR
- IMR
- ISR
- RISR
- TXEICR
- RXOICR
- RXUICR:接收FIFO溢出中断清除寄存器
- RXUICR
- MSTICR
- ICR
- DMACR
- DMATDLR
- AXIAWLEN
- DMARDLR
- AXIARLEN
- IDR
- SSIC_VERSION_ID
- DRx
- RX_SAMPLE_DELAY
- SPI_CTRLR0
- DDR_DRIVE_EDGE
- XPI_MODE_BITS
Bridge - CTRLR0
- SSIENR
- RXFBTR
- TXFTLR
- RXFTLR
- SR
- IMR
- ISR
- RISR
- TXUICR
- RXOICR
- SPIMECR
- AHBECR
- ICR
- IDR
- SSIC_VERSION_ID
Block2: - XIP_INCR_INST
- XPI_WRAP_INST
- XIP_CTRL
- XIP_SER
- XRXOICR
- XIP_CNT_TIME_OUT
- SPI_CTRLR1
- SPITECR
- SPIDR
- SPIAR
- AXIAR0
- AXIAR1
- AXIECR
- DONECR
- XIP_WRITE_INCR_INST
- XPI_WRITE_WRAP_INST
- XIP_WRITE_CTRL