對(duì)于以i.MX RT 這類沒(méi)有內(nèi)部NVM (Non-Volatile Memory) 的 MCU 為主控的項(xiàng)目來(lái)說(shuō),為其選配一顆 NVM 作為代碼存儲(chǔ)器是頭等大事,而串行 NOR Flash 是最常見(jiàn)的 NVM 選擇。
串行 NOR Flash 要能被i.MX RT正常啟動(dòng),其固定偏移處(0x0/0x400)一般要求放置一個(gè)配套啟動(dòng)頭(FDCB),系統(tǒng)上電 BootROM 會(huì)用 30MHz 1bit SPI SDR 時(shí)序模式去讀取這個(gè)啟動(dòng)頭來(lái)獲取當(dāng)前 Flash 的相關(guān)屬性(主要是用戶設(shè)定的時(shí)序模式)從而進(jìn)一步配置片內(nèi) FlexSPI 模塊以指定的時(shí)序模式去啟動(dòng) Flash 里的固件應(yīng)用程序。
到了項(xiàng)目量產(chǎn)階段,尤其是出貨量大的消費(fèi)類產(chǎn)品,我們往往不會(huì)僅選擇某一 Flash 廠商產(chǎn)品(價(jià)格因素,供貨因素等),這時(shí)候就不得不考慮一個(gè)問(wèn)題,如果選擇的是特性不完全一致的兩顆 Flash,那么下載進(jìn) Flash 的固件應(yīng)用程序能不能保持一樣(其實(shí)主要就是下圖中的 FDCB1/2 差異問(wèn)題怎么解決)?今天就跟大家討論一下這個(gè)問(wèn)題:
注:本文主要針對(duì)的是普通四線 QuadSPI / 八線 OctalSPI 類型的串行 NOR Flash。
一、影響多Flash型號(hào)量產(chǎn)的因素
我們知道導(dǎo)致下載進(jìn)不同 Flash 里的固件程序,有差異的主要原因是 i.MX RT 配套啟動(dòng)頭(FDCB),這個(gè) FDCB 描述了 Flash 的基本信息(Device 容量、速度、讀模式命令等),F(xiàn)lash 屬性不同,F(xiàn)DCB 也會(huì)跟著變化,所以我們先來(lái)介紹下有哪些可能的因素會(huì)影響 FDCB 內(nèi)容:
1.1 QE bit位置
首先是 QE bit 使能操作的差異。
很多 Flash 出廠時(shí) QE bit 并沒(méi)有被使能,量產(chǎn)過(guò)程中燒錄器有時(shí)候也未必去使能 QE bit(一線模式編程相比 Multi I/O 模式編程對(duì)量產(chǎn)時(shí)間影響不大),這種情況在 FDCB 里需要加上使能 QE bit 操作,而 QE bit 在 Flash 內(nèi)部寄存器里的定義以及寫入命令有好幾種,詳見(jiàn)舊文《影響下載/啟動(dòng)的常見(jiàn)因素之QE bit》。
1.2 READ命令中Dummy Cycles數(shù)
使能 QE bit 是為了能讓 Flash 工作在 Multi I/O Fast READ 模式,但這時(shí)候 READ 時(shí)序里會(huì)有 Dummy Cycles 周期(即 Flash 接收到主設(shè)備發(fā)來(lái)的讀命令從而準(zhǔn)備相應(yīng)數(shù)據(jù)的反應(yīng)時(shí)間)。
Flash 的不同工作頻率對(duì)應(yīng)的最小 Dummy Cycles 不同,不同廠商關(guān)于 Dummy Cycles 數(shù)要求也不同,此外如果 Flash 里的默認(rèn) Dummy Cycle 不是對(duì)應(yīng)最高工作頻率的話,要想讓 Flash 工作在最高頻率還需要額外設(shè)置 Flash 相應(yīng)寄存器來(lái)修改 Dummy Cycle(這里的設(shè)置方法也不同),這些 Dummy Cycle 設(shè)定都要體現(xiàn)在 FDCB 里,詳見(jiàn)舊文《調(diào)整Flash工作頻率也需同步設(shè)Dummy Cycle》。
1.3 地址3B/4B模式切換
對(duì)于不高于 16MB 容量的 Flash,在 READ 時(shí)序里一般使用三字節(jié)地址就行了,但是超過(guò) 16MB 的 Flash ,對(duì)其訪問(wèn)就會(huì)涉及三字節(jié)地址以及四字節(jié)地址選擇問(wèn)題,因此避不可免地要考慮 Flash 地址模式切換問(wèn)題,不同廠商的地址模式設(shè)計(jì)以及切換操作也略有不同,F(xiàn)DCB 里同樣要考慮這些,詳見(jiàn)舊文 《16MB以上NOR Flash使用注意》。
1.4 QPI/OPI模式進(jìn)入
如果為了追求極限執(zhí)行性能,一般還會(huì)考慮將 Flash 從 SPI 模式切換到 QPI/OPI 模式,這里不同廠商的模式切換設(shè)計(jì)也可能略有不同,F(xiàn)DCB 也要負(fù)責(zé)這個(gè)工作,詳見(jiàn)舊文《使能串行NOR Flash的QPI/OPI模式》。
1.5 DTR/Continuous read性能模式
當(dāng)然還有一些其它關(guān)于 Flash 性能模式考量,比如 DTR 模式、Continuous read 模式,要想使能這些模式也都需要在 FDCB 里做文章,詳見(jiàn)舊文 《使能串行NOR Flash的DTR模式》、《使能串行NOR Flash的Continuous read模式》。
二、多Flash型號(hào)量產(chǎn)的解決方案
上一節(jié)介紹了有很多因素會(huì)導(dǎo)致 FDCB 不同,這些因素都是多 Flash 型號(hào)量產(chǎn)路上的攔路虎,我們有什么方法能規(guī)避這些因素差異帶來(lái)的問(wèn)題呢?主要有如下兩個(gè)方案:
2.1 BootROM自識(shí)別方案
第一個(gè)方案是利用 i.MXRT 芯片 BootROM 里的功能,詳見(jiàn)舊文 《自識(shí)別特性(Auto Probe)可以無(wú)需FDCB也能從NOR Flash啟動(dòng)》。這個(gè)特性可以讓我們不用提供 FDCB,芯片也能正常從 Flash 里啟動(dòng)固件應(yīng)用程序,這樣也就自然不存在量產(chǎn)過(guò)程中不同 Flash 里固件差異問(wèn)題。但是這個(gè)方案也有幾個(gè)明顯的缺點(diǎn):
缺點(diǎn)一:Auto Probe 特性在 i.MXRT1010/1020/1050 上不可用,僅在 i.MXRT1060/1170/500/600 上可以用。
缺點(diǎn)二:Auto Probe 特性對(duì)于不同 Flash 的支持(尤其是 OctalSPI Flash)可能需要通過(guò)燒寫 i.MXRT 芯片 OTP 來(lái)實(shí)現(xiàn),這樣實(shí)際上是把 FDCB 差異轉(zhuǎn)化到 OTP 差異上了。
缺點(diǎn)三:Auto Probe 特性僅能處理基本的 FDCB 差異(比如 QE,比如 Dummy Cycle),但是一些性能模式相關(guān)的差異不能很好地處理,拓展性不足。
2.2 一線模式FDCB啟動(dòng)+二級(jí)Configurer程序
第二個(gè)方案主要是為了解決方案一里的全部缺點(diǎn),即使用通用的一線低速模式的 FDCB 啟動(dòng)頭給 BootROM 去讀取啟動(dòng),然后再設(shè)計(jì)一個(gè)二級(jí)的 Configurer 程序(被 BootROM 啟動(dòng)的代碼),在這個(gè) Configurer 程序里去做 Flash 差異化的相關(guān)事情并將 FlexSPI 模塊配置到指定時(shí)序模式,最后再由這個(gè) Configurer 程序去啟動(dòng)固件應(yīng)用程序。
這里的Configurer 程序設(shè)計(jì)是關(guān)鍵,而其中最核心的是如何識(shí)別當(dāng)前 Flash 型號(hào),這里要感謝 JEDEC 組織,目前幾乎全部主流 Flash 都支持一線模式下 Read JEDEC 命令(0x9F),返回的 Manufacturer ID 就是每個(gè) Flash 廠商向 JEDEC 組織申請(qǐng)的識(shí)別碼,然后 Memory Type 是各廠商自己定義的型號(hào)系列分類。Configurer 程序結(jié)合這兩個(gè)參數(shù)就可以識(shí)別當(dāng)前 Flash 具體型號(hào),底下就是做不同的代碼分支去處理不同的 Flash 配置即可。
二級(jí)Configurer 程序說(shuō)起來(lái)很簡(jiǎn)單,其實(shí)具體設(shè)計(jì)起來(lái)還是有很多細(xì)節(jié)要考量的(比如 FlexSPI 多次配置中系統(tǒng)時(shí)鐘切換問(wèn)題、應(yīng)用程序跳轉(zhuǎn)等),因此痞子衡開(kāi)源了這個(gè)項(xiàng)目(RT-MFB),并且會(huì)長(zhǎng)期維護(hù)下去,希望將來(lái)能支持盡可能多的 Flash 型號(hào)。第一版是以 MIMXRT595-EVK 上的兩顆 Flash 為原型(IS25WP064A / MX25UW51345G)來(lái)做的。
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7366瀏覽量
163095 -
編程
+關(guān)注
關(guān)注
88文章
3521瀏覽量
93272 -
應(yīng)用程序
+關(guān)注
關(guān)注
37文章
3198瀏覽量
57363
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論