大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是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 RX Buffer 占據全部 RX Buffer 空間且僅服務單個 AHB Master - CPU,而實際項目中可能有多個 AHB Master 會對 Flash 進行 AHB 讀通路,這就引申出了今天的主題:
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
i.MXRT102x
i.MXRT105x
i.MXRT106x
2
i.MXRT116x
8
2KB
i.MXRT117x
i.MXRT5xx
FlexSPI0: 1KB
FlexSPI1: 2KB
i.MXRT6xx
多個 AHB RX Buffer 帶來的好處是顯而易見的,相比于單個 AHB RX Buffer,其能有效避免因不同 AHB master 頻繁交替通路 Flash 導緻 AHB RX Buffer 被不斷清除與重新緩存的低效情況發生。
在 i.MXRT10xx 上,AHB master 們被分成了如下表中的四類(正好可配置設定到 4 個 AHB RX Buffer 上),除了 Core、eDMA、DCP 外,其餘 Master 被直接打包在一起了(無法拆分)。Master ID 值用 4bit 來表示。
在 i.MXRT5xx 上,Master ID 值也是用 4bit 來表示,但是 AHB master 們被進一步細分成了八類(可與 8 個 AHB RX Buffer 一一對應),如下表所示,主要最後一類 AXI:AHB Bridge 是打包的(包含 GPU、LCDIF 等)。此外這個型号上 FlexSPI0/1 不是完全對等的,是以其各自 Master ID 定義值也不太一樣。
在 i.MXRT6xx 上,Master ID 定義在 Rev1.4 版本的使用者手冊上并沒有找到,需要等文檔更新,盲猜跟 i.MXRT5xx FlexSPI1下的定義差不多,不過 i.MXRT6xx 上并沒有 SmartDMA 外設,是以還需考證。
在 i.MXRT11xx 上,Master ID 值是用 16bit 來表示的,并且 AHB master 們都有自己專屬的 ID 定義,沒有任何原生打包現象,如下表所示。這個系列是全新架構,它在 ID 設計上新引入了 Remap 技術,這種 Remap 技術允許使用者将多個 Master 打包在一起,進而指定到同一個 AHB RX Buffer 上。這樣 17 個 Master 就可以指定到 8 個 AHB RX Buffer 上了。
要想正常使用 AHB RX Buffer,必須保證 FlexSPI 外設的 Prefetch 功能是開啟的,即僅當如下寄存器中的 PREFETCHEN 位被使能才行。每個 AHB RX Buffer 都有獨立的配置寄存器(AHBRXBUFxCR0)。
i.MXRT5xx/6xx/10xx 中 Master ID 是用 4 bit 來表示的,它們的 AHB RX Buffer 指定在 FlexSPI->AHBRXBUFxCR0[MSTRID] 中。
i.MXRT11xx 中 Master ID 是用 16 bit 來表示的,是以 FlexSPI->AHBRXBUFxCR0[MSTRID] 位其實是無效的(即 Reserved 狀态),它們的 AHB RX Buffer 指定應在如下 FlexSPI->HMSTRxCR 寄存器中,不過首先得要使能 Master ID Remap 功能(HMSTRIDREMAP = 1,這個 bit 建議不要設為 0)。
至此,i.MXRT全系列下FlexSPI外設AHB Master ID定義與AHB RX Buffer指定的異同痞子衡便介紹完畢了,掌聲在哪裡~~~
文章會同時釋出到我的 部落格園首頁、CSDN首頁、知乎首頁、微信公衆号 平台上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。
最後歡迎關注痞子衡個人微信公衆号【痞子衡嵌入式】,一個專注嵌入式技術的公衆号,跟着痞子衡一起玩轉嵌入式。
衡傑(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。
專欄内所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]
可以關注痞子衡的Github首頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關于專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回複免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。