天天看點

痞子衡嵌入式: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 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全系列下FlexSPI外設AHB Master ID定義與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.MXRT全系列下FlexSPI外設AHB Master ID定義與AHB RX Buffer指定的異同

  在 i.MXRT5xx 上,Master ID 值也是用 4bit 來表示,但是 AHB master 們被進一步細分成了八類(可與 8 個 AHB RX Buffer 一一對應),如下表所示,主要最後一類 AXI:AHB Bridge 是打包的(包含 GPU、LCDIF 等)。此外這個型号上 FlexSPI0/1 不是完全對等的,是以其各自 Master ID 定義值也不太一樣。

痞子衡嵌入式:i.MXRT全系列下FlexSPI外設AHB Master ID定義與AHB RX Buffer指定的異同

  在 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 上了。

痞子衡嵌入式:i.MXRT全系列下FlexSPI外設AHB Master ID定義與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.MXRT全系列下FlexSPI外設AHB Master ID定義與AHB RX Buffer指定的異同

  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指定的異同

  至此,i.MXRT全系列下FlexSPI外設AHB Master ID定義與AHB RX Buffer指定的異同痞子衡便介紹完畢了,掌聲在哪裡~~~

文章會同時釋出到我的 部落格園首頁、CSDN首頁、知乎首頁、微信公衆号 平台上。

微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。

痞子衡嵌入式:i.MXRT全系列下FlexSPI外設AHB Master ID定義與AHB RX Buffer指定的異同

  最後歡迎關注痞子衡個人微信公衆号【痞子衡嵌入式】,一個專注嵌入式技術的公衆号,跟着痞子衡一起玩轉嵌入式。

痞子衡嵌入式:i.MXRT全系列下FlexSPI外設AHB Master ID定義與AHB RX Buffer指定的異同
痞子衡嵌入式:i.MXRT全系列下FlexSPI外設AHB Master ID定義與AHB RX Buffer指定的異同
痞子衡嵌入式:i.MXRT全系列下FlexSPI外設AHB Master ID定義與AHB RX Buffer指定的異同

  衡傑(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。

  專欄内所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/

  與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]

  可以關注痞子衡的Github首頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。

  關于專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回複免費(劃重點)答疑。

  痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。