你們好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給你們分享的是i.MXRT1060系列ROM中串行NOR Flash啓動初始化流程優化點。html
前段時間痞子衡寫了一篇 《深刻i.MXRT1050系列ROM中串行NOR Flash啓動初始化流程》,那篇文章若是你認真讀,你會發現爲了能讓i.MXRT系列儘量地支持來自不一樣廠商的不一樣串行NOR Flash型號,並且還得發揮Flash最好性能,BootROM可謂煞費苦心,作了不少精心設計。安全
i.MXRT1060是在i.MXRT1050以後發佈的,相比i.MXRT1050在FlexSPI NOR啓動初始化上有了一些優化點,今天痞子衡就跟你們聊一聊這些優化點(或者說差別的地方):微信
- 備註:本文主角是i.MXRT1060,但內容也基本適用i.MXRT1170,僅細節微小差異。
跟上一篇文章同樣,痞子衡重畫了i.MXRT1060的FlexSPI NOR啓動流程圖,從流程上來看,其和i.MXRT1050有兩處主要差別,第一個是步驟0(冗餘App啓動支持)和步驟X(Auto Probe),除此之外,還有一些微小差別(JEDEC硬件復位,延時等待策略等)。app
本文不會介紹步驟X(Auto Probe特性),主要是說一下其餘差別,步驟X是個特別重要的改進,痞子衡會另起一文單獨介紹。性能
第一個要提的即是新增的冗餘App啓動支持,即步驟0,痞子衡以前寫過一篇文章 《利用i.MXRT1060,1010上新增的FlexSPI地址重映射(Remap)功能可安全OTA》,這篇文章的第二節講了i.MXRT1060上多了一個Remap功能,這個功能使得Flash裏能夠存放多份相同連接地址的XIP App(偏移0x0處固定放App1;偏移0x100000處(這個地址用戶自定義)放了App2),藉助Remap功能能夠將Flash裏App2在內存映射地址上直接覆蓋到App1處,不須要物理上的實際搬移。優化
fuse 0x6e0[15:13] - xSPI_FLASH_IMAGE_SIZE,第二份App的實際位置,即填入Remap功能的ADDR_END寄存器的值。 fuse 0x6e0[23:16] - FLEXSPI_NOR_SEC_IMAGE_OFFSET,第二份App的實際大小,即填入Remap功能的ADDR_OFFSET寄存器的值。
BootROM中支持冗餘App啓動,並非常見的OTA用意,而是防App誤損壞致使設備沒法啓動,所以App1固定在偏移0x0地址,App2永遠是覆蓋App1,這意味着App2必須跟App1同樣都是包含FDCB, IVT, BootData等完整啓動頭的App。BootROM上電永遠先嚐試啓動App1,如App1沒法啓動,則嘗試啓動App2。咱們知道,多份App都損壞是小几率事件。.net
- 備註1:這個功能在i.MXRT1010上一樣存在,畢竟i.MXRT1010支持Remap。
- 備註2:這個功能雖存在於i.MXRT1170上,但步驟移到了FlexSPI第二次初始化以後。
在i.MXRT1050 FlexSPI NOR啓動初始化步驟4裏的善後工做裏,有一個藉助調用microseconds_delay()作延時以使FlexSPI外設以及Flash徹底準備好的操做,這個操做在i.MXRT1060上被從步驟4移到了步驟1先後,即復位Flash前作一次,復位Flash後再作一次。設計
- 備註1: 復位Flash前的那一次延時操做,實際hold time要減去3ms(如hold time設置小於3ms,則只減3ms),由於復位Flash前屬於系統上電啓動,ROM自己執行到開始訪問Flash就須要時間,因此Flash差很少有近3ms的上電等待時間了。
- 備註2: hold time在fuse中的位置從i.MXRT1050上的0x450[3:2]被移到了i.MXRT1060上的0x6e0[5:4]。
i.MXRT1060在復位Flash上多了一個JEDEC標準的硬件復位選項,也包含在步驟1裏面,這個復位僅針對Adesto ATXP系列爲表明的Flash有效,須要Flash自己支持JEDEC制定的硬件復位功能。code
至此,i.MXRT1060系列ROM中串行NOR Flash啓動初始化流程優化點痞子衡便介紹完畢了,掌聲在哪裏~~~htm
文章會同時發佈到個人 博客園主頁、CSDN主頁、知乎主頁、微信公衆號 平臺上。
微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就能夠在手機上第一時間看了哦。