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


  你們好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給你們介紹的是飛思卡爾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調試的原理:緩存

1、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中的代碼)。app

2、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能夠有效下降讀延時。fetch

  • 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映射地址讀訪問包含如下特色:flex

  • 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

3、串行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下載算法設計進行詳解。this

4、在串行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調試的原理痞子衡便介紹完畢了,掌聲在哪裏~~~設計

相關文章
相關標籤/搜索