|
大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MXRT上使能NOR Flash的Continuous read模式在軟復(fù)位后無法正常啟動問題的解決經(jīng)驗。0 k# Q5 F0 p' L% f) E
前一篇文章 《在i.MXRT啟動頭FDCB里使能串行NOR Flash的Continuous read模式》 里,痞子衡簡單介紹了Flash的Continuous read模式作用與意義,并且在MIMXRT1170-EVK上嘗試使能了芯成IS25WP128的Continuous read模式做了一次實踐(主要是文中第三節(jié)FDCB啟動頭的改動)。( [7 j% ]: J3 }
但其實在i.MXRT上使能Flash的Continuous read模式是有點小陷阱的,如果你在App代碼里直接插一句 NVIC_SystemReset() 函數(shù)的調(diào)用,即對主控芯片做一次軟復(fù)位,你會發(fā)現(xiàn)芯片沒有從Flash正常啟動,這是因為Flash此時仍處于Continuous read模式,這種情況下BootROM有時不能正常配置讀取Flash內(nèi)容去啟動App。今天痞子衡就來跟大家探討解決這個問題。& o* X8 `8 |' D( _" B5 P" W
本系列會有多篇文章,每篇文章均從一個核心切入點出發(fā),給出一系列具體實現(xiàn)方案。本系列均以MIMXRT1170-EVK板為示例目標(biāo)對象,板載Flash型號為芯成IS25WP128(其他i.MXRT芯片和Flash型號下實現(xiàn)流程也差不多,需查看對應(yīng)數(shù)據(jù)手冊)。一、解決思路我們知道無法啟動問題是由于主芯片發(fā)生軟復(fù)位但Flash仍處于Continuous read模式造成的,要解決這個問題無非如下三個角度,痞子衡會在后面具體實現(xiàn)方案里按這些角度全部搞一次(如果適用的話)。
- e6 ~3 W0 S9 w$ s一、ROM方面不做任何相關(guān)處理,但App在調(diào)用NVIC_SystemReset()做復(fù)位前將Flash先切回到Normal模式;二、App方面不做任何相關(guān)處理,對BootROM相關(guān)配置做一些調(diào)整,讓BootROM也能正常處理處于Continuous read模式的Flash;三、ROM和App聯(lián)合對Flash模式切換做一些特殊處理。二、核心切入點(借助Flash的硬復(fù)位引腳功能)本文找的核心切入點是利用Flash的硬件復(fù)位引腳。Flash的硬件復(fù)位引腳有兩種:一種是獨立的,常見于SOIC-16封裝上(這種情況下對板級設(shè)計有要求,需要在板級設(shè)計時將Flash復(fù)位引腳連到主芯片i.MXRT的GPIO上);另一種是復(fù)用在IO3上的,常用于SOIC-8封裝上。
8 `2 N3 t+ D5 ]1 r, S Y! [如果是獨立的復(fù)位引腳(RESET#),則主芯片GPIO直接做拉低操作即可(注意低電平持續(xù)時間的要求,詳見Flash數(shù)據(jù)手冊);如果是復(fù)用的復(fù)位引腳(RESET#/IO3),則需要先激活I(lǐng)O3的復(fù)位功能,然后做拉低操作。 |
|