电子设计常用总线--QSPI
? ? ? ? 今天被打算學習一下QSPI的相關知識,以外驚喜發現了SPI協議的其他家族成員,我們常說的SPI協議其實是包括:Standard SPI(3-wire)、Dual SPI(4-wire)和Queued SPI(6-wire)三種協議接口。Standard SPI通常就稱SPI,有4根信號線,分別為CLK、CS、MOSI和MISO。Dual SPI通常只是針對SPI Flash而言,并不應用于所Standard SPI和Dual SPI不是今天要學習的重點,QSPI才是今天的主角,QSPI與Dual SPI類似,也是應用于SPI Flash的操作,6線制的QSPI Flash是在4線制DSPI Flash的基礎上增加了兩根I/O線(SIO2,SIO3),目的是一個時鐘內傳輸4個bit數據,顯而易見的是對于SPI Flash而言,在相同的時鐘速率下,數據線數目越多,傳輸速率越高。下面就QSPI的相關知識進行簡單總結,以備后續學習查閱。
? ? ? ?有SPI外設,操作SPI Flash往往是向Flash中寫入數據或者單純讀取Flash中存儲的數據,基本不用實時的數據交互,導致SPI全雙工通訊的優勢并沒有發揮出來,因此擴展了MOSI和MISO的用法,讓它們工作在半雙工模式,用以加倍數據傳輸。在操作Dual SPI Flash時,可以發送一個命令字節進入dual mode,這樣MOSI變成SIO0(Serial IO 0),MISO變成SIO1(Serial IO 1),這樣一個時鐘周期內就能傳輸2個bit數據,加倍了數據傳輸。
? ? ? ?QSPI(Queued Serial Peripheral Interface,隊列串行外設接口)
QSPI是Queued SPI的簡寫,是Motorola公司推出的SPI接口的擴展,比SPI應用更加廣泛。在SPI協議的基礎上,Motorola公司對其功能進行了增強,增加了隊列傳輸機制,推出了隊列串行外設接口協議。使用QSPI接口,用戶可以一次性傳輸包含多達16個8位或16位數據的傳輸隊列。而且QSPI一旦啟動傳輸,直到傳輸結束,傳輸過程都不需要CPU干預,極大的提高了傳輸效率。在總線結構上QSPI與SPI相比最大的結構特點是以80字節的RAM代替了SPI的發送和接收數據寄存器。
? ? ?該接口可以在以下三種模式下工作:
間接模式:使用?QSPI?寄存器執行全部操作
狀態輪詢模式:周期性讀取外部?Flash?狀態寄存器,而且標志位置?1?時會產生中斷(如擦除或燒寫完成,會產生中斷)
內存映射模式:外部?Flash?映射到微控制器地址空間,從而系統將其視作內部存儲器
QSPI常見的功能框圖如下圖所示
QSPI使用6根信號連接Flash,分別是四個數據線BK1_IO0~BK1_IO3,一個時鐘輸出CLK,一個片選輸出(低電平有效)BK1_nCS,它們的作用介紹如下:
(1)BK1_nCS:片選輸出(低電平有效),適用于一個主設備上掛多個外設Flash的情況下選擇要操作的目標Flash。QSPI通訊以BK1_nCS線拉低為開始信號,以BK1_nCS線被拉高作為結束信號。
(2)CLK:時鐘輸出,用于通訊數據同步,它由通訊主機產生,決定了通訊的速率,不同的設備支持的最高時鐘頻率不一樣,如STM32的QSPI時鐘頻率最大為fpclk/2,兩個設備之間通訊時,通訊速率受限于低速設備。
(3)BK1_IO0:在雙線/四線模式中為雙向IO,單線模式中為串行輸出。
(4)BK1_IO1:在雙線/四線模式中為雙向IO,單線模式中為串行輸入。
(5)BK1_IO2:在四線模式中為雙向IO。
(6)BK1_IO3:在四線模式中為雙向IO。
QSPI命令序列
QSPI通過命令與Flash通信,每條命令包括指令、地址、交替(復用)字節、空指令和數據共五個階段,而這五個階段任一階段均可跳過,但至少要包含指令、地址、交替字節或數據階段之一。nCS在每條指令開始前下降,在每條指令完成后再次上升。QSPI四線模式下的讀命令時序如下圖所示。?
1)指令階段
這一階段,將在QSPI_CCR[7:0]寄存器的instruction字段中配置的一條8位指令發送到Flash,指定待執行操作的類型。
盡管大多數Flash從IO0/SO信號(單線SPI模式)只能以一次1位的方式接收指令,但指令階段可選擇一次發送2位(在雙線SPI模式中通過IO0/IO1)或一次發送4位(在四線SPI模式中通過IO0/IO1/IO2/IO3)。這可通過QSPI_CCR[9:8]寄存器中的IMODE[1:0]字段進行配置。若IMODE = 00,則跳過指令階段,命令序列從地址階段(如果存在)開始。
2)地址階段
在地址階段,將1-4字節發送到Flash,指示操作地址。待發送的地址字節數在QSPI_CCR[13:12]寄存器的ADSIZE[1:0]字段中進行配置。在間接模式和自動輪詢模式下,待發送的地址字節在QSPI_AR寄存器的ADDRESS[31:0]中指定;在內存映射模式下,則通過AHB(來自于內核或DMA)直接給出地址。地址階段可一次發送1位(單線SPI模式通過SO)、2位(雙線SPI模式中通過IO0/IO1)或4位(在四線SPI模式中通過IO0/IO1/IO2/IO3)。這可通過QUADSPI_CCR[11:10]寄存器中的ADMODE[1:0]字段進行配置。若ADMODE = 00,則跳過地址階段,命令序列直接進入下一階段(如果存在)。
3)交替字節階段
在交替字節階段,將1-4字節發送到Flash,一般用于控制操作模式。待發送的交替字節數在QSPI_CCR[17:16]寄存器的ABSIZE[1:0]字段中進行配置。待發送的字節在QSPI_ABR寄存器中指定。
交替字節階段可一次發送1位(在單線SPI模式中通過SO)、2位(在雙線SPI模式中通過IO0/IO1)或4位(在四線SPI模式中通過IO0/IO1/IO2/IO3)。這可通過QSPI_CCR[15:14]寄存器中的ABMODE[1:0]字段進行配置。若ABMODE = 00,則跳過交替字節階段,命令序列直接進入下一階段(如果存在)。
交替字節階段存在僅需發送單個半字節而不是一個全字節的情況,比如采用雙線模式并且僅使用兩個周期發送交替字節時。在這種情況下,固件可采用四線模式(ABMODE = 11)并發送一個字節,方法是ALTERNATE的位7和3置“1”(IO3保持高電平)且位6和2置“0”(IO2線保持低電平)。此時,半字節的高2位存放在ALTERNATE的位4:3,低2位存放在位1和0中。例如,如果半字節2 (0010)通過IO0/IO1發送,則ALTERNATE應設置為0x8A (1000_1010)。
4)空指令周期階段
在空指令周期階段,給定的1-31個周期內不發送或接收任何數據,目的是當采用更高的時鐘頻率時,給Flash留出準備數據階段的時間。這一階段中給定的周期數在QSPI_CCR[22:18]寄存器的DCYC[4:0]字段中指定。在SDR和DDR模式下,持續時間被指定為一定個數的全時鐘周期。若DCYC為零,則跳過空指令周期階段,命令序列直接進入數據階段(如果存在)。空指令周期階段的操作模式由DMODE確定。為確保數據信號從輸出模式轉變為輸入模式有足夠的“周轉”時間,使用雙線和四線模式從Flash接收數據時,至少需要指定一個空指令周期。
5)數據階段
在數據階段,可從Flash接收或向其發送任意數量的字節。在間接模式和自動輪詢模式下,待發送/接收的字節數在QSPI_DLR寄存器中指定。在間接寫入模式下,發送到Flash的數據必須寫入QSPI_DR寄存器。在間接讀取模式下,通過讀取QSPI_DR寄存器獲得從Flash接收的數據。在內存映射模式下,讀取的數據通過AHB直接發送回Cortex或DMA。數據階段可一次發送/接收1位(在單線SPI模式中通過SO)、2位(在雙線SPI模式中通過IO0/IO1)或4位(在四線SPI模式中通過IO0/IO1/IO2/IO3)。這可通過QUADSPI_CCR[15:14]寄存器中的ABMODE[1:0]?字段進行配置。若DMODE = 00,則跳過數據階段,命令序列在拉高nCS時立即完成。這一配置僅可用于僅間接寫入模式。
總結
以上是生活随笔為你收集整理的电子设计常用总线--QSPI的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1299元起!华为畅享60正式开售 超长
- 下一篇: CAN总线抗干扰的六种解决方案