大家好,我是痞子衡,是正經(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)痞子衡便介紹完畢了,掌聲在哪里~~~