女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

串行SPI Nor Flash啟動(dòng)流程

SwM2_ChinaAET ? 來(lái)源:未知 ? 作者:李倩 ? 2018-03-16 09:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

趁著我們NB的號(hào)稱跨界處理器的i.MXRT系列的推出一睹為快吧(想起當(dāng)年也是Kinetis剛出來(lái),我在學(xué)校正好開始寫它的那一系列技術(shù)文檔,這是啥,緣分吶)。其實(shí)在發(fā)表到AET之前,我先把此文發(fā)到阿莫論壇上了試了試水,收到的一句話挺讓我心情激蕩的,就是“FSL又活了”,my answer is “靈魂依在。。?!?,哎,啥也不說(shuō)了,下面開整吧。

在此文正式成型之前,歷經(jīng)了3個(gè)版本的修改和優(yōu)化,最終fixed掉了已知的bug和穩(wěn)定性才敢拿出來(lái)獻(xiàn)丑,希望讓廣大AET的博友們繼續(xù)能有所收獲有所體會(huì),也算為了RT1050的未來(lái)發(fā)展貢獻(xiàn)點(diǎn)力量吧,貌似不少人在觀望RT系列,也有很多第三方設(shè)計(jì)公司和開源項(xiàng)目在蠢蠢欲動(dòng),所以也希望我拋的這塊磚能在RT的廣泛市場(chǎng)激起一點(diǎn)漣漪多引出幾塊好玉來(lái)。。。

2018新年伊始,I.MXRT105x已經(jīng)推向市場(chǎng)有一段兒時(shí)間了,以其極高的性價(jià)比引起了不少工業(yè)和消費(fèi)領(lǐng)域客戶的興趣,畢竟相比于目前市場(chǎng)上已有的多數(shù)“高價(jià)低配”的高端ARM Cortex-M7產(chǎn)品,RT105x最高600MHz主頻、極豐富的外設(shè)和3美金起步的定位著實(shí)算是業(yè)界良心了(還有馬上要面世的LQFP封裝I.MXRT1020更是讓人期待),只是當(dāng)然這種“低價(jià)高配”是有代價(jià)的,其內(nèi)部不自帶Flash需要外掛串行SPI Nand/Nor Flash或者并行的Nand/Nor Flash(貌似一下子給不少心動(dòng)的人潑了涼水,呵呵),不過(guò)這一消息倒是有人歡喜有人憂,對(duì)歡喜的客戶來(lái)說(shuō),他們的應(yīng)用代碼本身內(nèi)部Flash就裝不下需要外擴(kuò),這一下反倒好了,省的內(nèi)心糾結(jié)了再也不用擔(dān)心老板整天催自己優(yōu)化代碼精簡(jiǎn)應(yīng)用看看能不能只用內(nèi)部Flash搞定了,哈哈,而且動(dòng)則幾Mb或者幾十Mb的外部SPI Flash價(jià)格便宜以后升級(jí)也是綽綽有余,而對(duì)憂的客戶來(lái)說(shuō),外部Flash啟動(dòng)方式帶來(lái)的啟動(dòng)配置復(fù)雜、代碼安全性問(wèn)題和對(duì)系統(tǒng)性能的影響等都是潛在的棘手問(wèn)題。

關(guān)于外部Flash的代碼安全問(wèn)題和代碼在外部執(zhí)行對(duì)整個(gè)系統(tǒng)性能的影響,RT105x的加密啟動(dòng)(HAB)功能和32KB的L1 ICache/DCache是可以解決的,只是本文先從RT105x的啟動(dòng)配置問(wèn)題著手,畢竟系統(tǒng)如果都Boot不起來(lái),其他的問(wèn)題都是空談了,呵呵。另外,如上面所說(shuō),RT105x支持的啟動(dòng)方式有不少,不過(guò)個(gè)人覺(jué)著外部串行SPI Flash啟動(dòng)會(huì)是大多數(shù)人的折中選擇。由于RT105x的官方EVK板上是帶有兩塊串行SPI Nor Flash(一個(gè)是Cypress高性能8線高速的Hyper Flash

S26KS512SDPBHI02,一個(gè)是ISSI物美價(jià)廉的4線QSPI Flash IS25WP064AJBLE),所以咱就手上有啥來(lái)啥,以板載的Hyper Flash和QSPI Flash為例詳細(xì)說(shuō)明下串行SPI Nor Flash的啟動(dòng)流程和具體使用方法。

串行SPI Nor Flash啟動(dòng)流程1

當(dāng)RT105x EVK板載的Boot模式選擇開關(guān)SW7設(shè)定為如下Table1-1所示的前兩者時(shí)(其他BOOT_CFG 管腳默認(rèn)被下拉到地,即OFF狀態(tài)),系統(tǒng)會(huì)通過(guò)片上的FlexSPI接口執(zhí)行外部串行SPI Nor Flash的啟動(dòng),其啟動(dòng)地址為Table1-2所示的0x6000_0000(如果是從并行的Nor Flash啟動(dòng)則啟動(dòng)地址為0x8000_0000),關(guān)于其他Boot pin對(duì)啟動(dòng)模式的配置影響,見(jiàn)RT105x的RM手冊(cè)8.6章節(jié),這里就不細(xì)說(shuō)了。

Table1-1 典型的啟動(dòng)模式設(shè)定

SW7-1 SW7-2 SW7-3 SW7-4 啟動(dòng)模式
OFF ON ON OFF Hyper Flash啟動(dòng)
OFF OFF ON OFF QSPI Flash啟動(dòng)
ON OFF ON OFF SD卡啟動(dòng)

Table1-2 啟動(dòng)相關(guān)地址

Start Address End Address Size Description
0x80000000 0xDFFFFFFF 1.5GB SEMC 外部存儲(chǔ)器接口 (SDRAM, 并行NOR Flash, PSRAM,
并行NAND Flash)
0x60000000 0x7F7FFFFF 504MB FlexSPI
0x20200000 0x2027FFFF 512KB OCRAM
0x20000000 0x2007FFFF 512KB DTCM
0x00000000 0x0007FFFF 512KB ITCM

如圖1所示為完整的SPI Nor Flash啟動(dòng)流程圖,當(dāng)RT105x的片上ROM在檢測(cè)到啟動(dòng)模式為FlexSPI接口后,會(huì)根據(jù)Boot Pin的配置信息配置該模式下需要使用的FlexSPI接口管腳的復(fù)用模式并將FlexSPI的時(shí)鐘配置成默認(rèn)的低速30MHz,然后會(huì)以0x6000_0000為首地址讀取前512個(gè)字節(jié)作為外部Flash的配置信息(即Flash Configuration Parameters,包括幾線制的SPI Flash,SPI的時(shí)鐘頻率,LUT查找表,DDR/SDR模式以及片選CS管腳的Hold/Setup Time等信息,見(jiàn)RM8.6.3章節(jié))并以此來(lái)配置FlexSPI模塊以滿足外部Flash的特性,待配置完畢后,RT105x CPU以后即會(huì)以AHB總線讀取數(shù)據(jù)和指令的方式(雖然從外部來(lái)看仍然是FlexSPI接口,但是由于LUT查找表讀取數(shù)據(jù)的指令已經(jīng)配置好,CPU只是通過(guò)AHB總線發(fā)送讀取指令即可觸發(fā)LUT以操作外部Flash,也就是說(shuō)在內(nèi)部對(duì)CPU來(lái)講已經(jīng)屏蔽掉了FlexSPI的底層)來(lái)讀取接下來(lái)的跟用戶Image相關(guān)的幾個(gè)關(guān)鍵信息,即IVT(Image Vector Table),Boot Data和DCD(Device configuration data)如圖2,其中IVT需要放在外部Flash的固定偏移地址(如圖3,對(duì)Nor Flash來(lái)說(shuō)其需要存儲(chǔ)在基地址 + 4KB的偏移地址,比如0x60000000+4*1024)供ROM讀取以便讓系統(tǒng)知道用戶Image的第一條可執(zhí)行指令放在了哪里以及BootData和DCD的存放地址,BootData則保存了完整Image的首地址和整個(gè)image所占的空間大小,而DCD則包含了一些配置命令以便在跳到用戶程序入口之前供ROM調(diào)用配置內(nèi)部外設(shè)以更好的匹配外部IC,一般如果系統(tǒng)外掛了SDRAM的情況則需要配置好DCD(因?yàn)橛袝r(shí)需要主程序在跑起來(lái)之前,外部SDRAM就得處在ready狀態(tài),以供CPU把data或者code copy到SDRAM里時(shí)不會(huì)出錯(cuò))。

圖1 SPI Nor Flash啟動(dòng)流程

圖2 完整Image組成元素

圖3 IVT針對(duì)不同存儲(chǔ)介質(zhì)的存放地址

綜上所述,我們實(shí)際上就可以得出結(jié)論來(lái),如果要讓系統(tǒng)能正常Boot起來(lái),則燒寫到外部串行SPI Flash里面的完整image必須要包括五個(gè)重要元素,即Flash Configuration Parameters,IVT,Boot Data,DCD和用戶image,而其中Flash Configuration Parameters和IVT是存放在固定的地址的,而后三者則由IVT的內(nèi)容來(lái)決定,無(wú)論是直接編譯生成或者通過(guò)輔助工具手動(dòng)添加,只要我們最后形成的image里面包含了這幾個(gè)元素,CPU就會(huì)認(rèn)可這個(gè)image并執(zhí)行(先不談安全加密的事)。所以我們只要搞清楚這個(gè)基本原理了,無(wú)論是什么方法,最后都是殊途同歸,下面就可以放心大膽地去解決RT105x的FlesSPI啟動(dòng)問(wèn)題了。

SPI Nor Flash啟動(dòng)配置方法2

前面提到如果想要RT105x能正常從外部串行SPI Nor Flash啟動(dòng)的話,待燒寫的image是必須要集成五個(gè)元素的(Flash Configuration Parameters, IVT, Boot Data, DCD and User Image, 重要事情要多說(shuō)幾遍 呵呵),那具體的實(shí)現(xiàn)方法我目前想到的無(wú)非兩種,一種是在編譯鏈接過(guò)程中直接把這幾個(gè)元素和應(yīng)用代碼鏈接到一塊,并將這幾個(gè)元素指定好鏈接地址,最后通過(guò)IDE的Flashloader下載到SPI Flash里,第二種則是通過(guò)輔助工具在編譯鏈接好的裸應(yīng)用代碼前面手動(dòng)的添加一個(gè)信息頭(頭里面包含這幾個(gè)元素),然后通過(guò)單獨(dú)的下載工具或者MCU內(nèi)部的ROM Bootloader ISP下載進(jìn)去。這兩種各有優(yōu)劣勢(shì),前者比較適合在前期調(diào)試的時(shí)候使用,這樣在IDE里面編輯修改應(yīng)用代碼后做印證測(cè)試的時(shí)候可以直接在線download和debug(比如單步,斷點(diǎn),查看寄存器和Memory等等),我相信這也是目前大家比較迫切需要的,但是缺點(diǎn)的話則是前期配置過(guò)程稍微復(fù)雜些且需要對(duì)Boot過(guò)程和外部SPI Flash的Spec有一定了解(當(dāng)然這些配置是一勞永逸的,配置一次即可),而后者則是客戶不需要關(guān)心其他幾個(gè)元素的配置只專注用戶應(yīng)用的開發(fā),待開發(fā)完畢后通過(guò)輔助工具生成最終的Image用于小批測(cè)試或者量產(chǎn),缺點(diǎn)是前期調(diào)試的話會(huì)比較麻煩,每次修改完重新編譯生成用戶image還需要用輔助工具手動(dòng)添加信息頭然后再通過(guò)Bootloader下載進(jìn)去驗(yàn)證(我想想都有點(diǎn)累的慌。。。這種情況workaround只能是前期先在RAM里調(diào)試,待成熟了之后再走這個(gè)流程)。

第二種使用輔助工具的方法,官方已經(jīng)提供了一整套工具鏈(可以從RT105x官方主頁(yè)的”Flashloader i.MX-RT1050”軟件包里找到)且有了相應(yīng)的AN應(yīng)用筆記介紹其具體操作步驟,這里就不再贅述了。本次我們重點(diǎn)介紹第一種方法,即在IDE環(huán)境里通過(guò)對(duì)工程的配置達(dá)到生成并下載調(diào)試完整image的目的,說(shuō)到這里我再啰嗦幾句,實(shí)際上這種方法做下來(lái)不只方便了在線download和debug,好處也不少,一是所有的這幾個(gè)元素配置信息都以C語(yǔ)言的常量形式體現(xiàn)在應(yīng)用工程文件里面,會(huì)加深我們對(duì)Boot的理解程度不說(shuō),這樣的話如果更換外部SPI Flash也可以很方便的更改適配信息,第二呢則是這種方式形成的image文件會(huì)是通用的image格式(比如.bin, .hex和.S19),也會(huì)兼容市面上大多數(shù)可以直接燒寫SPI Flash的量產(chǎn)工具的批量燒寫。好了,不再多說(shuō)了,再說(shuō)就有點(diǎn)話癆了,呵呵,因?yàn)榘遢d有Hyper Flash和QSPI Flash兩種,下面就分別詳細(xì)說(shuō)明下這兩種Flash在IDE環(huán)境下的配置方法(我使用的IAR,Keil的可以參考第四章節(jié)自行配置,需要添加的幾個(gè)文件是IAR,Keil和GCC三個(gè)環(huán)境兼容的)。

開發(fā)測(cè)試環(huán)境:

Hardware Platform: MIMRT1050-EVK (SCH-29538 REV A1)

Software Package: SDK_2.3.0_EVK-MIMXRT1050(mcuxpresso.nxp.com)

IDE: IAR_v8.20.1

Debugger: On-Board CMSIS-DAP

2.1 Cypress 1.8v Hyper Flash啟動(dòng)

RT105x的EVK板子默認(rèn)是使用Hyper Flash啟動(dòng)的,所以硬件不需要改動(dòng),只需要將SW7啟動(dòng)模式修改成Table1-1第一行配置使能Hyper Flash啟動(dòng)即可,如下圖4,然后我們以SDK2.3中的hello world為例介紹具體配置方法。實(shí)際上在最新的SDK2.3里面Keil和MCUXpresso版本已經(jīng)有針對(duì)Hyper Flash啟動(dòng)的hello_world_xip的樣例了,只是IAR反倒是沒(méi)有,不過(guò)這下正好我們來(lái)走一遍完整的配置過(guò)程,這樣也可以為下一小節(jié)的QSPI啟動(dòng)打下基礎(chǔ)(官方例程里是沒(méi)有QSPI XIP例程的),畢竟大多數(shù)客戶估計(jì)還是會(huì)傾向于選擇QSPI的。

圖4 Hyper Flash啟動(dòng)模式

(1)打開SDK2.3的hello world例程\boards\evkmimxrt1050\demo_apps\hello_world\iar,在Workspace下可以看到默認(rèn)是有8種配置的,包括在SDRAM調(diào)試,OCRAM調(diào)試和spi nor Flash調(diào)試,原始的flexspi_nor_debug配置是沒(méi)有其他幾種元素的,所以這種配置下當(dāng)把代碼下進(jìn)去外部Hyper Flash上的時(shí)候可以在線debug但是當(dāng)重新上電或者外部復(fù)位后系統(tǒng)是Boot不起來(lái)的,因?yàn)闆](méi)有其他元素信息RT1050啟動(dòng)的時(shí)候識(shí)別不了它的。接下來(lái)我們?cè)诖伺渲没A(chǔ)上新建一個(gè)配置出來(lái)然后在新的工程配置上添加文件和修改配置,點(diǎn)擊IAR菜單欄Project->Edit Configurations,然后在打開的窗口下選擇New,在新的工程配置下起一個(gè)新的名字“HyperFlash_bootok”,Base on Configuration則選擇原有的flexspi_nor_debug以最大限度的保留原有的配置,改好之后點(diǎn)擊Ok即當(dāng)前工程會(huì)進(jìn)入新添加的HyperFlash_bootok配置狀態(tài);

(2)在此工程配置下,新添加一個(gè)Group(右鍵工程->Add->Add Group)并命名為“xip”,然后右鍵該Group->Add->Add Files,找到根目錄\devices\MIMXRT1052\xip路徑下的四個(gè)文件,將該四個(gè)文件都添加到當(dāng)前工程上來(lái),如下所示,我們可以打開這兩個(gè).c文件即可看到除了User Image之外的其他四個(gè)元素信息都以常量的方式被定義在指定的段地址內(nèi),以便在編譯鏈接之后將這幾個(gè)元素配置信息分配到指定的地址上以保存在最終的Image上,且這四個(gè)文件是可以兼容IAR,Keil和GCC三大編譯器的所以可以隨意Porting,當(dāng)然不要忘了在工程配置中頭文件搜索路徑上添加那兩個(gè)頭文件的路徑,另外如果沒(méi)有XIP_EXTERNAL_FLASH這個(gè)宏的話也要加上;

(3)由于四個(gè)元素被分別定義到指定的段內(nèi),但是默認(rèn)的原始工程里面的鏈接文件是沒(méi)有這幾個(gè)段的定義的(Keil和MCUXpresso由于有xip的樣例,它們是定義好的了),所以還需要在原始的鏈接文件基礎(chǔ)上添加這幾個(gè)段的定義并分配好地址,我們將原來(lái)的鏈接文件MIMXRT1052xxxxx_flexspi_nor.icf復(fù)制一份重命名為MIMXRT1052xxxxx_hyperflash_nor_bootok.icf(名字倒是無(wú)所謂),然后打開該文件,添加這幾個(gè)段的定義和地址分配如下(修改好的源文件見(jiàn)隨本文檔附帶的壓縮包),然后在工程配置Options->Linker里選擇新修改的鏈接文件,最后點(diǎn)擊確認(rèn);

(4)不要以為這樣就結(jié)束了,呵呵,我們這兩步說(shuō)到幾個(gè)重要的元素信息是以常量的形式通過(guò)鏈接文件保存在指定的地址段內(nèi),不過(guò)我們的應(yīng)用工程卻沒(méi)有調(diào)用它們,在編譯的時(shí)候編譯器會(huì)默認(rèn)把他們又給優(yōu)化掉了搞的最后沒(méi)有體現(xiàn)在Image里面,前面的工作白搭了,所以還需要額外一步告訴編譯器把這幾個(gè)常量給Keep住,具體配置如下圖,然后點(diǎn)擊確認(rèn);

(5)這樣工程配置就結(jié)束了,我們重新編譯整個(gè)工程,然后在生成的.map文件里即可看到如下這四個(gè)元素信息都已經(jīng)正確的分配到指定地址了,這樣就萬(wàn)事俱備,就差I(lǐng)DE IAR的Flashloader這個(gè)“東風(fēng)”了;

(6)在IAR v8.20.1以上的版本已經(jīng)有HyperFlash的Flashloader了,我們?cè)贠ptions->Debugger選項(xiàng)下選擇CMSIS-DAP,然后接下來(lái)需要注意的是在Options->CMSIS-DAP選項(xiàng)下,Reset類型需要選擇Core Reset(CMSIS-DAP默認(rèn)的Reset方式會(huì)導(dǎo)致調(diào)試的時(shí)候打不了斷點(diǎn),J-link倒是沒(méi)有這個(gè)問(wèn)題),然后點(diǎn)擊Ok保持配置,最后開始Debug即可完美的把帶有幾個(gè)重要元素信息的配置數(shù)據(jù)都下載到外部Hyper Flash里面并進(jìn)入Debug模式,正常單步或者斷點(diǎn),并且按鍵復(fù)位或者重新給板子上電都可以讓RT105x正常Boot起來(lái),最后有圖有真相,發(fā)個(gè)串口打印的結(jié)果“hello world”, Enjoy it…

2.2 ISSI 1.8v QSPI啟動(dòng)

上面說(shuō)完Hyper Flash的啟動(dòng)方法,接下來(lái)繼續(xù)說(shuō)說(shuō)QSPI啟動(dòng)。由于板子上的Hyper Flash和QSPI時(shí)鐘、片選和部分?jǐn)?shù)據(jù)線是共用的,所以在測(cè)試QSPI啟動(dòng)的時(shí)候需要把Hyper Flash焊掉(跟板子硬件設(shè)計(jì)有關(guān)系,不焊掉會(huì)影響時(shí)序,稍微有點(diǎn)心疼,畢竟Hyper Flash比較貴而且又是BGA的焊下來(lái)就焊不上去了,當(dāng)然,如果是客戶自己設(shè)計(jì)的板子只會(huì)有一種SPI Nor Flash,那就沒(méi)這個(gè)問(wèn)題了),然后將下圖中DNP的0歐姆電阻焊上,最后特別注意的是需要在QSPI Flash的第7腳和3腳即Reset和WP管腳上拉4.7k的電阻到電源Flash_VCC。因?yàn)槲野l(fā)現(xiàn)有個(gè)別型號(hào)的QSPI Flash,比如板子用的ISSI這個(gè),在系統(tǒng)啟動(dòng)的時(shí)候Reset和WP這兩個(gè)腳是懸空態(tài),而QSPI Flash默認(rèn)上電都是單線方式,這樣的話Reset和WP如果是低電平則QSPI一直處于復(fù)位和寫保護(hù)狀態(tài),從而造成系統(tǒng)RT1050讀取QSPI信息失敗進(jìn)而導(dǎo)致啟動(dòng)失敗,所以需要在這兩個(gè)腳上加個(gè)上拉電阻給它有效的高電平,后來(lái)我測(cè)試的QD和Winbond的QSPI這兩個(gè)腳里面是有上拉電阻的,系統(tǒng)啟動(dòng)后是固定的高電平就沒(méi)有問(wèn)題了,不過(guò)我的建議是最好外部再加一個(gè)保證可靠,也不會(huì)影響后續(xù)的4線通信。另外,別忘了SW7啟動(dòng)模式需要修改成Table1-1第二行配置使能QSPI Flash啟動(dòng),如下圖5:

圖5 QSPI Flash啟動(dòng)模式

(1)我們?nèi)匀灰陨厦娴膆ello world工程為例,有前面章節(jié)打基礎(chǔ),本章說(shuō)起來(lái)就輕松不少了,在當(dāng)前工程下,點(diǎn)擊IAR菜單欄Project->Edit Configurations繼續(xù)新建一個(gè)工程配置并以HyperFlash_bootok為藍(lán)本將新的配置命名為“Qspi_nor_bootok”如下圖,然后點(diǎn)擊Ok進(jìn)入該配置模式下;

(2)此時(shí)xip的Group文件組仍然有效,不過(guò)由于Boot的Flash類型發(fā)生了變化,所以需要修改外部SPI Flash的前512字節(jié)的Flash Configuration Parameters元素信息(其他幾個(gè)元素?zé)o需修改)。打開fsl_flexspi_nor_flash.c文件,然后在hyperflash_config常量前面添加如下圖Qspiflash_config的常量(修改后的源文件見(jiàn)隨本文檔附帶的壓縮包),實(shí)際上只是修改了外部SPI Flash的Pads類型、SPI時(shí)鐘頻率、Flash的大?。ò偞笮∫约皃age和sector的大?。┖妥钪匾腖UT查找表指令,這里我使用了外部QSPI Flash的四線Quad I/O Read模式(即0xEB),此模式下SPI的時(shí)鐘頻率可以跑到133MHz,總帶寬可以達(dá)到532Mbps即66.5MByte/s(實(shí)際上很多MCU片內(nèi)的Flash時(shí)鐘也差不多這個(gè)頻率甚至比這個(gè)低,不過(guò)內(nèi)部的Flash線寬會(huì)大些),這個(gè)速度雖然相比于CPU 600MHz的主頻慢很多,但是實(shí)際上RT1050的一級(jí)緩存ICache和DCache各有32KB且在程序里默認(rèn)是打開的,實(shí)測(cè)下來(lái)對(duì)大部分代碼來(lái)說(shuō)外部SPI Flash的帶寬幾乎不會(huì)拖累CPU性能,針對(duì)特定應(yīng)用的復(fù)雜代碼留待大家自行測(cè)試(實(shí)測(cè)Opus音頻編解碼,跑在外部QSPI Flash上的性能大概為跑在內(nèi)部SRAM上的70%~80%);

(3)上一步通過(guò)預(yù)編譯QSPI_BOOT宏來(lái)使能QspiFlash的配置信息主要是為方便跟前面HyperFlash啟動(dòng)兼容,只需在當(dāng)前工程配置下添加QSPI_BOOT宏即可,如下圖所示,這樣即使再跳回HyperFlash_bootok工程時(shí)也不必麻煩地來(lái)回修改Flash Configuration Parameters元素信息了,同時(shí)該工程配置下的鏈接文件由于各個(gè)段地址沒(méi)有變化則不用修改,只是需要Keep的常量記得替換成Qspiflash_config,然后點(diǎn)擊確認(rèn)保存;

(4)此時(shí)整個(gè)工程的配置工作就完成了,點(diǎn)擊Build完成對(duì)整個(gè)工程的編譯和鏈接,查看.map文件也可以看到其他4個(gè)主要元素配置信息也都鏈接到整個(gè)image里了。不過(guò)接下來(lái)需要解決的是QSPI Flash的Flashloader問(wèn)題了。在IAR For ARM v8.20.2以上的版本的Flashloader里已經(jīng)加入了對(duì)QSPI Flash的支持了,但是該Flashloader只支持ISSI的QSPI Flash,我在此基礎(chǔ)上做了修改和優(yōu)化加入了對(duì)GD和Winbond QSPI Flash的支持,該新的Flashloader見(jiàn)隨本文檔附帶的壓縮包文件,將壓縮包路徑Firmware\IAR_8.20_Flashloader下的四個(gè)文件copy到IAR安裝目錄下C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0\arm\config\flashloader\NXP并覆蓋源文件。此外,該修改后的Flashloader同時(shí)支持HyperFlash和QSPI Flash的download和debug(通過(guò)查詢外部Boot模式來(lái)切換這兩種燒寫算法);

(5)一切準(zhǔn)備就緒,在點(diǎn)擊debug之前記得確認(rèn)options->debugger下選擇好CMSIS-DAP并且確保Reset類型必須要選擇Core Reset,然后點(diǎn)擊確認(rèn)保存,最后debug將代碼下載到外部QSPI Flash里并調(diào)試或者重新上電測(cè)試,hello world仍然讓人激動(dòng)不已,不容易啊不容易。

上述兩種外部SPI Nor Flash的啟動(dòng)配置方式僅僅是以hello world工程為例了,實(shí)際上大家可以參照如上幾個(gè)步驟任意porting到SDK的其他工程實(shí)例里面去,而且由于SDK_2.3.0_EVK-MIMXRT1050\devices\MIMXRT1052\xip目錄是共享的文件(包括Flashloader也是共享的),所以添加的那四個(gè)文件內(nèi)容不需要再修改了,只需要手動(dòng)添加文件到工程和配置IAR相關(guān)選項(xiàng)即可,操作起來(lái)還是比較快的。

代碼跑在SPI Flash數(shù)據(jù)跑在SDRAM的使用方法3

前面比較詳細(xì)的講了HyperFlash和QSPI Flash的啟動(dòng)方式,趁著興致尚在我們?cè)偌狱c(diǎn)餐。我相信在很多客戶開發(fā)RT105x過(guò)程中,將code跑在外部SPI Flash里,而數(shù)據(jù)存放在外部SDRAM里面會(huì)是比較常用的一種選擇(比如一些會(huì)用到高分辨率的GUI顯示方面,內(nèi)部RAM不夠用了)。雖然前面提到的xip那四個(gè)文件(兩個(gè).c和兩個(gè).h)里面的fsl_flexspi_nor_boot.c文件有定義dcd_sdram這個(gè)常量,不過(guò)很快就會(huì)發(fā)現(xiàn)這個(gè)常量數(shù)組里面的數(shù)據(jù)很大且看不出什么意義來(lái)(看不出意義就意味著不知道怎么修改),這是因?yàn)檫@個(gè)常量數(shù)組里面是編譯后的可執(zhí)行命令,它是根據(jù)不同的SDRAM編譯后的結(jié)果,也就意味著不同的SDRAM這個(gè)數(shù)組是不一樣的,這就尷尬了,客戶如果不是使用EVK板載的SDRAM的話該怎么搞呢?哈哈,這個(gè)倒是不用擔(dān)心,官方很快會(huì)推出一個(gè)輔助工具來(lái)生成不同SDRAM的DCD常量數(shù)組,不過(guò)在此之前我們也不能干等著吧,所以本章節(jié)的“加餐”就是提出一種workaround先提前解決下這個(gè)問(wèn)題。

我們要知道,在系統(tǒng)上電前無(wú)論代碼還是數(shù)據(jù)都是存在SPI Flash這些非易失存儲(chǔ)介質(zhì)里面的,待上電后程序會(huì)有一個(gè)Copy過(guò)程將數(shù)據(jù)或者想要在RAM里執(zhí)行的代碼copy到RAM里面去,對(duì)內(nèi)部RAM來(lái)講無(wú)所謂(因?yàn)橐簧想妰?nèi)部的SRAM就已經(jīng)初始化完成了)而對(duì)外部SDRAM來(lái)說(shuō)是需要事先初始化RT105x的SDRAM控制器才能往該SDRAM可尋址的空間copy內(nèi)容的。幸運(yùn)的是在Copy之前我們是有段緩沖時(shí)間的,恰恰就是這段緩沖時(shí)間給了我們有可以不使用DCD配置的機(jī)會(huì)(實(shí)際上DCD也是ROM在跳到應(yīng)用代碼之前讀取其內(nèi)容對(duì)SDRAM進(jìn)行初始化)。以IAR的啟動(dòng)代碼為例,打開startup_MIMXRT1052.s文件找到CPU的起始入口Reset_Handler如下圖,執(zhí)行的Copy過(guò)程實(shí)際上是在__iar_program_start這個(gè)函數(shù)里面實(shí)現(xiàn)的(具體內(nèi)容使用的是IAR自己的庫(kù), Keil是在__main里實(shí)現(xiàn)的),而在該函數(shù)之前(即在SystemInit函數(shù)里面)我們只需要將SDRAM初始化好讓其Ready了就不會(huì)影響后續(xù)數(shù)據(jù)的copy和使用,所以下面我就簡(jiǎn)單介紹下具體操作方法。

(1)仍然是在當(dāng)前hello world工程下,點(diǎn)擊IAR菜單欄Project->Edit Configurations繼續(xù)新建一個(gè)工程配置并以上面的HyperFlash_bootok為藍(lán)本將新的配置命名為“flexspi_code_sdram_data”如下圖,然后點(diǎn)擊Ok進(jìn)入該配置模式下;

(2)打開system_MIMXRT1052.c系統(tǒng)配置文件,也就是SystemInit函數(shù)所在的文件里面添加如下圖所示SDRAM初始化相關(guān)的函數(shù)并在SystemInit的最后調(diào)用就可以在使用SDRAM之前將其初始化(具體修改后的源文件見(jiàn)隨文檔附帶的壓縮包),而且初始化函數(shù)均是以C語(yǔ)言形式讀寫配置SDRAM相關(guān)寄存器,這樣的話即使SDRAM更換了也可以隨時(shí)修改初始化寄存器配置以適配不同的SDRAM了,俗話說(shuō)未知是最可怕的,而一旦都是開放的話就沒(méi)那么難了。至于SDRAM這塊的初始化是怎么找到的呢,實(shí)際上就是將SDRAM的預(yù)處理文件(當(dāng)前目錄下的evkmimxrt1050_sdram_init.mac)里面的命令用C語(yǔ)言實(shí)現(xiàn)了而已;

(3)由于仍然是為了兼容性問(wèn)題,上面使用了預(yù)編譯命令判斷HYBERFLASH_SDRAM宏來(lái)決定是否初始化SDRAM,所以在當(dāng)前工程配置下需要添加HYBERFLASH_SDRAM宏聲明以使在當(dāng)前工程配置下SDRAM初始化生效;

(4)然后需要修改下鏈接文件,將數(shù)據(jù)都分配到SDRAM地址范圍內(nèi),將MIMXRT1052xxxxx_hyperflash_nor_bootok.icf復(fù)制后重命名為MIMXRT1052xxxxx_flexspi_code_sdram_data.icf,打開該文件,添加data3相關(guān)信息之后保存該鏈接文件,并在Options->Linker文件里選擇新的鏈接文件(源文件見(jiàn)隨文檔附帶的壓縮包),點(diǎn)擊確定保存配置;

(5)一切都修改完畢之后,點(diǎn)擊編譯鏈接,再打開.map文件即可看到所有的數(shù)據(jù)變量已經(jīng)被分配到外部SDRAM的尋址空間里面了,最后再點(diǎn)擊debug將代碼下載到外部SPI Flash里面(注意SW7啟動(dòng)模式記得修改成HyperFlash啟動(dòng),因?yàn)楸纠友菔镜氖莄ode跑在HyperFlash里,數(shù)據(jù)跑在SDRAM里),這樣就完美實(shí)現(xiàn)代碼在SPI Flash里執(zhí)行而數(shù)據(jù)跑在SDRAM里。當(dāng)然,hello world本身沒(méi)多少數(shù)據(jù),大家可以把該功能照本宣科的poring到復(fù)雜一點(diǎn)的應(yīng)用里面或者在當(dāng)前工程里面自己memory alloc一段足夠大的數(shù)據(jù)區(qū),然后讀修改寫的去操作以測(cè)試該方法的可靠性,我這里就不多說(shuō)了。

GD和Winbond 3.3v QSPI Flash啟動(dòng)4

在第2.2章節(jié)里我已經(jīng)介紹了RT1050 EVK板載1.8v ISSI的QSPI Flash的啟動(dòng)方法,不過(guò)經(jīng)過(guò)一段時(shí)間客戶的反饋,實(shí)際上市面上常用的QSPI Flash目前以GD和Winbond的3.3v產(chǎn)品居多,物美價(jià)廉且采購(gòu)渠道豐富,所以我特意增加了第4章用來(lái)專門介紹下GD和Winbond 3.3v QSPI Flash啟動(dòng)方法并修改優(yōu)化了Keil下對(duì)這兩家QSPI Flash的燒寫算法供客戶在keil下擦寫和debug。

硬件上仍然是以我們官方RT1050的EVK板子為調(diào)試平臺(tái),在2.2章節(jié)的硬件改動(dòng)基礎(chǔ)上焊掉ISSI的QSPI Flash,換成GD的GD25Q32CSIG 3.3v QSPI Flash(3腳和7腳仍然上拉電阻到VDD),然后將下圖中EVK板子R49的0歐姆電阻去掉,R301用0歐姆電阻短接,即將Flash電源由之前的1.8v改成3.3v,其他部分硬件與2.2章節(jié)保持一致,接下來(lái)我介紹Keil環(huán)境下的配置方法(前面的示例用的IAR,這次用keil讓大家對(duì)IAR和keil下的開發(fā)配置都熟悉一遍):

(1)首先打開Keil下SDK開發(fā)包的hello_world_xip工程(路徑demo_apps\hello_world_xip\mdk,Keil自帶xip的工程),默認(rèn)只有hello_world_xip Flexspi_nor_debug和hello_world_xip Flexspi_nor_release兩個(gè)跑在板載HyperFlash的工程配置,點(diǎn)擊Keil菜單欄Project->Manage->Project Items,我們新添加一個(gè)工程配置hello_world_xip Qspi_nor_debug如下圖,然后選擇該工程配置為當(dāng)前工程,最后點(diǎn)擊OK確認(rèn):

(2)在新建的工程配置里,右鍵工程Options->C/C++,添加QSPI_BOOT和XIP_EXTERNAL_FLASH這兩個(gè)宏如下圖1,然后打開工程目錄下xip->fsl_flexspi_nor_flash.c文件,參考2.2章節(jié)中(2)點(diǎn),手動(dòng)添加QSPI的Flash Configuration Parameters元素信息如下圖2,有一點(diǎn)不同的是我們官方板子的ISSI QSPI Flash的最高時(shí)鐘可以到133MHz,而Winbond的QSPI最高到80MHz,GD QSPI最高到120MHz,我板子上自己焊了一塊GD的GD32Q32CSIG QSPI Flash,所以將serialClkFreq設(shè)定為kFlexSpiSerialClk_100MHz,然后sflashA1Size改成4M Bytes;

(3)由于keil下自帶了xip的工程,所以我們就直接復(fù)用其現(xiàn)成的.scf鏈接文件即可不用做修改,如下圖Options->Linker。而且keil下也已經(jīng)添加了Keep變量以防止xip這幾個(gè)元素信息因?yàn)槌绦蚶餂](méi)有調(diào)用而自動(dòng)被編譯器優(yōu)化掉(注意:下圖顯示窗口有限,實(shí)際上要keep的信息段包括.boot_hdr.ivt,.boot_hdr.boot_data,.boot_hdr.dcd_data和.boot_hdr.conf,格式參考下圖);

(4)至此我們編譯整個(gè)工程,最后打開生成的.map文件如下圖可以看到我們想要的幾個(gè)QSPI啟動(dòng)必須的元素信息頭都已經(jīng)正確的分配到image文件里了;

(5)支持QSPI啟動(dòng)的完整image文件通過(guò)以上幾步我們已經(jīng)解決了,接下來(lái)要解決keil下download、Erase和debug需要的QSPI Flash燒寫算法問(wèn)題,本文檔附帶的壓縮包文件里路徑Firmware\Keil_Algorithm下MIMXRT_QSPIFLASH.FLM文件為我已經(jīng)優(yōu)化修改好的可以支持ISSI,GD和Winbond燒寫的Flash算法,將其copy到keil安裝路徑下C:\Keil_v5\ARM\Flash即可,然后右鍵工程options->Debug-> CMSIS-DAP debugger,進(jìn)入settings->Flash Download,點(diǎn)擊Add找到如下圖所示的MIMXRT_QSPIFLASH(4KB Sec),另外建議給Flash算法預(yù)留的RAM空間大一些否則可能會(huì)導(dǎo)致算法運(yùn)行失敗,因?yàn)檫@個(gè)flash算法比較占空間,我這里修改成了0x4000大小是沒(méi)有問(wèn)題的;

(6)設(shè)置完畢之后,我們?cè)俅沃匦戮幾g整個(gè)工程,然后點(diǎn)擊F8或者keil菜單欄Flash->Download即可完成對(duì)外部QSPI的擦除和寫入,待燒寫完畢之后我們點(diǎn)擊debug即可正常調(diào)試(建議:如果程序做了修改,在編譯之后進(jìn)入debug之前先Download一次,再點(diǎn)debug),重新斷電之后程序也可以。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1673

    瀏覽量

    151310
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1790

    瀏覽量

    95185

原文標(biāo)題:【博文精選】i.MXRT1050 從外部QSPI Nor Flash啟動(dòng)

文章出處:【微信號(hào):ChinaAET,微信公眾號(hào):電子技術(shù)應(yīng)用ChinaAET】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    串行Nor Flash的結(jié)構(gòu)和參數(shù)特性(1)

    引言:串行Nor Flash是一類使用比較多的存儲(chǔ)器件,在特殊應(yīng)用場(chǎng)景中具有不可替代的地位,本節(jié)是數(shù)字存儲(chǔ)器件系列第一節(jié),介紹串行Nor
    發(fā)表于 08-11 15:44 ?4164次閱讀
    <b class='flag-5'>串行</b><b class='flag-5'>Nor</b> <b class='flag-5'>Flash</b>的結(jié)構(gòu)和參數(shù)特性(1)

    什么是串行Nor Flash?串行Nor Flash的結(jié)構(gòu)和參數(shù)特性

    引言:串行Nor Flash是一類使用比較多的存儲(chǔ)器件,在特殊應(yīng)用場(chǎng)景中具有不可替代的地位,本節(jié)是數(shù)字存儲(chǔ)器件系列第一節(jié),介紹串行Nor
    的頭像 發(fā)表于 09-05 10:09 ?4575次閱讀
    什么是<b class='flag-5'>串行</b><b class='flag-5'>Nor</b> <b class='flag-5'>Flash</b>?<b class='flag-5'>串行</b><b class='flag-5'>Nor</b> <b class='flag-5'>Flash</b>的結(jié)構(gòu)和參數(shù)特性

    關(guān)于6657使用SPI連接的NOR啟動(dòng)的問(wèn)題

    您好,1,DSP的程序可以存到SPINOR flash啟動(dòng)嗎?如果可以的話,DSP開機(jī)是怎么把程序讀入dsp內(nèi)部的呢?此時(shí),DSP里是沒(méi)有程序的。2,
    發(fā)表于 06-21 06:59

    i.MXRTxxx系列ROM中靈活的串行NOR Flash啟動(dòng)硬復(fù)位引腳選擇

    今天痞子衡給大家介紹的是i.MXRTxxx系列ROM中靈活的串行NOR Flash啟動(dòng)硬復(fù)位引腳選擇?! £P(guān)于 i.MXRT 系列 BootROM 中
    發(fā)表于 12-21 06:34

    旺宏并行串行NOR Flash對(duì)比參考指南

    并行NOR Flash每次傳輸多個(gè)bit位的數(shù)據(jù),而串行NOR Flash每次傳輸一個(gè)bit位的數(shù)據(jù)。并行
    發(fā)表于 03-09 16:06 ?54次下載

    旺宏串行NOR Flash簡(jiǎn)介

    串行NOR Flash介紹,串行NOR Flash分類、串行
    發(fā)表于 03-10 14:52 ?30次下載

    LPC1110 串行NOR Flash存儲(chǔ)方案

    LPC1110 串行NOR Flash存儲(chǔ)方案
    發(fā)表于 09-29 19:03 ?11次下載
    LPC1110 <b class='flag-5'>串行</b><b class='flag-5'>NOR</b> <b class='flag-5'>Flash</b>存儲(chǔ)方案

    串行SPI NOR閃存與并行NOR閃存之間的對(duì)比

    NOR閃存由于其可靠的數(shù)據(jù)存儲(chǔ)而已在嵌入式設(shè)備中廣泛使用了很長(zhǎng)時(shí)間。對(duì)于某些低功耗應(yīng)用,串行SPI NOR閃存變得比并行NOR閃存設(shè)備更受歡
    發(fā)表于 03-03 16:36 ?2097次閱讀

    AN017 基于Jlink燒錄文件到SPI Nor Flash的方法

    AN017 基于Jlink燒錄文件到SPI Nor Flash的方法
    發(fā)表于 02-27 18:21 ?0次下載
    AN017 基于Jlink燒錄文件到<b class='flag-5'>SPI</b> <b class='flag-5'>Nor</b> <b class='flag-5'>Flash</b>的方法

    一文了解SPI NAND FlashSPI NOR Flash的區(qū)別

    的并行口NOR Flash不能硬件上兼容(數(shù)據(jù)線和地址線的數(shù)量不一樣),并且封裝大,占用PCB板的位置較大,逐漸被SPI串行接口)的 NOR
    的頭像 發(fā)表于 03-06 09:49 ?7937次閱讀

    深入i.MXRT1050系列ROM中串行NOR Flash啟動(dòng)初始化流程

    我們知道外部串行NOR Flash是接到i.MXRT的FlexSPI外設(shè)引腳上,有時(shí)串行NOR Flas
    的頭像 發(fā)表于 06-02 17:43 ?1883次閱讀
    深入i.MXRT1050系列ROM中<b class='flag-5'>串行</b><b class='flag-5'>NOR</b> <b class='flag-5'>Flash</b><b class='flag-5'>啟動(dòng)</b>初始化<b class='flag-5'>流程</b>

    TWS藍(lán)牙耳機(jī)SPI NOR Flash

    藍(lán)牙耳機(jī)大量出貨的推動(dòng)下,NOR?Flash帶來(lái)了巨大的商機(jī)。 ? ? ??TWS藍(lán)牙耳機(jī)必須配備NOR?Flash,因?yàn)樗懈嗟墓δ?。為了存?chǔ)大量的固件和代碼程序,需要外擴(kuò)一個(gè)
    的頭像 發(fā)表于 07-31 14:33 ?1134次閱讀

    i.MX RT500/600系列上串行NOR Flash雙程序可交替啟動(dòng)設(shè)計(jì)

    i.MX RT500/600系列上串行NOR Flash雙程序可交替啟動(dòng)設(shè)計(jì)
    的頭像 發(fā)表于 10-27 09:36 ?699次閱讀
    i.MX RT500/600系列上<b class='flag-5'>串行</b><b class='flag-5'>NOR</b> <b class='flag-5'>Flash</b>雙程序可交替<b class='flag-5'>啟動(dòng)</b>設(shè)計(jì)

    恩智浦i.MX RT1060/1010上串行NOR Flash冗余程序啟動(dòng)設(shè)計(jì)

    恩智浦i.MX RT1060/1010上串行NOR Flash冗余程序啟動(dòng)設(shè)計(jì)
    的頭像 發(fā)表于 09-26 16:53 ?1073次閱讀
    恩智浦i.MX RT1060/1010上<b class='flag-5'>串行</b><b class='flag-5'>NOR</b> <b class='flag-5'>Flash</b>冗余程序<b class='flag-5'>啟動(dòng)</b>設(shè)計(jì)

    物聯(lián)網(wǎng)行業(yè)存儲(chǔ)方案詳解_SPI NOR Flash

    SPI NOR FLASH存儲(chǔ)器在初始響應(yīng)和啟動(dòng)時(shí)提供高可靠性,并具有低時(shí)延。這一特性對(duì)于物聯(lián)網(wǎng)設(shè)備至關(guān)重要,因?yàn)槲锫?lián)網(wǎng)設(shè)備通常需要快速啟動(dòng)
    的頭像 發(fā)表于 09-24 14:39 ?1040次閱讀
    物聯(lián)網(wǎng)行業(yè)存儲(chǔ)方案詳解_<b class='flag-5'>SPI</b> <b class='flag-5'>NOR</b> <b class='flag-5'>Flash</b>
    主站蜘蛛池模板: 竹北市| 盘山县| 辽阳县| 陆河县| 九龙城区| 莱芜市| 本溪市| 德兴市| 吉隆县| 栖霞市| 昌宁县| 中宁县| 饶阳县| 五大连池市| 崇仁县| 密山市| 广昌县| 闽清县| 香格里拉县| 鄂尔多斯市| 皋兰县| 太原市| 洪洞县| 环江| 邹平县| 巴林右旗| 昔阳县| 和政县| 大足县| 岳阳县| 桐乡市| 友谊县| 科尔| 临江市| 南康市| 休宁县| 鹤壁市| 华容县| 湄潭县| 定日县| 夏津县|