天天看點

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬體那些事(2.2)- 在串行NOR Flash XIP調試原理

通常的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調試的原理

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1xxx系列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調試的原理:

  要實作在串行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.MX RT1xxx系列MCU硬體那些事(2.2)- 在串行NOR Flash XIP調試原理

  本文主要是概述性地介紹i.MXRT在外部串行Flash調試的原理,并不想深入探析CoreSight,是以對于CoreSight,我們隻需要知道是它完成了主要的調試工作,而CoreSight唯一的依賴就是要保證能通過DAP元件從AMBA總線實時通路系統記憶體和外設寄存器(當然包括外部串行Flash中的代碼)。

  要實作在串行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連接配接。

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬體那些事(2.2)- 在串行NOR Flash XIP調試原理

  關于這個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
痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬體那些事(2.2)- 在串行NOR Flash XIP調試原理

  要實作在串行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下載下傳算法設計進行詳解。

  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 RT1xxx系列MCU硬體那些事(2.2)- 在串行NOR Flash XIP調試原理

  至此,恩智浦i.MX RT1xxx系列EVK在串行NOR Flash調試的原理痞子衡便介紹完畢了,掌聲在哪裡~~~

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

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

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬體那些事(2.2)- 在串行NOR Flash XIP調試原理

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

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬體那些事(2.2)- 在串行NOR Flash XIP調試原理
痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬體那些事(2.2)- 在串行NOR Flash XIP調試原理
痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬體那些事(2.2)- 在串行NOR Flash XIP調試原理

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

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

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

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

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

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