痞子衡嵌入式:i.MXRT全系列下FlexSPI外設AHB Master ID定義與AHB RX Buffer指定的異同
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT全系列下FlexSPI外設AHB Master ID定義與AHB RX Buffer指定的異同。
因為 i.MXRT 全系列型號都不含內部 Flash(部分 SIP 版本除外),因此用於連線外部 NOR Flash 的 FlexSPI 外設格外受寵。為了提高程式碼在 Flash 的原地執行效率,恩智浦設計團隊為 FlexSPI 賦予了 Prefetch 特性用來加速訪問效率(用 AHB RX Buffer 快取資料)。
痞子衡之前寫過一篇關於 Prefetch 效果的實測文章 《FlexSPI外設下AHB讀訪問情形(有預取)》
一、AHB Master與AHB RX Buffer
i.MXRT 系列上 AHB master 包含 Core、DMA、加密模組等多達 16 個,這些 Master 都有能力對 Flash 主動發起 AHB 讀訪問。為了更好地服務這些 Master,FlexSPI 上用於存放預取資料的 AHB RX Buffer 不止一個,一般有 4/8 個,使用者可以按需自由分配這些 AHB RX Buffer 的大小(總大小是一定的,一般是 1/2KB),並且可以將某個 AHB RX Buffer 指定給具體的 Master 來獨佔使用。
- Note: i.MXRT 系列上不支援將多個 AHB RX Buffer 分配給同一個 AHB master,這種需求實際上可以通過配置不同的 AHB RX Buffer 大小來實現。
下面是 i.MXRT 全系列型號上 AHB RX Buffer 情況總結:
i.MXRT型號 | FlexSPI外設個數 | 單FlexSPI上AHB RX Buffer個數 | 單FlexSPI上AHB RX Buffer總大小 |
---|---|---|---|
i.MXRT1011 | 1 | 4 | 1KB |
i.MXRT1015 | 1 | 4 | 1KB |
i.MXRT102x | 1 | 4 | 1KB |
i.MXRT105x | 1 | 4 | 1KB |
i.MXRT106x | 2 | 4 | 1KB |
i.MXRT116x | 2 | 8 | 2KB |
i.MXRT117x | 2 | 8 | 2KB |
i.MXRT5xx | 2 | 8 | FlexSPI0: 1KB FlexSPI1: 2KB |
i.MXRT6xx | 1 | 8 | 2KB |
多個 AHB RX Buffer 帶來的好處是顯而易見的,相比於單個 AHB RX Buffer,其能有效避免因不同 AHB master 頻繁交替訪問 Flash 導致 AHB RX Buffer 被不斷清除與重新快取的低效情況發生。
二、AHB Master ID定義
2.1 i.MXRT10xx
在 i.MXRT10xx 上,AHB master 們被分成了如下表中的四類(正好可分配到 4 個 AHB RX Buffer 上),除了 Core、eDMA、DCP 外,其餘 Master 被直接打包在一起了(無法拆分)。Master ID 值用 4bit 來表示。
2.2 i.MXRT5xx/6xx
在 i.MXRT5xx 上,Master ID 值也是用 4bit 來表示,但是 AHB master 們被進一步細分成了八類(可與 8 個 AHB RX Buffer 一一對應),如下表所示,其實主要最後一類 AXI:AHB Bridge 是打包的。此外這個型號上 FlexSPI0/1 不是完全對等的,所以其各自 Master ID 定義值也不太一樣。
在 i.MXRT6xx 上,Master ID 定義與上表中 FlexSPI1 下的定義一致。
2.3 i.MXRT11xx
在 i.MXRT11xx 上,Master ID 值是用 16bit 來表示的,並且 AHB master 們都有自己專屬的 ID 定義,沒有任何原生打包現象,如下表所示。這個系列是全新架構,它在 ID 設計上新引入了 Remap 技術,這種 Remap 技術允許使用者將多個 Master 打包在一起,從而指定到同一個 AHB RX Buffer 上。這樣 17 個 Master 就可以指定到 8 個 AHB RX Buffer 上了。
三、AHB RX Buffer指定
要想正常使用 AHB RX Buffer,必須保證 FlexSPI 外設的 Prefetch 功能是開啟的,即僅當如下暫存器中的 PREFETCHEN 位被使能才行。每個 AHB RX Buffer 都有獨立的配置暫存器(AHBRXBUFxCR0)。
FlexSPI->AHBCR[PREFETCHEN],總 Prefetch 開關
FlexSPI->AHBRXBUFxCR0[PREFETCHEN],單個 AHB RX Buffer 開關
3.1 i.MXRT5xx/6xx/10xx
i.MXRT5xx/6xx/10xx 中 Master ID 是用 4 bit 來表示的,它們的 AHB RX Buffer 指定在 FlexSPI->AHBRXBUFxCR0[MSTRID] 中。
3.2 i.MXRT11xx
i.MXRT11xx 中 Master ID 是用 16 bit 來表示的,因此 FlexSPI->AHBRXBUFxCR0[MSTRID] 位其實是無效的(即 Reserved 狀態),它們的 AHB RX Buffer 指定應在如下 FlexSPI->HMSTRxCR 暫存器中,不過首先得要使能 Master ID Remap 功能(HMSTRIDREMAP = 1,這個 bit 建議不要設為 0)。
FlexSPI->AHBCR[HMSTRIDREMAP],總 Master ID Remap 開關
至此,i.MXRT全系列下FlexSPI外設AHB Master ID定義與AHB RX Buffer指定的異同痞子衡便介紹完畢了,掌聲在哪裡~~~
歡迎訂閱
文章會同時釋出到我的 部落格園主頁、CSDN主頁、知乎主頁、微信公眾號 平臺上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。
最後歡迎關注痞子衡個人微信公眾號【痞子衡嵌入式】,一個專注嵌入式技術的公眾號,跟著痞子衡一起玩轉嵌入式。
衡傑(痞子衡),目前就職於恩智浦MCU系統部門,擔任嵌入式系統應用工程師。
專欄內所有文章的轉載請註明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或諮詢業務合作請發郵件至 [email protected]
可以關注痞子衡的Github主頁 https://github.com/JayHeng,有很多好玩的嵌入式專案。
關於專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回覆免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。