加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

FlexSPI外設(shè)是如何實(shí)現(xiàn)多個(gè)AHB Master和諧訪問Flash的?

2021/10/14
532
閱讀需 8 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

今天痞子衡給大家介紹的是i.MXRT全系列下FlexSPI外設(shè)AHB Master ID定義與AHB RX Buffer指定的異同。

因?yàn)?i.MXRT 全系列型號(hào)都不含內(nèi)部 Flash(部分 SIP 版本除外),因此用于連接外部 NOR Flash 的 FlexSPI 外設(shè)格外受寵。為了提高代碼在 Flash 的原地執(zhí)行效率,恩智浦設(shè)計(jì)團(tuán)隊(duì)為 FlexSPI 賦予了 Prefetch 特性用來加速訪問效率(用 AHB RX Buffer 緩存數(shù)據(jù))。

痞子衡之前寫過一篇關(guān)于 Prefetch 效果的實(shí)測(cè)文章 《FlexSPI外設(shè)下AHB讀訪問情形(有預(yù)?。?,那篇文章里只涉及了最簡(jiǎn)單的應(yīng)用場(chǎng)景,即單個(gè) AHB RX Buffer 占據(jù)全部 RX Buffer 空間且僅服務(wù)單個(gè) AHB Master - CPU,而實(shí)際項(xiàng)目中可能有多個(gè) AHB Master 會(huì)對(duì) Flash 進(jìn)行 AHB 讀訪問,這就引申出了今天的主題:

一、AHB Master與AHB RX Buffer

i.MXRT 系列上 AHB master 包含 Core、DMA、加密模塊等多達(dá) 16 個(gè),這些 Master 都有能力對(duì) Flash 主動(dòng)發(fā)起 AHB 讀訪問。為了更好地服務(wù)這些 Master,F(xiàn)lexSPI 上用于存放預(yù)取數(shù)據(jù)的 AHB RX Buffer 不止一個(gè),一般有 4/8 個(gè),用戶可以按需自由分配這些 AHB RX Buffer 的大小(總大小是一定的,一般是 1/2KB),并且可以將某個(gè) AHB RX Buffer 指定給具體的 Master 來獨(dú)占使用。

  • Note: i.MXRT 系列上不支持將多個(gè) AHB RX Buffer 分配給同一個(gè) AHB master,這種需求實(shí)際上可以通過配置不同的 AHB RX Buffer 大小來實(shí)現(xiàn)。

下面是 i.MXRT 全系列型號(hào)上 AHB RX Buffer 情況總結(jié):

i.MXRT型號(hào) FlexSPI外設(shè)個(gè)數(shù) 單FlexSPI上AHB RX Buffer個(gè)數(shù) 單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

多個(gè) AHB RX Buffer 帶來的好處是顯而易見的,相比于單個(gè) AHB RX Buffer,其能有效避免因不同 AHB master 頻繁交替訪問 Flash 導(dǎo)致 AHB RX Buffer 被不斷清除與重新緩存的低效情況發(fā)生。

二、AHB Master ID定義

2.1 i.MXRT10xx

在 i.MXRT10xx 上,AHB master 們被分成了如下表中的四類(正好可分配到 4 個(gè) AHB RX Buffer 上),除了 Core、eDMA、DCP 外,其余 Master 被直接打包在一起了(無法拆分)。Master ID 值用 4bit 來表示。

 

2.2 i.MXRT5xx/6xx

在 i.MXRT5xx 上,Master ID 值也是用 4bit 來表示,但是 AHB master 們被進(jìn)一步細(xì)分成了八類(可與 8 個(gè) AHB RX Buffer 一一對(duì)應(yīng)),如下表所示,其實(shí)主要最后一類 AXI:AHB Bridge 是打包的。此外這個(gè)型號(hào)上 FlexSPI0/1 不是完全對(duì)等的,所以其各自 Master ID 定義值也不太一樣。

 

在 i.MXRT6xx 上,Master ID 定義與上表中 FlexSPI1 下的定義一致。

2.3 i.MXRT11xx

在 i.MXRT11xx 上,Master ID 值是用 16bit 來表示的,并且 AHB master 們都有自己專屬的 ID 定義,沒有任何原生打包現(xiàn)象,如下表所示。這個(gè)系列是全新架構(gòu),它在 ID 設(shè)計(jì)上新引入了 Remap 技術(shù),這種 Remap 技術(shù)允許用戶將多個(gè) Master 打包在一起,從而指定到同一個(gè) AHB RX Buffer 上。這樣 17 個(gè) Master 就可以指定到 8 個(gè) AHB RX Buffer 上了。

 

三、AHB RX Buffer指定

要想正常使用 AHB RX Buffer,必須保證 FlexSPI 外設(shè)的 Prefetch 功能是開啟的,即僅當(dāng)如下寄存器中的 PREFETCHEN 位被使能才行。每個(gè) AHB RX Buffer 都有獨(dú)立的配置寄存器(AHBRXBUFxCR0)。

FlexSPI->AHBCR[PREFETCHEN],總 Prefetch 開關(guān)

FlexSPI->AHBRXBUFxCR0[PREFETCHEN],單個(gè) AHB RX Buffer 開關(guān)

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] 位其實(shí)是無效的(即 Reserved 狀態(tài)),它們的 AHB RX Buffer 指定應(yīng)在如下 FlexSPI->HMSTRxCR 寄存器中,不過首先得要使能 Master ID Remap 功能(HMSTRIDREMAP = 1,這個(gè) bit 建議不要設(shè)為 0)。

FlexSPI->AHBCR[HMSTRIDREMAP],總 Master ID Remap 開關(guān)

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

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

碩士畢業(yè)于蘇州大學(xué)電子信息學(xué)院,目前就職于恩智浦(NXP)半導(dǎo)體MCU系統(tǒng)部門,擔(dān)任嵌入式系統(tǒng)應(yīng)用工程師。痞子衡會(huì)定期分享嵌入式相關(guān)文章