日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

电子设计常用总线--QSPI

發布時間:2023/12/19 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 电子设计常用总线--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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。