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