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