加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 一、整體初始化流程
    • 二、初始化流程差異
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

i.MXRT1060在串行NOR Flash啟動初始化流程上做了哪些優(yōu)化?

2020/12/14
112
閱讀需 7 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是 i.MXRT1060 系列 ROM 中串行 NOR Flash 啟動初始化流程優(yōu)化點(diǎn)。

前段時(shí)間痞子衡寫了一篇 《深入 i.MXRT1050 系列 ROM 中串行 NOR Flash 啟動初始化流程》,那篇文章如果你認(rèn)真讀,你會發(fā)現(xiàn)為了能讓 i.MXRT 系列盡可能地支持來自不同廠商的不同串行 NOR Flash 型號,而且還得發(fā)揮 Flash 最好性能,BootROM 可謂煞費(fèi)苦心,做了很多精心設(shè)計(jì)。

i.MXRT1060 是在 i.MXRT1050 之后發(fā)布的,相比 i.MXRT1050 在 FlexSPI NOR 啟動初始化上有了一些優(yōu)化點(diǎn),今天痞子衡就跟大家聊一聊這些優(yōu)化點(diǎn)(或者說差異的地方):

  • 備注:本文主角是 i.MXRT1060,但內(nèi)容也基本適用 i.MXRT1170,僅細(xì)節(jié)微小差別。

?

一、整體初始化流程

跟上一篇文章一樣,痞子衡重畫了 i.MXRT1060 的 FlexSPI NOR 啟動流程圖,從流程上來看,其和 i.MXRT1050 有兩處主要差異,第一個是步驟 0(冗余 App 啟動支持)和步驟 X(Auto Probe),除此以外,還有一些微小差異(JEDEC 硬件復(fù)位,延時(shí)等待策略等)。

?

二、初始化流程差異

本文不會介紹步驟 X(Auto Probe 特性),主要是說一下其他差異,步驟 X 是個特別重要的改進(jìn),痞子衡會另起一文單獨(dú)介紹。

?

2.1 冗余 App 啟動

第一個要提的便是新增的冗余 App 啟動支持,即步驟 0,痞子衡之前寫過一篇文章 《利用 i.MXRT1060,1010 上新增的 FlexSPI 地址重映射(Remap)功能可安全 OTA》,這篇文章的第二節(jié)講了 i.MXRT1060 上多了一個 Remap 功能,這個功能使得 Flash 里可以存放多份相同鏈接地址的 XIP App(偏移 0x0 處固定放 App1;偏移 0x100000 處(這個地址用戶自定義)放了 App2),借助 Remap 功能可以將 Flash 里 App2 在內(nèi)存映射地址上直接覆蓋到 App1 處,不需要物理上的實(shí)際搬移。

fuse 0x6e0[15:13] - xSPI_FLASH_IMAGE_SIZE,第二份 App 的實(shí)際位置,即填入 Remap 功能的 ADDR_END 寄存器的值。
fuse 0x6e0[23:16] - FLEXSPI_NOR_SEC_IMAGE_OFFSET,第二份 App 的實(shí)際大小,即填入 Remap 功能的 ADDR_OFFSET 寄存器的值。

?

BootROM 中支持冗余 App 啟動,并不是常見的 OTA 用意,而是防 App 誤損壞導(dǎo)致設(shè)備無法啟動,因此 App1 固定在偏移 0x0 地址,App2 永遠(yuǎn)是覆蓋 App1,這意味著 App2 必須跟 App1 一樣都是包含 FDCB, IVT, BootData 等完整啟動頭的 App。BootROM 上電永遠(yuǎn)先嘗試啟動 App1,如 App1 無法啟動,則嘗試啟動 App2。我們知道,多份 App 都損壞是小概率事件。

  • 備注 1:這個功能在 i.MXRT1010 上同樣存在,畢竟 i.MXRT1010 支持 Remap。備注 2:這個功能雖存在于 i.MXRT1170 上,但步驟移到了 FlexSPI 第二次初始化之后。

?

2.2 延時(shí)等待策略

在 i.MXRT1050 FlexSPI NOR 啟動初始化步驟 4 里的善后工作里,有一個借助調(diào)用 microseconds_delay()做延時(shí)以使 FlexSPI 外設(shè)以及 Flash 完全準(zhǔn)備好的操作,這個操作在 i.MXRT1060 上被從步驟 4 移到了步驟 1 前后,即復(fù)位 Flash 前做一次,復(fù)位 Flash 后再做一次。

  • 備注 1:復(fù)位 Flash 前的那一次延時(shí)操作,實(shí)際 hold time 要減去 3ms(如 hold time 設(shè)置小于 3ms,則只減 3ms),因?yàn)閺?fù)位 Flash 前屬于系統(tǒng)上電啟動,ROM 本身執(zhí)行到開始訪問 Flash 就需要時(shí)間,所以 Flash 差不多有近 3ms 的上電等待時(shí)間了。備注 2:hold time 在 fuse 中的位置從 i.MXRT1050 上的 0x450[3:2]被移到了 i.MXRT1060 上的 0x6e0[5:4]。

?

2.3 JEDEC 標(biāo)準(zhǔn)復(fù)位

i.MXRT1060 在復(fù)位 Flash 上多了一個 JEDEC 標(biāo)準(zhǔn)的硬件復(fù)位選項(xiàng),也包含在步驟 1 里面,這個復(fù)位僅針對 Adesto ATXP 系列為代表的 Flash 有效,需要 Flash 本身支持 JEDEC 制定的硬件復(fù)位功能。

至此,i.MXRT1060 系列 ROM 中串行 NOR Flash 啟動初始化流程優(yōu)化點(diǎn)痞子衡便介紹完畢了,掌聲在哪里~~~

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

碩士畢業(yè)于蘇州大學(xué)電子信息學(xué)院,目前就職于恩智浦(NXP)半導(dǎo)體MCU系統(tǒng)部門,擔(dān)任嵌入式系統(tǒng)應(yīng)用工程師。痞子衡會定期分享嵌入式相關(guān)文章