痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU啟動那些事(11.1)- FlexSPI NOR連接方式大全(RT1015/1020/1050)

来源:https://www.cnblogs.com/henjay724/archive/2020/02/28/12375942.html
-Advertisement-
Play Games

i.MXRT1050/1020/1015是i.MXRT系列MCU家族比較早亮相的型號,也是客戶當前使用較多的i.MXRT晶元。它們三兄弟內部均只有一個雙通道8bit的FlexSPI模塊,在FlexSPI NOR啟動連接方式支持上是相似的。今天痞子衡就來跟大家好好聊一聊到底哪些FlexSPI NOR連... ...



  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1015/1020/1050三款MCU的FlexSPI NOR啟動的連接方式

  由於i.MXRT內部沒有非易失性存儲器,因此在系統設計時為i.MXRT搭配一塊存放應用程式代碼的存儲器是頭等大事。i.MXRT支持啟動的外部存儲器類型眾多,其中通過FlexSPI介面連接串列NOR Flash是首選。
  就i.MXRT晶元引腳本身來說,其FlexSPI模塊支持的Pinmux選擇較多,這在晶元參考手冊Chip IO一章可以找到具體信息。但是並不是所有FlexSPI Pinmux組合都能被用來連接串列NOR Flash去啟動。
  i.MXRT1050/1020/1015是i.MXRT系列MCU家族比較早亮相的型號,也是客戶當前使用較多的i.MXRT晶元。它們三兄弟內部均只有一個雙通道8bit的FlexSPI模塊,在FlexSPI NOR啟動連接方式支持上是相似的。今天痞子衡就來跟大家好好聊一聊到底哪些FlexSPI NOR連接方式是可以用作啟動的。

一、涉及FlexSPI引腳

  提及啟動,就不得不提i.MXRT晶元內部BootROM,BootROM是固化在晶元內部ROM空間的一段代碼,晶元上電永遠是BootROM先運行,由BootROM從外部存儲器去載入應用程式執行。因此FlexSPI NOR連接方式其實是由BootROM決定的,更直白點說,其實FlexSPI NOR連接方式是寫死在BootROM代碼里。

1.1 BootROM指定

  我們可以在晶元參考手冊System Boot這一章節找到BootROM指定的FlexSPI NOR引腳,痞子衡整理如下:

  下表適用於i.MXRT105x(適用全系列封裝):

  下表適用於i.MXRT102x和i.MXRT1015(對於LQFP144封裝,所有引腳均適用。對於LQFP100封裝,只有1st Option里ALT為1的12根線可用):

  上面的表格基本上已經給我們指明瞭方向,目前我們知道了哪些Pin可以用作FlexSPI NOR啟動連接,但是似乎還是有一些不清楚的地方:

疑問1:1st Option里一共有4根片選信號(SSx)和2根DQS信號,而Flash只需要一個片選和一個DQS,是不是所有片選+DQS組合都可以?
疑問2:1st Option里一共8根數據線,除了連接八線Octal/Hyper Flash之外,是否可以單連四線QSPI Flash?PortA和PortB是不是都可以連QSPI Flash?
疑問3:是否可以從1st和2nd Option里分別挑選信號線和數據線來連接Flash?比如1st Option里的PortA_DATA[1:0]和2nd Option里的PORTA_DATA[3:2]組成四線。
疑問4:那根FlexSPI Reset信號對於1st和2nd Option是不是都適用?
疑問5:是否可以掛兩片QSPI Flash啟動?具體怎麼掛?兩片Flash能否實現在一片Flash中執行代碼去擦寫另一片Flash?
疑問6:2nd Option里只有PortA和一根片選,但RT1050 Pinmux表裡其也支持PortB和其他片選,那些信號線後續是否可以利用?

  在後面的內容里,痞子衡會逐一為大家解析這些疑問。

1.2 BootROM未指定

  在此也列出不在BootROM指定的FlelxSPI NOR引腳,方便後續設計雙Flash時參考。

  下表適用於i.MXRT105x(適用全系列封裝):

  下表適用於i.MXRT102x和i.MXRT1015(適用全系列封裝):

二、單Flash連接方式(3種)

  在系統設計時使用一片Flash是最常用的情況,這片Flash負責存放應用程式代碼(即所謂的Code Flash),i.MXRT既可以在Flash中原地執行,也可以將應用程式拷貝到內部RAM中執行。
  相信大家做板級設計一定會參考官方EVK,在RT1050-EVKB中,官方給出瞭如下兩種單Flash的連接方式,這也是最推薦的兩種方式:
  第一種Flash連接方式就是利用FlexSPI 1st Option里的6根PORTA信號線連接四線QSPI Flash,此處需要註意的是片選信號僅能選PORTA_SS0,你可能會疑問PORTA_SS1明明也在BootROM支持列表裡,為何不能用?關於這一點痞子衡會在後面雙Flash連接里為大家解釋。

  第二種Flash連接方式就是利用FlexSPI 1st Option里的7根PORTA信號線和5根PORTB信號線連接八線Octal/Hyper Flash,此處仍需註意的是片選和DQS信號僅能選PORTA_SS0、PORTA_DQS。此種Flash接法還利用了FlexSPI Reset信號。

  第三種Flash連接方式就是利用FlexSPI 2nd Option里的6根PORTA信號線連接四線QSPI Flash,具體接法跟第一種方式很像,但是此處沒有關於片選的疑慮,因為2nd Option只有一個片選。

  介紹完三種單Flash連接方案,現在來解答一些前面列出的疑問。

解答1:1st Option里一共4根片選信號(SSx)和2根DQS信號並不是隨意組合都可以,無論是四線還是八線單Flash連接方案,均只有PORTA_SS0、PORTA_DQS這一種組合可用。其他組合主要用在雙Flash連接方案中。
解答2:1st Option中僅PORTA可以單獨接四線QSPI Flash,不支持PORTB單獨接四線QSPI Flash。
解答3:不支持從1st和2nd Option里分別挑選數據線來連接Flash(不過就FlexSPI模塊本身而言,理論上是支持的,但這麼用的話需要解決數據線信號等長問題,因為這兩個Option的走線長度在晶元內部不一樣,總之不推薦這麼用)。但是支持1st Option里取信號線,2nd Option里取數據線類似這種組合方式來連接Flash。
解答4:FlexSPI Reset信號是與1st、2nd Option無關的,所以兩個Option下均可以用,不過Reset信號常用於八線Flash。

三、雙Flash連接方式(18種)

  很多實際系統設計中,常常有既在Flash中存放用戶應用程式,也在Flash中存放用戶數據的場景,當然我們可以將一片Flash分成Code區和Data區來實現,但更好的方案是選用兩片Flash(一片Code Flash、一片Data Flash)同時掛在FlexSPI上,這樣可以避免數據誤操作,而且最重要的是在擦除或者編程Data Flash的等待期間(這個時間可不短),CPU可以繼續從Code Flash取代碼執行或響應中斷。此處我們暫不討論支持RWW特性的Flash。
  i.MXRT支持掛兩片Flash去啟動,此處僅以兩片四線QSPI Flash為例。下圖給出了多片Flash的連接方式,理論上一個FlexSPI最多可以掛四片Flash,因為最大有4個片選。但僅考慮接兩片Flash的話,1st Option以及2nd Option里所有片選按排列組合來說應該有近30多種組合方式,那麼這30多種組合是不是都可行呢?當然不是!要在這些組合中剔除掉不包含1st A_SS0或者2nd A_SS0的組合。即下圖中標淺綠色的Flash A0在雙Flash組合中是一定要存在的,因為BootROM上電永遠是從Flash A0中獲取FDCB以及啟動代碼頭(IVT, BootData),所以Flash A0就是Code Flash

  分析到了這裡,我們就知道如下符合條件的18種包含Flash A0的組合方式,其中標記Code的片選信號應該連接存放應用程式代碼的Code Flash,標記Data的片選信號則連接存放用戶數據的Data Flash:

Note1:如果兩個Flash掛在同一類型PORT上(都是PORTA或都是PORTB),即下麵的第1、2、3、10、11、12種組合時,這兩片Flash最好是同一個型號,這樣電氣特性容易保持一致。
Note2:如果組合中所有引腳選擇全部在BootROM指定範圍里,那麼BootROM直接支持Data Flash的配置。如果有引腳不在BootROM指定範圍,那麼需要用戶在Code Flash用代碼去實現Data Flash配置。

Num FlexSPI 1st Option FlexSPI 2nd Option
BootROM指定 BootROM未指定 BootROM指定 BootROM未指定
不適用LQFP100 不適用LQFP100 不適用LQFP144/100
A_SS0 A_DATA[3:0]
A_SCLK
B_SCLK B_DATA[3:0] A_SS1 B_SS0 B_SS1 A_SS1 B_SS0 A_SS0 A_DATA[3:0]
A_SCLK
A_SS1 B_DATA[3:0]
1
Code

Data
2
Code

Data
3
Code

Data
4
Code

Data
5
Code

Data
6
Code

Data
7
Code

Data
8
Code

Data
9
Code

Data
10
Data

Code
11
Data

Code
12
Code

Data
13
Data

Code
14
Data

Code
15
Data

Code
16
Data

Code
17
Data

Code
18
Data

Code

  介紹完18種雙Flash連接方案,現在來解答一些前面列出的疑問。

解答5:可以掛兩片QSPI Flash啟動,一共有18種連接方式。兩片Flash的方案還是不可以實現在Code Flash里原地執行代碼去擦寫Data Flash這種用法,但可以實現RWW的核心意義,下一節會單獨展開講這個。
解答6:不在BootROM指定的2nd Option PortB信號可以用於連接Data Flash,但是Data Flash的配置需要由Code Flash里的用戶應用程式代碼來完成,BootROM無法直接配置Data Flash。

四、關於RWW的註意事項

  現在市面上大部分Flash(尤其是普通四線QSPI)是不支持RWW(Read-While-Write)特性的,就是在單片Flash上無法實現同時讀寫。但如果我們在i.MXRT1015/1020/1050系統設計中採用一片支持RWW特性的Flash或者直接使用兩片Flash,是否可以實現在Code Flash(或RWW Flash中的Code分區)中原地執行代碼去擦寫Data Flash(或RWW Flash中的Data分區)這種需求。答案其實還是不可以,這是由FlexSPI模塊本身特性限制的,這個特性就是同一個FlexSPI模塊下的AHB command和IP command是互斥的

4.1 FlexSPI異類命令互斥特性

  下圖是FlexSPI模塊框圖,可以這麼簡單理解,CPU去Code Flash取程式代碼指令走的是64bit AHB Bus(即AHB command),Code Flash里的程式代碼里調用FlexSPI驅動去擦除或編程Data Flash走的是32bit IPS Bus(即IP command),這兩種不同類型的command會經過ARB_CTL模塊去仲裁,同一時間只有一種command勝出成為ARB command去實際操作Flash。

  那FlexSPI模塊這個限制到底怎麼破?有以下三種方式可以來幫忙:

方法1:在MPU里設置Code Flash對應的映射地址區域,使能Cache,並且保證應用程式代碼里調用FlexSPI驅動去擦寫Data Flash的關鍵部分(觸發IP CMD執行)始終緩存在Cache里。
方法2:將應用程式代碼里調用FlexSPI驅動去擦寫Data Flash的關鍵部分搬運到RAM空間去運行,可以直接藉助IDE特性去完成(比如IAR,可以用__ramfunc去修飾關鍵函數)。
方法3:應用程式代碼里的FlexSPI驅動直接使用BootROM API(代碼是在ROM空間運行的)。

  這三種方法里首推方法3,既能實現需求,又能省Code Flash空間(FlexSPI驅動代碼說小不小)。方法1其實是不推薦的,畢竟Cache是種玄學,豈是你想控制就控制的。

4.2 RWW的核心意義

  最後再說一下,掛兩片Flash(或一片RWW Flash)到底相比掛一片非RWW Flash有什麼好處?這就涉及到RWW的核心意義了,其實痞子衡前面已經講過了,雖然不能實現在Code Flash中原地執行擦寫操作相關代碼,但是在Data Flash擦寫等待期間,CPU可以繼續從Code Flash取代碼執行,這意味著此時不需要刻意關閉系統全局中斷,因此不影響系統響應的實時性。

  至此,恩智浦i.MX RT1015/1020/1050三款MCU的FlexSPI NOR啟動的連接方式痞子衡便介紹完畢了,掌聲在哪裡~~~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、asp.net mvc 通用許可權管理系統(響應佈局)源碼主要以下特點: AngelRM(Asp.net MVC)是基於asp.net(C#)MVC+前端bootstrap+ztree+lodash+jquery技術,採用bootstrap為前臺開發展示UI,Web Api主要負責前端的邏輯交互, ...
  • 廢話不說,直接上代碼 有了這玩意,似乎打開了一扇窗——前後端真正分離? ...
  • 1. 什麼是Validaion.ErrorTemplate 數據綁定模型允許您將與您Binding的對象相關聯ValidationRules。 如果用戶輸入的值無效,你可能希望在應用程式 用戶界面 (UI) 上提供一些有關錯誤的反饋。 提供此類反饋的一種方法是設置 "Validation.Error ...
  • 簡短介紹 su與su sudo 詳細介紹 一.su su是最簡單的身份切換名,用su我們能夠進行不論什麼用戶的切換,一般都是su username,然後輸入password就ok了,可是root用su切換到其它身份的時候是不須要輸入password的。起初我都是用su來切換的,後來老大看見了說我這樣 ...
  • 一.chattr命令格式 格式 chattr [+ =][選項] 文件或目錄名 操作 選項 實例 二.查看文件系統屬性 格式 lsattr 選項 文件名 選項 ...
  • 1、安裝subversion yum -y install subversion 2、查看安裝位置 rpm -ql subversion 3、建立版本庫 (1)建立版本庫根目錄 mkdir /var/svnrepos (2)建立版本庫 svnadmin create /var/svnrepos/li ...
  • The simple answer to that is, "Kernel Developers do not put blind faith in anything". When any data is passed to the kernel space from userspace, it i ...
  • 前提:pc主機,MBR架構 第一步:post(power on system test)加電自檢。 pc機的主板上有個rom晶元(CMOS),加電後,cpu去找這個raw,然後讀取裡面的指令,檢測機器上是否有:記憶體,硬碟,顯示設備等。 CMOS里有個bios(basic input output s ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...