痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU啟動那些事(10.A)- FlexSPI NAND啟動時間(RT1170)

2023-07-29 15:00:23

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1170 FlexSPI NAND啟動時間

  本篇是 i.MXRT1170 啟動時間評測第四彈,前三篇分別給大家評測了 Raw NAND 啟動時間(基於 MIMXRT1170-EVK_Rev.B)、Serial NOR 啟動時間(基於 MIMXRT1170-EVB_Rev.A2)、1bit SPI NOR 恢復啟動時間(基於 MIMXRT1170-EVK_Rev.C)。最近痞子衡剛寫了篇 《i.MXRT從Serial NAND啟動》,趁熱打鐵,索性在新板卡 MIMXRT1170-EVKB_Rev.B 上再測一下 Serial NAND 的啟動時間(這裡指在 ITCM 執行,暫不考慮在 SDRAM 執行)。

一、準備工作

1.1 知識儲備

  除了依賴的底層外設型別不同之外,Serial NAND 啟動流程與 Raw NAND 啟動流程幾乎是一致的,因為儲存媒介角度而言兩者都是 NAND。我們知道 NAND 中僅能放置 Non-XIP Application,其不支援原地執行,所以需要 BootROM 來完成 Application 拷貝工作(從 NAND 到 ITCM),為了輔助 BootROM 完成工作,我們需要在 NAND 中放一些特殊資料(即下面的 FCB, DBBT, IVT)。

  BootROM 首先從 NAND 中讀取 FCB(此時是利用 eFuse 0x940 和 0xC80 裡的簡化時序設定選項),FCB 中含有三類資訊:使用者設定的完整時序設定資料(可選的)、DBBT 位置,IVT 位置。BootROM 首先會檢查是否存在完整時序設定資料,如果有,則使用這個資料重新設定 NAND 存取時序。然後 BootROM 會繼續獲取 DBBT 資料,獲知當前 NAND 的壞塊資訊,接下來便是根據 IVT 資訊獲取 Application 資料完成拷貝(拷貝過程中需要避開壞塊)。

1.2 時間界定

  關於時間起點和終點,參考《FlexSPI NOR啟動時間》 裡的1.2節,方法保持一致。EVKB_Rev.B 上時間起點位置 POR 直接引到了 J92-2,無需額外飛線了,不過這個點位有很多電容,會導致電壓上升時間緩慢,影響起點選擇,後面會特別備註。

1.3 製作應用程式

  關於應用程式製作,參考《SEMC NAND啟動時間》 裡的1.3節。這次測試對長度方面做一些優化,程式碼改動後的測試工程編出來大小是 21516 bytes,我們可以用二進位制編輯器開啟 .bin 檔案在後面直接插入一些資料將其湊整成 24KB,按此方法可以多做幾個不同長度的 image。

1.4 下載應用程式

  應用程式的下載需藉助痞子衡開發的 NXP-MCUBootUtility 工具(v5.2.1版本及以上),我們需要對 EVKB 板卡做一些改動,將原 U23 - NOR Flash 改為 GigaDevice GD5F1GQ5UEYIG。

  翻看 GD5F1GQ5UEYIG 的資料手冊,它的總容量是 1Gb,Page Size 是 2KB,最高速度可達 133MHz,因此使用 NXP-MCUBootUtility 下載時做如下設定(不同測試,我們僅需調整 Max Frequency 選項即可):

1.5 示波器抓取訊號

  一切準備就緒,可以用示波器抓 NAND 啟動時間了。這次痞子衡偷了個懶,就測量兩路訊號,通道一監測主晶片 POR 訊號,通道二監測 LED GPIO 訊號。

二、開始測試

2.1 測試結果

  在公佈結果之前,痞子衡先帶大家分析一下示波器抓取的啟動時間波形,方便大家理解後續表格裡的各項組成。POR 訊號電壓上升時間比較緩慢,其供電來自於 VDD_1V8,我們時間起點暫取其標準有效值 70% - 1.2V 處。

  現在讓我們看結果吧,痞子衡基於 Flash 速度和 App 長度組合做了很多測試,結果如下表所示(注:表中結果都是在 50M 次/秒的取樣率下所得):

Flash型號 App長度 Flash Timing模式 測量啟動時間 修正啟動時間
GD5F1GQ5UEYIG 24KB 30MHz 11.66 ms 10.88 ms
50MHz 10.26 ms 9.48 ms
60MHz 9.86 ms 9.08 ms
72MHz 9.46 ms 8.68 ms
80MHz 9.32 ms 8.54 ms
100MHz 9.1 ms 8.32 ms
133MHz 8.86 ms 8.08 ms
240KB 30MHz 48.06 ms 47.28 ms
50MHz 34.66 ms 33.88 ms
60MHz 29.46 ms 28.68 ms
72MHz 26.66 ms 25.88 ms
80MHz 24.26 ms 23.48 ms
100MHz 22.46 ms 21.68 ms
133MHz 21.76 ms 20.98 ms

2.2 結果修正

  啟動時間包含 BootROM 和 BootFlash 時間,因為這次測試痞子衡沒有拉出 NAND CS# 訊號,所以無法直接測量出 BootROM 時間,但是可以根據結果推算,選取 24KB 和 240KB 在 30MHz 下測試的兩組結果:

BootROM_time + 24KB_60MHz_BootFlash_time  = 9.86ms
BootROM_time + 240KB_60MHz_BootFlash_time = 29.46ms
24KB_60MHz_BootFlash_time * 10 = 240KB_60MHz_BootFlash_time(假定)

得出 BootROM_time = 7.68ms

  前幾篇測試痞子衡得到的 BootROM 時間都是 6.9ms,看來時間起點 POR 按 70% VDD_1V8 的選擇偏早,應該要往後再移一些,如果修正結果的話,那上表裡的所有結果全部要再減去 (7.68-6.9)ms 才是更精確的啟動時間結果。

  至此,恩智浦 i.MX RT1170 FlexSPI NAND 啟動時間痞子衡便介紹完畢了,掌聲在哪裡~~~

歡迎訂閱

文章會同時釋出到我的 部落格園主頁CSDN主頁知乎主頁微信公眾號 平臺上。

微信搜尋"痞子衡嵌入式"或者掃描下面二維條碼,就可以在手機上第一時間看了哦。