痞子衡嵌入式:飛思卡爾i.MX RTyyyy系列MCU硬體那些事(2.2)- 在串列NOR Flash XIP調試原理

来源:https://www.cnblogs.com/henjay724/archive/2019/11/04/11791498.html
-Advertisement-
Play Games

通常的Cortex-M內核MCU一般都會內嵌並行NOR Flash,這個並行NOR Flash是直接掛在Cortex-M內核高性能AHB匯流排上的,知名IDE如果支持這款MCU,也都會同時集成對應Flash的下載演算法,方便用戶直接在IDE里下載代碼進Flash和XIP調試,但是i.MXRT內部並沒有F... ...



  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RTyyyy系列EVK在串列NOR Flash調試的原理

  本文是i.MXRT硬體那些事系列第二篇的續集,在第二篇首集中痞子衡給大家詳細介紹了EVK板載調試器用法,有了調試器在手,從此調試不用愁。從調試代碼所在目標存儲器類別上來分,調試一般分為在SRAM調試和在Flash調試。在SRAM調試實現比較簡單,程式直接從JTAG/SWD口灌進RAM即可;在Flash調試,則相對複雜一點,因為首先需要有Flash下載演算法,下載成功後才能調試。
  通常的Cortex-M內核MCU一般都會內嵌並行NOR Flash,這個並行NOR Flash是直接掛在Cortex-M內核高性能AHB匯流排上的,知名IDE如果支持這款MCU,也都會同時集成對應Flash的下載演算法,方便用戶直接在IDE里下載代碼進Flash和XIP調試,但是i.MXRT內部並沒有Flash,用戶需要自己外接Flash,那該怎麼辦?還能線上XIP調試麽?彆著急,i.MXRT可以支持外接並行NOR和串列NOR實現XIP,從節省管腳數的角度,最常見的做法是將串列NOR Flash掛在i.MXRT FlexSPI匯流排上,FlexSPI支持XIP特性,所以原理上可以實現線上調試,今天痞子衡就為大家介紹i.MXRT上在外部串列Flash調試的原理:

一、ARM CoreSight調試架構

  要實現在串列Flash調試,首先要能對內核進行調試。i.MXRT晶元是基於Cortex-M內核的,而Cortex內核的調試和跟蹤,當然離不開CoreSight,它是ARM公司於2004年推出的一種新的調試體繫結構,也是內核授權的一部分。
  CoreSight功能非常強大,其包含了很多調試組件(即各種協議),下圖來自於 CoreSight技術簡介手冊,圖中標出了CoreSight架構下的各種調試組件之間的聯繫,這麼多組件一下子看起來會有點暈,如果我們按功能將這些組件分組,它們可以被分成如下三組:

  • 源部件(Source):晶元上跟蹤數據的來源,產生跟蹤數據發送到ATB(AMBA Trace Bus)。比如STM和ETM都屬於Source部分。
  • 控制訪問部件(Sink):配置和控制數據流的產生,但是不產生數據流,即那些可以保持從Source過來數據的模塊。比如DAP和ECT(包含CTI和CTM)都屬於Sink部分。
  • 匯聚點(Link):晶元上跟蹤數據的終點,用於引導從Source到Sink過程中的類似於通道作用的模塊。比如TPIU、ETB和SWO都屬於匯聚點。

  本文主要是概述性地介紹i.MXRT在外部串列Flash調試的原理,並不想深入探析CoreSight,因此對於CoreSight,我們只需要知道是它完成了主要的調試工作,而CoreSight唯一的依賴就是要保證能通過DAP組件從AMBA匯流排實時訪問系統記憶體和外設寄存器(當然包括外部串列Flash中的代碼)。

二、i.MXRT FlexSPI外設特性

  要實現在串列Flash調試,其次是代碼要能在串列Flash中XIP(原地執行),即CPU要能實時從串列Flash中任意位置取指令和數據。本文講的串列Flash一般指SPI介面的NOR Flash,SPI模式可以是Single/Dual/Quad/Octal。無論是哪種SPI模式,這種介面的Flash本質上都屬於串列Flash,地址線和數據線不僅共用而且是串列的。而按照通常的理解,要能夠實現XIP,Flash應該是並行匯流排介面掛在AMBA上,這個並行匯流排應有獨立的地址線和數據線,且地址線寬度跟Flash大小相對應。那麼串列Flash為什麼能在i.MXRT上實現XIP呢?答案就是FlexSPI外設。
  讓我們打開RT1050參考手冊,找到FlexSPI外設章節,可以看到如下FlexSPI模塊框圖,框圖右邊是FlexSPI與外部串列Flash的信號連接,框圖左邊是FlexSPI與i.MXRT系統內部匯流排連接,匯流排連接分為兩種,分別是32bit IPS BUS(即手動操作FlexSPI寄存器發送Flash讀寫命令),64bit AHB BUS(由FlexSPI翻譯AHB訪問地址並自動發送相應Flash讀寫命令),串列Flash能夠XIP的奧秘就在FlexSPI外設的AHB BUS連接。

  關於這個64bit AHB BUS連接,我們可以FlexSPI特性里的Memory mapped read/write access by AHB Bus一欄找到更多細節。i.MXRT為FlexSPI外設在系統記憶體里分配了AHB訪問地址映射(對於XIP調試來說主要是讀訪問),當CPU取指到FlexSPI AHB地址映射空間時,FlexSPI外設會自動完成從外部串列Flash讀取指令數據的工作,並將指令數據存放到AHB RX buffer里(一共8個),CPU直接從AHB RX buffer里獲取指令去執行,AHB RX buffer可以有效降低讀延時。

  • AHB RX Buffer implemented to reduce read latency. Total AHB RX Buffer size: 128 x 64 Bits
  • 16 AHB masters supported with priority for read access
  • 8 flexible and configurable buffers in AHB RX Buffer
  • AHB TX Buffer implemented to buffer all write data from one AHB burst. AHB TX Buffer size: 8 x 64 Bits
  • All AHB masters share this AHB TX Buffer. No AHB master number limitation for Write Access.

  關於FlexSPI AHB地址映射,可見下麵的RT1050 memory map表,AHB映射起始地址為0x60000000,最大支持504MB的空間(適用RT1010/RT1020/RT1050/RT1060)。如果是RT1064,AHB映射起始地址改為0x70000000;如果是RT1170,除了0x60000000映射地址外還新增了0x30000000的地址映射。FlexSPI AHB映射地址讀訪問包含以下特點:

  • Cachable and Non-Cachable access
  • Prefetch Enable/Disable
  • Burst size: 8/16/32/64 bits
  • All burst type: SINGLE/INCR/WRAP4/INCR4/WRAP8/INCR8/WRAP16/INCR16

三、串列NOR Flash下載演算法

  要實現在串列Flash調試,最後要確保代碼被成功下載到串列Flash中。串列Flash的讀寫不像訪問RAM那樣簡單,是需要一套專門的FlexSPI NOR Flash驅動的,即所謂的Flash下載演算法。
  串列Flash種類很多,雖然大多都符合JESD216標準,但是具體到某個廠家生產的Flash,還是有細微區別的。有的Flash下載演算法力求支持儘可能多的Flash,而有的Flash下載演算法則僅針對某個系列Flash。不管是哪種Flash下載演算法,對於i.MXRT這樣沒有內部Flash的晶元而言,Flash下載演算法都是要跟具體的i.MXRT開發板相關聯的,因為開發板決定了Flash連接的pinmux,Flash下載演算法里FlexSPI管腳初始化要與開發板相匹配。
  每個IDE的Flash下載演算法設計不盡相同,本文暫不詳細介紹具體Flash下載演算法,後續文章會對常見IDE的Flash下載演算法設計進行詳解。

四、在串列Flash調試過程

  CoreSight架構,FlexSPI特性,NOR Flash下載演算法都介紹過了,在串列Flash調試的充分條件都有了。現在痞子衡為大家綜合介紹一下調試過程。下麵是痞子衡特地畫的簡圖,其實調試過程概述起來並不複雜,當你啟動IDE調試時,預先放在IDE里的Flash下載演算法(可執行文件)會首先通過調試器下載到i.MXRT內部FlexRAM中,下載演算法需要提供FlexSPI外設初始化和NOR Flash擦除、燒寫功能API,然後調試器繼續將應用程式代碼(二進位機器碼)分段緩存在FlexRAM里,並調用Flash下載演算法API去完成應用程式的燒寫(從FlexRAM到Flash中),應用程式完全下載結束之後,便由CoreSight開始接管調試工作,此時CPU已經可以通過AHB匯流排訪問掛在FlexSPI外設上的串列Flash里的應用程式代碼數據,所以CoreSight當然可以完成實時代碼運行控制與跟蹤,你在IDE里也就可以進行單步調試啦。

  至此,飛思卡爾i.MX RTyyyy系列EVK在串列NOR Flash調試的原理痞子衡便介紹完畢了,掌聲在哪裡~~~


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

-Advertisement-
Play Games
更多相關文章
  • 磁碟情況查詢: 查詢系統整體磁碟使用情況: df -h 查詢指定目錄的磁碟占用情況 du -h /目錄 查詢指定目錄的磁碟占用情況,預設為當前目錄 -s 指定目錄占用大小彙總 -h 帶計量單位 -a 含文件 --max-depth=1 子目錄深度 -c 列出明細的同時增加彙總值 應用實例: 查詢/o ...
  • UID:啟動這些進程的用戶。PID:進程的進程ID。PPID:父進程的進程號(如果該進程是由另一個進程啟動的)。C:進程生命周期中的CPU利用率。STIME:進程啟動時的系統時間。TTY:進程啟動時的終端設備。TIME:運行進程需要的累計CPU時間。CMD:啟動的程式名稱。F:內核分配給進程的系統標 ...
  • 卸載軟體 紙牌 麻將 掃雷 數獨 火狐 郵件 掃描 拍照 照片 視頻 計劃 日曆 列印 備份 計算器 亞馬遜 電源統計 音樂播放 遠程桌面 To Do LibreOffice 換下載源 裝機的時候下載文件就已經很慢了(半小時,甚至更久),原因是下載源是Ubuntu官方的(在國外)。國內也提供了一些下 ...
  • 分區的方式: 1)mbr分區: 1.最多支持四個分區 2.系統只能安裝在主分區 3.擴展分區要占一個主分區 4.mbr最大隻支持2TB,但擁有最好的相容性 2) gpt分區: 1.支持無限多個主分區(但操作系統可能限制,比如windows下最多128個分區) 2.最大支持18EB的大容量(1EB=1 ...
  • 管理用戶 刪除用戶 若使用 userdel myuser 命令刪除該用戶時,並不能刪除該用戶的所有信息,只是刪除了/etc/passwd、/etc/shadow、/etc/group/、/etc/gshadow四個文件里的該賬戶和組的信息。預設情況下創建一個用戶賬號,會創建一個家目錄和一個用戶郵箱( ...
  • 在這篇文章中,將會列出讓一些令 Linux 用戶印象最深刻且精美的 Linux 發行版,包括對初學者友好和流行的發行版。 1. elementary OS elementary OS 是一款基於 Ubuntu 精心打磨美化的桌面 Linux 發行版,號稱是最漂亮的 Linux 發行版。事實上,Ele ...
  • 之前搭建openvpn和easy2.0組合,第一次幫朋友搭建easy3.0組合感覺比2.0麻煩一些,參考了很多技術文章 搭建yum install -y install openvpn easy-rsa net-tools bridge-utilscd /usr/share/easy-rsa/3./ ...
  • 廢話不多說,直接進入主題。 1、安裝mailx [root@localhost ~]#yum install malix -y #yum安裝malix [root@localhost ~]# vi /etc/malix.rc #配置郵箱,配置第三方軟體發送郵件。 2、在配置文件的最後添加第三方郵件的 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...