1
摘要
本篇應用筆記主要介紹 HC32F460 系列的四線式串行外設接口(QSPI)模塊,并簡要說明通過QSPI 四線式輸入輸出快速讀模式如何與外部 Flash 通信。
2
QSPI 簡介
HC32F460 系列的四線式串行外設接口(QSPI)是一個存儲器控制模塊,主要用于和帶 SPI 兼容接口的串行 ROM 進行通信,其對象主要包括有串行閃存、串行 EEPROM 以及串行FeRAM。
2.1
主要特性
Ÿ
支持擴展 SPI,二線式 SPI 和四線式 SPI 等多種協議
Ÿ
地址線寬度可選擇 8 位/16 位/24 位/32 位
Ÿ
可通過時序調整以支持各種串行閃存
Ÿ
支持多種讀取方式
-
標準讀/快速讀
-
二線式輸出快速讀取/二線式輸入輸出快速讀取
-
四線式輸出快速讀取/四線式輸入輸出快速讀取
Ÿ
數量可調的虛擬周期
Ÿ
16 字節的預讀取功能
Ÿ
總線周期延長功能
Ÿ
XIP 控制功能
Ÿ
靈活而廣泛的支持大量串行閃存軟件控制指令,包括擦、寫、ID讀取及掉電控制等。
2.2 內存映射
串行閃存及相關的控制寄存器在 AHB 總線空間的位置由總體的地址范圍配置來決定,QSPI 空間被區分為 2 段空間,包括 QSPI I/O 寄存器空間 64MB 和外部 QSPI 設備空間 64MB。每當對 QSPI 的 ROM 空間進行讀訪問時,QSPI 總線自動開始工作,將從串行閃存內讀到的數據傳送過來,QSPI 可以通過自動將 MCU 的外部 ROM 讀取總線周期轉換為 QSPI 總線周期來對串行閃存進行讀取。
3
HC32F460 系列的 QSPI
3.1
幀格式
HC32F460 系列的四線式串行外設接口(QSPI)支持擴展式 SPI,二線式 SPI 和四線式 SPI 三種協議。初始的默認協議是擴展式 SPI 協議,可通過設置 QSCR 寄存器中的 IPRSL[1:0]/ APRSL[1:0]/DPRSL[1:0]位來分別配置指令發送階段、地址發送階段、數據接收階段的協議。通過 QSCR 寄存器中的 MDSEL 可以配置 QSPI 的讀取模式,如配置為自定義的模式,則 QSCR 寄存器中的 IPRSL[1:0]/ APRSL[1:0]/DPRSL[1:0]位必須配置為同一種協議才能保證 QSPI 正常工作。且直接通信模式不支持多線式動作。
3.1.1 指令
當一個串行總線周期開始的時候,串行閃存選擇信號被置為有效狀態,QSPI 開始輸出指令代碼,指令代碼為一個 8-bits 的數據,可以發送任何有效的指令值,指令代碼需要在串行總線周期開始之前配置好,通過 QSCCMD 寄存器進行配置。
3.1.2 地址
在這個階段,一個地址被發送到閃存。QSPI 擁有 32 位地址總線寬度來配合串行閃存,可以通過設置 QSFCR 寄存器內的 AWSL[1:0]來選擇使用 8 位/16 位/24 位/32 為地址總線寬度。如果選擇 8 位/16 位/24 位的地址總線寬度,那么只有地址與之匹配的低位空間可以被正常訪問,訪問QSPI 中高位的串行閃存鏡像空間將會反復出現低位空間的內容。
3.1.3 虛擬周期
在快速讀指令的情況下,需要在發送地址之后加入一定數量的虛擬周期,其具體數量由QSFCR 寄存器中的 DMCYCN[3:0]決定。虛擬周期最初的兩個周期用于決定是否選擇 XIP 模式。
3.1.4 數據
在這個階段,數據發送到 QSPI 閃存或者從 QSPI 閃存接收數據,直接通信模式下一個完整的QSPI 總線周期從對寄存器 QSDCOM 的 DCOM[7:0]首次操作開始直到對 QSCR 寄存器的進行一次寫操作后結束。對 DCOM[7:0]的寫會轉換為一次 QSPI 總線的單字節的數據傳送,而對DCOM[7:0]的讀則會轉換成一次 QSPI 總線的單字節的數據接收。
3.2 通信協議
HC32F460 系列的四線式串行外設接口(QSPI)支持靈活的配置目標地址及虛擬周期數,其中目標地址的寬度通過 QSFCR 寄存器中的 AWSL[1:0]位來設置,虛擬周期通過 QSFCR 寄存器中的 DMCYCN[3:0]位來設置。
3.2.1 擴展式 SPI 協議
擴展式 SPI 協議只用 QSIO0 管腳單線進行指令輸出,之后的地址及數據則根據具體的讀取模式指令使用單線式/二線式/四線式輸出。若配置為單線式及二線式輸出則 QSIO2 為輸出狀態,輸出電平由 QSFCR 寄存器的 WPOL 位 決定,初始輸出為低電平,QSIO3 也為輸出狀態,輸出高電平。QSIO2 管腳也可用作串行閃存的 WP 功能,QSIO3 管腳也可用作串行閃存 HOLD 或 RESET 功能。
3.2.2 二線式 SPI 協議
二線式 SPI 協議使用 QSIO0,QSIO1 兩個管腳實行相應的操作,包括發出指令,地址,接收數據等。此時 QSIO2 為輸出狀態,輸出電平由 QSFCR 寄存器的 WPOL 位決定,初始輸出為低電平,QSIO3 也為輸出狀態,輸出高電平。QSIO2 管腳也可用作串行閃存的 WP 功能, QSIO3 管腳也可用作串行閃存 HOLD 或 RESET 功能。
3.2.3 四線式 SPI 協議
四線式 SPI 協議使用 QSIO0,QSIO1,QSIO2,QSIO3 四個管腳實行發出指令,地址,接收數據等所有相關操作。
3.3 總線模式
3.3.1 ROM 訪問模式
串行閃存及相關的控制寄存器在 AHB 總線空間的位置由總體的地址范圍配置來決定,QSPI 可以通過自動將 MCU 的外部 ROM 讀取總線周期轉換為 QSPI 總線周期來對串行閃存進行讀取。此模式下配置好相關參數,讀取閃存和讀取內置 Flash 一樣,不需要操作寄存器,對 QSPI連接的閃存的映射地址進行直接訪問即可。
對于 ROM 的單一讀取指令會獨立的從芯片內部總線周期一對一的轉換為 QSPI 總線周期。當一個 ROM 的讀取總線周期被檢測到時,QSSN 信號會置為有效狀態,從而啟動一個 QSPI 總線周期。當接收完串行閃存的數據后,QSSN 信號變成無效狀態,該 QSPI 總線周期宣告完成。
3.3.2 直接通信模式
串行閃存還有很多不同的追加功能,諸如 ID 信息讀取,擦除,寫入及狀態信息讀取等。針對這種情況,QSPI 提供了直接通信模式,用戶可通過軟件直接對串行閃存進行控制,由此模式軟件可以產生任意所需的 QSPI 總線周期。將 QSCR 寄存器的DCOME 位設成 1 可以進入直接通信模式,一旦進入直接通信模式,將無法進行通常的閃存讀取操作,如果要進行常規的閃存讀取,需要將 DCOME 位清零退出直接通信模式。直接通信模式下一個完整的 QSPI 總線周期從對寄存器 QSDCOM 的 DCOM[7:0]首次操作開始直到對 QSCR 寄存器的進行一次寫操作后結束,這期間 QSSN 信號始終保持低電平的有效狀態。
在直接通信模式下是無法對 QSCR 和 QSDCOM 以外的寄存器進行寫操作的,對其他寄存器的寫操作將會退出直接通信模式。
3.4 特殊功能
3.4.1 閃存預讀取功能
對于諸如 CPU 指令或是數據塊的傳輸,系統通常是以一個順次遞增的閃存地址順序進行數據的讀取,串行閃存具有連續數據傳輸能力而不需要再次發送指令代碼和地址。QSPI 提供了預讀取功能來進行連續的數據接收,通過設置 QSCR 寄存器中的 PFE 位為 1 激活預讀取功能,當該功能有效后,數據會被連續接收并儲存到緩沖區而不需要等待另一個閃存讀取要求,預讀取的緩沖區可存儲 16 個字節的數據,除此以外,還有 2 個字節的數據接收緩沖區也可以存儲預讀取的數據,當所有的緩沖區數據取滿后,QSPI 總線周期結束。
在預讀取狀態寄存器 QSSR 中,PFAN 位顯示了當前的預讀取工作狀態,PFFUL 位表示預讀取數據緩沖區已經放滿,而 PFNUM[4:0]則顯示了目前已經讀取到緩沖區的數據的字節數。
3.4.2 XIP 模式
一些串行閃存器件可以通過省略接收讀取指令來降低延遲時間,該機能可通過虛擬周期期間發送的模式代在快速度指令時的虛擬周期期間,QSPI 在最初的兩個周期通過發送 XIP 模式代碼來控制串行閃存的 XIP 模式,可通過寄存器 QSXCMD 的XIPMC[7:0]位進行針對性設置。啟動串行閃存的 XIP 模式需要在 QSXCMD[7:0]中設置相應的模式代碼,控制部分的 XIP 模式只需要將 XIPE 位置成 1 就可以,而與 QSXCMD[7:0]的值無關。退出串行閃存的 XIP 模式需要在 QSXCMD[7:0]中設置相應的退出模式代碼,控制部分的 XIP 模式只需要將 XIPE 位清零就可以,而與 QSXCMD[7:0]的值無關。
3.5
注意事項
3.5.1 寄存器的設置順序
在使用中可以動態的對 QSPI 控制寄存器進行設置或更改,但是不注意寄存器的設置順序可能 會導致 QSPI 總線周期在寄存器還沒有完全設置完成時就開始,因此請仔細配置寄存器的設置順序以避免這類情況的發生。
3.5.2 模塊停止信號的設置
QSPI 在系統復位后處于模塊停止狀態,只有在將模塊停止控制寄存器中的 QSPI 模塊停止信號清零號才可以對寄存器進行設置。
4
樣例代碼
4.1
代碼介紹
用戶可以根據上述的工作流程編寫自己的代碼來學習驗證該模塊,也可以直接通過華大半導體的網站找到 HC32F460 系列 MCU 的設備驅動庫(Device Driver Library,DDL)來體驗 QSPI 與外部 Flash 通信的優勢。
4.2 代碼運行
用戶可以通過華大半導體的網站找到 DDL 的樣例代碼(qspi_four_wire_io_fast_read、qspi_two_wire_io_fast_read、qspi_standard_read、qspi_fast_read),并配合評估用板(比如‘EVHC32F460-LQFP100-050-V1.1’)運行相關代碼學習使用 QSPI 模塊。
5
總結
以上章節簡要介紹 HC32F460 系列的 QSPI 寄存器、功能模式、注意事項。演示了如何操作QSPI 讀寫 Flash 樣例代碼,在開發中用戶可以根據自己的實際需要使用 QSPI 模塊。
