22 FlexSPI—讀寫外部 SPI NorFlash

文章目錄

  • 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 通訊時使用的數據線的數目

    1. 0x0:Single 模式
    1. 0x1:Dual 模式
    1. 0x2:Quad 模式
    1. 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 命令模式的讀取操作:

    1. 使用 CMD_SDR 指令向發送 FLASH 的讀取命令,如 W25Q256 的 Quad 模式讀取命令編碼為 0x6B,此時 CMD_SDR 指令的 OPERAND 域為 0x6B;
    1. 使用 RADDR_SDR 指令發送要讀取的 FLASH 存儲單元地址,OPERAND 域的值為 24 表示使用 24 位的地址,而地址具體的值由寄存器 IPCR0 設定;
    1. 按照 FLASH 的 Quad 模式讀取命令的要求發送占 8 個 SCK 時鐘的 DUMMY 操作,此時使用 DUMMY_SDR 指令且 OPERAND 域的值設置為 8;
    1. 使用 READ_SDR 指令,開始接收 FLASH 的數據到 IP_RX_FIFO 中,要讀取的字節數由寄存器 IPCR1 的 DATSZ 域指定;
    1. 由于使用的指令不足 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 時鐘后超時。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210498.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210498.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210498.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何將html網頁免費轉為excel?

一、直接復制。 直接復制是最簡單有效、快捷的解決方案&#xff0c;操作方法如下&#xff1a; 1、用鼠標像平常復制文本一樣&#xff0c;將整個網頁表格選中。 2、點擊右鍵&#xff0c;點擊“復制”。 3、打開excel軟件&#xff0c;鼠標點擊任意單元格。 4、點擊右鍵&#…

Power BI - 5分鐘學習拆分列

每天5分鐘&#xff0c;今天介紹Power BI拆分列功能。 什么是拆分列&#xff1f; 有時導入Power BI的數據表中&#xff0c;某列內容都包含同樣的特殊字符如 /&/-/_等&#xff0c;可以利用這個特殊字符進行拆分列的操作&#xff0c;獲得我們想要的信息。 操作舉例&#xf…

【從編譯器的角度看多態的底層實現原理】

系列文章目錄 歡迎讀者訂閱《計算機底層原理》、《從JVM看Java》系列文章、能夠幫助到大家就是對我最大的鼓勵&#xff01; 文章目錄 目錄 系列文章目錄 文章目錄 前言 一、編譯器做了什么&#xff1f; 1.詞法分析 2.語法分析 3.語義分析 4.中間代碼生成 5.優化 6.目標代碼生成…

SugarCRM 任意文件上傳漏洞復現(CVE-2023-22952)

0x01 產品簡介 SugarCRM是美國SugarCRM公司的一套開源的客戶關系管理系統(CRM)。該系統支持對不同的客戶需求進行差異化營銷、管理和分配銷售線索,實現銷售代表的信息共享和追蹤。 0x02 漏洞概述 SugarCRM index.php接口存在安全漏洞,該漏洞源于安裝組件中存在授權繞過和P…

在線人數(oj題)

題目不少于5個字&#xff0c;所以整了個括號湊字數 首先我想到的是用一個數組來記錄每一秒的在線人數 但是即使是short類型&#xff08;2字節&#xff09;&#xff0c;也會用到60 * 60 * 24 * 30 * 12 * 60 * 2 / 1024 / 1024 3,559.5703125 MB 而題目上限是256MB&#xff0…

UE小:UE5性能分析

開始錄制性能追蹤 要開始錄制性能追蹤&#xff0c;您可以簡單地點擊界面上的“開始錄制”按鈕。 查看追蹤數據 錄制完成后&#xff0c;點擊“Trace”菜單中的“UnrealInsights”選項來查看追蹤數據。 使用命令行進行追蹤 如果點擊錄制按鈕沒有反應&#xff0c;您可以通過命令…

【頭歌系統數據庫實驗】實驗4 MySQL單表查詢

目錄 第1關. 在users表中新增一個用戶&#xff0c;user_id為2019100904學號&#xff0c;name為2019-物聯網-李明 第2關. 在users表中更新用戶 user_id為robot_2 的信息&#xff0c;name設為 機器人二號 第3關. 將solution表中所有 problem_id 為1003 題目的解答結果&#xf…

python源碼,在線讀取傳奇列表,并解析為需要的JSON格式

python源碼&#xff0c;在線讀取傳奇列表&#xff0c;并解析為需要的JSON格式 [Server] ; 使用“/”字符分開顏色&#xff0c;也可以不使用顏色&#xff0c;支持以前的舊格式&#xff0c;只有標題和服務器標題支持顏色 ; 標題/顏色代碼(0-255)|服務器標題/顏色代碼(0-255)|服務…

使用醫學數據集MIMIC,常見的問題記錄

目錄 MIMIC數據庫安裝及數據導入教程1.postgresql安裝第一步&#xff1a;error running考慮到是不是不同的sql的沖突從報錯信息出發重啟之后可以安裝了 2.打開navicate153.7z 不是內部或外部命令&#xff0c;也不是可運行的程序4.在postgreSQL中輸入**\i xxx**命令后遇到提示pe…

2023年9月26日 Go生態洞察:深入解析類型參數

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

2023第十二屆“認證杯”D題:CMOS黃昏系數|數學中國數學建模國際賽(小美賽)| 建模秘籍文章代碼思路大全

鐺鐺&#xff01;小秘籍來咯&#xff01; 小秘籍希望大家都能輕松建模呀&#xff0c;數維杯也會持續給大家放送思路滴~ 抓緊小秘籍&#xff0c;我們出發吧~ 來看看認證杯&#xff08;D題&#xff09;&#xff01; 完整內容可以在文章末尾領取&#xff01; 問題重述&#x…

【小紅書運營指南1】賽道選擇 + 賬號運營全周期

小紅書運營指南1 寫在最前面11.23標簽一級標簽二級標簽 網絡資源整理1. 賽道選擇近2年小紅書女性人群畫像 2. 基礎認知階段3. 賬號啟動階段4. 選題規劃階段5. 爆款打造階段6. 漲粉變現階段漲粉變現階段粉絲發展階段 寫在最前面 最近做的一個項目調研&#xff0c;調研和實際有一…

每日移到算法題 1

借鑒文章&#xff1a;Java-敏感字段加密 - 嗶哩嗶哩 題目描述 給定一個由多個命令字組成的命令字符串&#xff1b; 1、字符串長度小于等于127字節&#xff0c;只包含大小寫字母&#xff0c;數字&#xff0c;下劃線和偶數個雙引號 2、命令字之間以一個或多個下劃線_進行分割…

設計模式-工廠模式(Factory)

Factory模式是一種創建型設計模式&#xff0c;用于封裝對象的實例化過程。它提供了一個統一的接口來創建不同類型的對象&#xff0c;而無需暴露具體的實例化邏輯給客戶端。 #include <iostream> #include <memory>// AbstractProduct&#xff08;抽象產品類&#…

mybatis-plus處理blob字段

轉載自&#xff1a;www.javaman.cn 在 Spring Boot 項目中使用 MyBatis-Plus 處理 longblob 字段時&#xff0c;我們可以按照以下步驟進行操作。假設 longblob 存儲的是字符串數據。以下是完整的示例代碼&#xff1a; 添加依賴&#xff1a;在你的項目的 pom.xml 文件中添加 My…

js判斷上傳的文件是GBK編碼還是UTF-8

1、獲取文件二進制數據&#xff0c;這里只做示例&#xff0c;例如element-ui中文件上傳的beforeUpload方法&#xff0c;返回的file對象&#xff0c;然后使用FileReader對其進行轉換&#xff0c;再進行后續判斷 function beforeUpload(file: File) { const reader new FileRea…

Linux基本指令(超詳版)

Linux基本指令&#xff08;超詳版&#xff09; 1. ls指令2.pwd指令3. cd 指令4.touch指令5mkdir指令6.rmdir指令&&rm指令7.man指令7.cp指令8.mv指令9.echo指令10.cat指令11.more指令12.less指令13.head指令14.tail指令15.date指令16.find指令17.grep指令zip(打包壓縮) …

JVM類加載器ClassLoader的源碼分析

1、ClassLoader與現有類加載器的關系 ClassLoader與現有類加載器的關系&#xff1a; ClassLoader是一個抽象類。如果我們給定了一個類的二進制名稱&#xff0c;類加載器應嘗試去定位或生成構成定義類的數據。一種典型的策略是將給定的二進制名稱轉換為文件名&#xff0c;然后去…

C語言--實現一個函數把一個整數轉為它對應的十六進制的字符串

一.題目描述 實現一個函數把一個整數轉為它對應的十六進制的字符串。 比如&#xff1a;輸入數字1234 輸出&#xff1a;4D2 二.思路分析 用一個sprintf函數可以解決問題&#xff0c;輸出相對應的字符串 要注意的問題就是&#xff1a;函數結束后要繼續使用的內存&#xff08;比如…

Carla自動駕駛仿真六:pygame多個車輛攝像頭畫面拼接

此文章主要介紹carla前后左右攝像頭畫面拼接到pygame上 文章目錄 前言一、要點分析二、完整代碼三、拼接效果四、總結 前言 1、使用carla做仿真測試或者開發時&#xff0c;如果能夠將車輛周邊的畫面拼接并渲染&#xff0c;可以直觀地查看周圍地環境&#xff0c;便于調試。本文…