文章目錄
- 22.1 SPI 協議簡介
- 22.1.1 SPI物理層
- 22.1.2 協議
- 22.1.3 CPOL/CPHA 及通訊模式
- 22.1.4 擴展 SPI 協議
- 22.1.5 SDR 和 DDR 模式
- 22.2 RT1052 的 FlexSPI 特性及架構
- 22.2.1 RT1052 的 FlexSPI 外設簡介
- 22.2.2 RT1052 的 FlexSPI 架構剖析
- 22.2.2.1 通訊引腳
- 22.2.2.2 指令查找表 LUT
- 22.2.2.3 命令仲裁器
- 22.2.2.4 IP 命令控制邏輯
- 22.2.2.5 AHB 命令控制邏輯
- 22.2.2.6 驅動時鐘
- 22.3 FlexSPI 初始化配置結構體
22.1 SPI 協議簡介
22.1.1 SPI物理層
SPI 通訊使用 3 條總線及片選線,3 條總線分別為 SCK、MOSI、MISO。
SS( Slave Select)片選信號線,也稱為 NSS、CS
- 每個從設備都有獨立的這一條 NSS 信號線
- 當主機要選擇從設備時,把該從設備的 NSS 信號線設置為低電平
SCK (Serial Clock):時鐘信號線,用于通訊數據同步。
- 它由通訊主機產生,決定了通訊的速率,不同的設備支持的最高時鐘頻率不一樣
22.1.2 協議
SPI 使用 MOSI 及 MISO 信號線來傳輸數據,使用 SCK 信號線進行數據同步。
- MOSI 及 MISO 數據線在 SCK 的每個時鐘周期傳輸一位數據,且數據輸入輸出是同時進行的。
- 一般都會采用MSB 先行模式。
- 數據在 SCK 的上升沿期間變化輸出,在 SCK 的下降沿時被采樣。
- SPI 每次數據傳輸可以 8 位或 16 位為單位,每次傳輸的單位數不受限制。
22.1.3 CPOL/CPHA 及通訊模式
SPI 一共有四種通訊模式,它們的主要區別是總線空閑時 SCK 的時鐘狀態以及數據采樣時刻。
- 時鐘極性 CPOL 是指 SPI 通訊設備處于空閑狀態時,SCK 信號線的電平信號。CPOL=0 時,SCK 在空閑狀態時為低電平,CPOL=1 時,則相反。
- 時鐘相位 CPHA 是指數據的采樣的時刻
- 當 CPHA=0 時,MOSI 或 MISO 數據線上的信號將會在SCK 時鐘線的“奇數邊沿”被采樣。
- 當 CPHA=1 時,數據線在 SCK 的“偶數邊沿”采樣。
由 CPOL 及 CPHA 的不同狀態,SPI 分成了四種模式。實際中采用較多的是“模式 0”與“模式 3”。
22.1.4 擴展 SPI 協議
為了適應更高速率的通訊需求,半導體廠商擴展 SPI 協議,主要發展出了 Dual/Quad/Octal SPI 協議,加上標準 SPI 協議(Single SPI),這四種協議的主要區別是數據線的數量及通訊方式
擴展的三種 SPI 協議都是半雙工的通訊方式,也就是說它們的數據線是分時進行收發數據的。
- 雙線 SPI(Dual SPI)的兩根線都具有收發功能,但在同一時刻只能是發送或者是接收
- 四線 SPI(Quad SPI)和八線 SPI(Octal SPI)與雙線 SPI(Dual SPI)類似,只是數據線量的區別。
22.1.5 SDR 和 DDR 模式
SDR 模式(單倍速率 Single Data Rate)和 DDR 模式(雙倍速率 DoubleData Rate)。
- 在標準 SPI 協議的 SDR 模式下,只在 SCK 的單邊沿進行數據傳輸,即一個 SCK時鐘只傳輸一位數據
- 在它 DDR 模式下,會在 SCK 的上升沿和下降沿都進行數據傳輸,即一個 SCK 時鐘能傳輸兩位數據,傳輸速率提高一倍。
22.2 RT1052 的 FlexSPI 特性及架構
RT1052 芯片也集成了專門用于 SPI 協議通訊的外設 FlexSPI、LPSPI
- LPSPI 主要定位于通用的 SPI 通訊
- FlexSPI 外設除了支持 SPI 通訊外還提供了很多與存儲器相關的特性,所以 FlexSPI 外設通常用于與使用 SPI 協議的存儲設備進行通訊。
22.2.1 RT1052 的 FlexSPI 外設簡介
NXP 以 Flex 形容它的 SPI 外設是因為它使用起來非常靈活
- Single/Dual/Quad/Octal 模式的傳輸(即 1/2/4/8 根數據線的傳輸)
- 支持 SDR/DDR 通訊模式
- 在 SDR 模式下,它僅支持 SPI 中的模式 0(CPOL=0,CPHA=0)
- 支持控制 SPI 接口的串行 NOR/NAND Flash 設備、HyperBus 協議設備以及 FPGA 設備。
- 支持讀寫單個串行 FLASH 以及讀寫多個并聯的串行 FLASH 的模式
- 支持把存儲器地址映射至通過 AHB 總線讀寫,即后面說明的 AHB 命令模式。
- 支持使用 DMA 進行訪問,從而減少 CPU 的介入。
- 支持以下多種模式以適配不同的功耗狀態:模塊關閉模式(Module Disable mode)、打盹兒模式(Doze mode)、停止模式(Stop mode)以及正常模式(Normal mode)。
- 最多支持 4 個存儲設備,每個存儲設備最大容量為 4GB,連接多個存儲設備時容量的總和也不能超過 4GB。
22.2.2 RT1052 的 FlexSPI 架構剖析
22.2.2.1 通訊引腳
FlexSPI 外設包含有 A/B 兩組 SPI 通訊接口,每組接口最多可外接 2 個設備,即 A1、A2、B1 和 B2。
RT1052 的 FlexSPI A 組引腳:
這些引腳與外部 SPI Flash 設備的連接的方式
當 FlexSPI 工作于 Octal 模式(八線 SPI)時,它會以 SIOB[3:0] 數據信號線作為高 4 位的數據線,此時僅 A 組可以工作,B 組不能使用。
22.2.2.2 指令查找表 LUT
FlexSPI 外設中包含有一個指令查找表 LUT(Look Up Table),上圖第 ② 部分 SEQ_CTL(序列控制邏輯)的主要內容
- 用來預存儲訪問外部設備時可能使用到的指令
- 對 FLASH 進行訪問時,FlexSPI 會從查找表 LUT 中獲取相應的指令然后通過 SPI 接口對 FLASH 發起通訊。
查找表 LUT 的構成:
- 第 ① 部分是查找表 LUT 視圖,它表示查找表 LUT 有 0~N 個序列;
- 第 ② 部分是序列視圖,它表示 1 個序列中包含有 8 個指令
- 第 ③ 部分是指令視圖,表示指令由 opcode(指令編碼)、num_pads(數據線的數目)、operand(指令參數) 三個寄存器域構成。
這些指令的存儲位置是 FlexSPI 外設中的寄存器 LUT0~LUT63
- 每個 LUT 寄存器可以緩存 2 個指令
- 1 個指令序列(8 個指令)由 4 個寄存器構成
- 這些寄存器構成了一個完整的 LUT 表
LUT寄存器
OPCODE:指令編碼
- 由 FlexSPI 定義的一些基本指令碼
- 向 FLASH 發送控制命令的 CMD_SDR 指令 OPCODE 為 0x01;
- 發送行地址到 FLASH 的指令 OPCODE 為 0x02等
NUM_PADS:進行 SPI 通訊時使用的數據線的數目
-
- 0x0:Single 模式
-
- 0x1:Dual 模式
-
- 0x2:Quad 模式
-
- 0x3:Octal 模式
OPERAND:指令參數
- 部分 OPCODE 指令包含參數,這些參數就由 OPERAND 設定
- 參數的具體作用由相應的 OPCODE 決定。
查找表 LUT 的常用指令
查找表支持兩套有同功能不同模式的指令
- 如 CMD_SDR 和 CMD_DDR 的 OPCODE 為0x01 和 0x21,它們分別表示使用 SDR 模式和 DDR 模式的 CMD 指令,它們的功能一樣,都是向 FLASH 發送命令代碼。
- 其它指令類似,大都有 SDR 和 DDR 模式。
數據線的數目由 NUM_PADS 指定。
- 不同指令可以使用不同的數據線數目。
- 一些 FLASH 存儲器的命令只使用一根數據線(Single 模式)
- 快速讀寫的命令則可支持 Dual、Quad 模式
OPERAND 參數在不同指令下作用不同:
-
對于 CMD_SDR 指令,此時要發送的 FLASH 命令代碼就是 CMD_SDR 指令的參數
- 例如 W25Q256 型號的 FLASH 的讀取 ID 命令代碼為 0xAB,當 RT1052 要讀取FLASH 的 ID 時,利用 CMD_SDR 指令同時把命令代碼 0xAB 賦予到 OPERAND
-
對于 RADDR_SDR 指令,功能是向 FLASH 發送要讀寫的存儲單元地址,該地址由IPCR0 寄存器指定,同時 OPERAND 域用于指定地址的長度。
- 例如部分 FLASH 的空間比較小,只使用 16 位來表示地址,那么該命令的 OPERAND 域的值就應為 16,對于 W25Q256這種地址為 24 或 32 位的存儲器,OPERAND 域的值就應設置為 24 或 32。
-
對于 DUMMY_SDR 指令,它的功能是釋放 FlexSPI 對數據線的控制,在這種情況下可通過 OPERAND 指定該過程要占多少個 SCK的周期數。
數據傳輸指令的數據緩沖區位置分兩種情況。WRITE_SDR 和 READ_SDR 指令分別用于向FLASH 寫入和讀取數據
- 在 AHB 命令模式下:數據緩存在 AHB_TX_BUF(發送緩沖區)以及AHB_RX_BUF(接收緩沖區)中,此時要傳輸的字節數由 AHB 突發傳輸的大小和類型決定。
- 在 IP 命令模式下:數據緩存在 IP_TX_FIFO(發送緩沖區)以及 IP_RX_FIFO(接收緩沖區)中,此時要傳輸的字節數可通過寄存器 IPCR1 的 DATSZ 域指定。
操作通常使用序列的形式并配合 STOP 指令(停止指令)使用
- 以上說明的各個指令通常不會單獨執行,而是組成一個指令序列,對于指令數不滿 8 個的序列,需要使用 STOP 指令表示結束。
如一個使用 IP 命令模式的讀取操作:
-
- 使用 CMD_SDR 指令向發送 FLASH 的讀取命令,如 W25Q256 的 Quad 模式讀取命令編碼為 0x6B,此時 CMD_SDR 指令的 OPERAND 域為 0x6B;
-
- 使用 RADDR_SDR 指令發送要讀取的 FLASH 存儲單元地址,OPERAND 域的值為 24 表示使用 24 位的地址,而地址具體的值由寄存器 IPCR0 設定;
-
- 按照 FLASH 的 Quad 模式讀取命令的要求發送占 8 個 SCK 時鐘的 DUMMY 操作,此時使用 DUMMY_SDR 指令且 OPERAND 域的值設置為 8;
-
- 使用 READ_SDR 指令,開始接收 FLASH 的數據到 IP_RX_FIFO 中,要讀取的字節數由寄存器 IPCR1 的 DATSZ 域指定;
-
- 由于使用的指令不足 8 個字節,在該序列的最后使用 STOP 指令表示停止,當 FlexSPI 執行到 STOP 指令時,會釋放 SPI 的片選信號 CS,結束通訊。
22.2.2.3 命令仲裁器
上圖第 ③ 部分是 ARB_CTL(仲裁器邏輯),它主要用來決定執行哪一套命令。
- 其后有一個AHB_CTL(AHB 命令控制邏輯)和 IP_CTL(IP 命令控制邏輯),它們分別代表了內核對 FlexSPI的兩種控制方式。
- 仲裁器邏輯就是決定它們誰擁有對前面邏輯單元(SEQ_CTL 和 IO_CTL)的控制權。
22.2.2.4 IP 命令控制邏輯
第 ④ 部分 IP_CTL 是 IP 命令控制邏輯,它包含 IP_RX_FIFO 和 IP_TX_FIFO 用來緩沖收發的數據,它們均為 16*64Bits 大小。
- IP_CTL 連接至 32 位的 ARM IP 總線,通過它可以向ARB_CTL(仲裁器邏輯)發送控制命令,從而利用 FlexSPI 訪問外部 SPI 設備
IP 命令的控制流程如下:
- (1) 往 IP_TX_FIFO 填充要傳輸的數據;
- (2) 通過 IPCR0 寄存器設置要寫入的 FLASH 內部存儲單元的首地址,要傳輸的數據大小以及要執行的 LUT 命令序列的編號;
- (3) 對寄存器 IPCMD 的 TRG 位置 1 觸發 FlexSPI 訪問;
- (4) 檢查寄存器 INTR 的 IPCMDDONE 位以等待至 FlexSPI 外設執行完該指令;
- (5) 若執行的命令序列有會接收數據,那么接收到的數據會被緩存至 IP_RX_FIFO 中
22.2.2.5 AHB 命令控制邏輯
第⑤部分AHB_CTL是AHB命令控制邏輯
- 它包含有128×64Bits大小的AHB_RX_BUF和 8×64Bits 大小的 AHB_TX_BUF 用來緩沖收發的數據
- AHB_CTL 連接至 64 位的 AHBP 總線,通過它可以向 ARB_CTL(仲裁器邏輯)發送控制命令,從而 FlexSPI 訪問外部 SPI 設備。
使用 AHB 命令的方式是直接訪問 RT1052 內部的 0x600 0000-0x1000 0000 地址
- 這些地址的讀寫訪問會觸發 FlexSPI 產生 SPI 控制時序,然后對連接的 FLASH 內部存儲單元進行讀寫,這種功能稱為地址映射。
例如
- 把外部 NOR Flash 存儲器的內部地址 0x0 映射到 RT1052 的 0x60000000 地址
- 初始化好FlexSPI 后,我們直接使用指針讀取 RT1052 的 0x60000000 地址
- 自動觸發 FlexSPI外設訪問外部的 NOR Flash 存儲器的 0x0 地址獲得數據
- 訪問時它會自動使用 AHB_RX_BUF 及AHB_TX_BUF 緩沖數據。
AHB 命令僅支持對 FLASH 存儲單元的讀寫訪問,對 FLASH 存儲器的工作模式或狀態寄存器的讀取需要使用 IP 命令實現。
22.2.2.6 驅動時鐘
FlexSPI 外設的驅動時鐘,它的 SCK 線的時鐘信號是由 ipg_clk_sfck 提供的,即 FlexSPI 根時鐘 FLEXSPI_CLK_ROOT
FlexSPI 根時鐘有 4 個可選輸入來源:
- semc_clk_root_pre:這是未經過 SEMC“時鐘門”的 SEMC 根時鐘 SEMC_CLK_ROOT
- 如果選擇本輸入源的話,不打開 SEMC 的時鐘門它也是可以正常輸入到 FlexSPI 的。
- pll3_sw_clk:該時鐘來源即為 PLL3,常規配置為 480MHz。
- PLL2 PFD2:該時鐘常規配置為 396MHz。
- PLL3 PFD0:該時鐘常規配置為 720MHz。
選擇的時鐘源經過 FlexSPI 的時鐘門之后,還有一個 3 位的分頻器,它可對時鐘源進行 1~8 分頻,分頻后得到 FlexSPI 根時鐘 FLEXSPI_CLK_ROOT。
22.3 FlexSPI 初始化配置結構體
FlexSPI 的初始化結構體及函數定義在庫文件“fsl_flexspi.h”及“fsl_flexspi.c”中
/*! @brief FLEXSPI 初始化配置結構體 */typedef struct _flexspi_config {/*!< 選擇讀取 FLASH 使用的采樣時鐘源 */flexspi_read_sample_clock_t rxSampleClock;/*!< 是否使能 SCK 自由運行輸出 */bool enableSckFreeRunning;/*!< 是否使能 PORT A 和 PORT B 的數據引腳組合 (SIOA[3:0] 和 SIOB[3:0]) 以支持FLASH 的 8 位模式 */bool enableCombination;/*!< 是否使能 doze 模式 */bool enableDoze;/*!< 是否使能 為半速率命令而對時鐘 2 分頻 的功能 */bool enableHalfSpeedAccess;/*!< 是否使能 SCKB 用作 SCKA 的差分時鐘,當使能時, PORT B 的 FLASH 無法訪問 */bool enableSckBDiffOpt;/*!< 是否使能對所有連接的設備使用同樣的配置,當使能時,FLSHA1CRx 寄存器的配置會應用到所有設備 */bool enableSameConfigForAll;/*!< 命令序列執行的等待超時周期, ahbGrantTimeoutCyle*1024 個串行根時鐘周期后超時 */uint16_t seqTimeoutCycle;/*!< IP 命令授予等待超時周期, ipGrantTimeoutCycle*1024 個 AHB 時鐘周期后超時 */uint8_t ipGrantTimeoutCycle;/*!< FLEXSPI IP 發送水印值 */uint8_t txWatermark;/*!< FLEXSPI 接收水印值 */uint8_t rxWatermark;struct {/*!< 使能 AHB 總線對 IP TX FIFO 的寫訪問 */bool enableAHBWriteIpTxFifo;/*!< 使能 AHB 總線對 IP RX FIFO 的寫訪問 */bool enableAHBWriteIpRxFifo;/*!< AHB 命令授予等待超時周期,在 ahbGrantTimeoutCyle*1024 個 AHB 時鐘周期后超時 */uint8_t ahbGrantTimeoutCycle;/*!< AHB 讀寫訪問超時周期, ahbBusTimeoutCycle*1024 個 AHB 時鐘后超時 */uint16_t ahbBusTimeoutCycle;/*!< 在暫停命令序列恢復之前空閑狀態的等待周期, ahbBusTimeoutCycle 個 AHB時鐘后超時 */uint8_t resumeWaitCycle;/*!< AHB 緩沖區信息 */flexspi_ahbBuffer_config_t buffer[FSL_FEATURE_FLEXSPI_AHB_BUFFER_COUNT];/*!< 是否使能當 FLEXSPI 返回停止模式響應時自動清除 AHB RX 和 TX 緩沖 */bool enableClearAHBBufferOpt;/*!< 是否使能 AHB 預讀取特性,當使能時, FLEXSPI 會讀取比當前 AHB 突發讀取更多的數據 */bool enableAHBPrefetch;/*!< 是否使能 AHB 緩沖寫訪問的功能,當使能時, FLEXSPI 會在等待命令執行完成前就返回 */bool enableAHBBufferable;/*!< 是否使能 AHB 總線緩沖讀訪問的功能 */bool enableAHBCachable;} ahbConfig;} flexspi_config_t;
rxSampleClock
- 寄存器位 MCR0[RXCLKSRC],本成員用于配置讀取 FLASH 使用的采樣時鐘源,它是一個枚舉類型變量
/*! @brief 選擇給讀取 FLASH 使用的 FlexSPI 采樣時鐘源 */typedef enum _flexspi_read_sample_clock {/*!< 偽讀選通脈沖由 FlexSPI 控制器產生并在內部回環 */kFLEXSPI_ReadSampleClkLoopbackInternally = 0x0U,/*!< 偽讀選通脈沖由 FlexSPI 控制器產生并從 DQS 引腳回環 */kFLEXSPI_ReadSampleClkLoopbackFromDqsPad = 0x1U,/*!< 使用 SCK 輸出時鐘以并從 SCK 引腳回環 */kFLEXSPI_ReadSampleClkLoopbackFromSckPad = 0x2U,/*!< Flash 提供讀選通脈沖并從 DQS 引腳輸入 */kFLEXSPI_ReadSampleClkExternalInputFromDqsPad = 0x3U,} flexspi_read_sample_clock_t;
enableSckFreeRunning
- 寄存器位 MCR0[SCKFREERUNEN],本成員用于配置是否使能 SCK 的輸出自由運行(free-running)的功能
- 該功能通常應用在與 FPGA 設備相關的應用中,它會以 SCK 作為參考時鐘自己內部 PLL 的輸入。
enableCombination
- 寄存器位 MCR0[COMBINATIONEN],本成員用于配置是否使能圖 22?11 中的PORT A 和 PORT B 組合模式
- 在組合模式中會同時使用 PORTA[3:0] 及 PORTB[3:0] 的數據線,通過這種方式,可以對有 8 根數據信號線的 FLASH 進行讀寫。
enableDoze
- 寄存器位 MCR0[DOZEEN],本成員配置是否使能 Doze 模式
- 使能了 doze 模式后,即使 RT1052 芯片處于低功耗 stop 運行狀態時 FlexSPI 也能正常工作。
enableHalfSpeedAccess
- 寄存器位 MCR0[HSEN],本成員配置是否使能對 SCK 時鐘進行 2 分頻以降低訪問速率。
enableSckBDiffOpt
- 寄存器位 MCR2[SCKBDIFFOPT],本成員配置是否把 SCKB 用作 SCKA 的差分時鐘,使用 2 線差分的形式可以提高抗干擾的能力。
- 不過此時 PORT B 就不能再用于 FLASH 的時鐘信號,也就是無法使用了。
enableSameConfigForAll
- 寄存器位 MCR2[SAMEDEVICEEN],本成員配置是否使能所有連接的設備都用同樣的配置
- 如果使能的話,FLASHA1CRx 寄存器的配置會被應用到所有的設備。
seqTimeoutCycle
- 寄存器位 MCR1[SEQWAIT],本成員設置命令序列執行的等待超時周期
- 設置結果為 seqTimeoutCycle*1024 個 FlexSPI 根時鐘周期后超時,超時后可產生中斷且會忽略 AHB 命令。若本成員設置為 0 則不使用本功能。
ipGrantTimeoutCycle
- 寄存器位 MCR0 [IPGRANTWAIT],本成員配置 IP 命令授予等待超時周期
- 觸發 IP 命令后,若命令仲裁器在 ipGrantTimeoutCycle*1024 個 AHB 時鐘周期后還不允許執行該命令,則可觸發中斷。
- 本功能僅支持調試模式,使用時直接設置為默認值即可,且不能設置為 0!
txWatermark
- 寄存器位 IPTXFCR [TXWMRK],本成員配置 IP 發送的水印值,單位為字節。
- 當IP_TX_FIFO 的空余的程度大于或等于該水印值時,可觸發 IPTXWE 中斷
- 同時也可觸發 DMA 請求從而往 IP_TX_FIFO 填充要傳輸的數據。
rxWatermark
- 寄存器位 IPRXFCR [RXWMRK],本成員配置接收的水印值,單位為字節。
- 當IP_RX_FIFO 接收的數據超過該水印值時,可觸發 IPRXWA 中斷
- 同時也可觸發DMA 請求把數據從 IP_RX_FIFO 轉移出去
在 flexspi_config_t 中的一個 ahbConfig 結構體類型的成員,它主要用于配置 AHB 總線的各項參數:
enableAHBWriteIpTxFifo
- 寄存器位 MCR0 [ATDFEN],配置是否使能 AHB 總線通過映射地址對 IP_TX_FIFO 的寫訪問。
- 0x7F800000-0x11000400
- 使能后,可通過 AHB 總線映射的地址向 IP_TX_FIFO 寫入內容,此時通過 IP 總線寫入 IP_TX_FIFO 的操作會被忽略,但不會出現錯誤標志
- 若不使能,可通過 IP 總線寫入 IP_TX_FIFO,此時通過 AHB 總線的寫入操作會被忽略,且會產生錯誤標志。
enableAHBWriteIpRxFifo
- 寄存器位 MCR0 [ARDFEN],配置是否使能 AHB 總線通過映射地址對 IP_RX_FIFO 的讀訪問。
- 0x7FC00000-0x10000200
- 與 enableAHBWriteIpTxFifo 的類似,用于控制使用 AHB 還是 IP 進行讀操作。
ahbGrantTimeoutCycle
- 寄存器位MCR0[AHBGRANTWAIT],與ipGrantTimeoutCycle成員類似,ahbGrantTimeoutCycle 用于配置 AHB 命令授予等待超時周期
- 觸發 AHB 命令后,若命令仲裁器在在 ahbGrantTimeoutCyle*1024 個 AHB 時鐘周期后還不允許執行該命令,會觸發中斷。
- 注意本功能同樣僅支持調試模式,使用時直接設置為默認值即可,且不能設置為 0
ahbBusTimeoutCycle
- 寄存器位 MCR1 [AHBBUSWAIT],配置 AHB 讀寫訪問超時周期
- 在超過 ahbBus-TimeoutCycle*1024 個 AHB 時鐘周期后,仍沒接收到數據或沒發送出數據則表示訪問超時,觸發時可產生 AHBBUSTIMEOUT 中斷。
resumeWaitCycle
- 寄存器位 MCR2[RESUMEWAIT],配置在暫停命令序列恢復之前,等待空閑狀態的周期
- 等待超過 resumeWaitCycle 個 AHB 時鐘后超時。