痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU啟動那些事(10)- 從Serial NAND啟動

来源:https://www.cnblogs.com/henjay724/archive/2023/07/19/17566968.html
-Advertisement-
Play Games

大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是**恩智浦i.MXRT1xxx系列MCU的Serial NAND啟動**。 最近越來越多的客戶在咨詢 i.MXRT1xxx 從 Serial NAND 啟動的事情,讓這個本來比較冷門的啟動設備突然火熱起來。據痞子衡的瞭解,其實客戶主要目 ...



  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MXRT1xxx系列MCU的Serial NAND啟動

  最近越來越多的客戶在咨詢 i.MXRT1xxx 從 Serial NAND 啟動的事情,讓這個本來比較冷門的啟動設備突然火熱起來。據痞子衡的瞭解,其實客戶主要目的是在應用里基於 Serial NAND 去做文件系統(看起來隨著技術的發展,就文件系統應用或者多媒體數據存儲方面而言 Raw NAND 已經不是絕對優勢了),然後順便用它做應用代碼啟動。藉此機會,今天痞子衡就給大家介紹一下 Serial NAND 上製作、下載、啟動程式的方法:

  • Note:文中貼圖、代碼主要以 i.MXRT1050 為例,其餘 i.MXRT1xxx 系列原理類似。

一、支持的Serial NAND

  Serial NAND 廠商非常多,對應 Serial NAND 晶元型號也很多,如果你在選型時不確定到底該為 i.MXRT 選擇哪一款 Serial NAND 時,可選用下麵四款晶元,痞子衡均實測過:

Macronix MX35LF2G24AD       (120MHz, x4 bits, 2KB Page/128KB Block/2Gb Device,  8-bit/544byte ECC, 3.3V)
Winbond W25N01GV            (104MHz, x4 bits, 2KB Page/128KB Block/1Gb Device,  1-bit/528byte ECC, 3.3V)
GigaDevice GD5F1GQ5UEYIG    (133MHz, x4 bits, 2KB Page/128KB Block/1Gb Device,  4-bit/528byte ECC, 3.3V)
Micron MT29F1G01ABA         (133MHz, x4 bits, 2KB Page/128KB Block/1Gb Device,  8-bit/Sector  ECC, 3.3V)

  需要特別註意的是,與 《i.MXRT從Raw NAND啟動》 里既可使用純軟體 ECC 也可利用 Flash 自帶硬體 ECC 特性不同的是,從 Serial NAND 啟動必須依賴 Flash 自帶硬體 ECC。

二、Serial NAND硬體連接

  除了 i.MXRT1010/1024/1064 不支持 Serial NAND 啟動之外,其餘 i.MXRT1xxx 都可以支持。其中 i.MXRT10xx 系列只支持一組引腳連接組合,而 i.MXRT11xx 則支持多組引腳連接組合。i.MXRT1050 BootROM 支持如下 pinmux 來連接 Serial NAND 去啟動:

  如下是 IMXRT1050EVK12_Rev.A 板上四線 QSPI Flash 連接設計,板載預設 U33 晶元是 Serial NOR Flash,我們可以換成同封裝 Serial NAND,痞子衡就將其換成了 MX35LF2G24AD 來做測試,當然 FLASH_VCC 也相應改成了 3.3V:

三、Serial NAND載入啟動過程

  我們知道 Serial NAND 中僅能放置 Non-XIP Application(鏈接到內部 SRAM 或者 外部 RAM 空間),其啟動載入流程跟 《從 Serial(1-bit SPI) NOR/EEPROM恢復啟動》 載入流程差不多(參考文章第 3 小節)。

  i.MXRT BootROM 中對於 Serial NAND 啟動流程處理和對於 Raw NAND 啟動處理幾乎是一樣的,都是依賴 FCB 和 DBBT 這兩個數據結構(當然 Serial NAND 和 Raw NAND 里對於這兩個數據結構具體成員定義有差異)。關於 FCB 和 DBBT 的使用,痞子衡在《i.MXRT從Raw NAND啟動》一文中三、四小節講得很清楚,這裡不再贅述。

  i.MXRT1050 參考手冊 System Boot 章節里畫了上電啟動時 BootROM 代碼搜索 FCB 和 DBBT 的流程,能找到這兩個數據,應用程式就能夠被正常載入。這裡需要特別註意,FCB 和 DBBT 是在配套 Flashloader 執行過程中動態生成的,因為涉及 NAND Flash 里具體壞塊分佈信息,所以無法在 PC 端直接製作 FCB 和 DBBT,這就意味著我們無法像 NOR Flash 那樣事先得到一個完整的含全部啟動頭(FCB&DBBT&IVT&BD)的 NAND bootable image。

四、下載Application進Serial NAND

  現在假定你已經製作好一個 Bootable image 並且使用 blhost 工具與 Flashloader 建立了基本通信,正要開始將 Bootable image 下載進 Serial NAND。此時我們只需要提供簡化的 12 - 44byte 配置數據就可以完成 Serial NAND 的全部配置,下麵是適用 MX35LF2G24AD 的 Application 下載更新示例:

// 在 SRAM 里臨時存儲 Serial NAND 配置數據(FCB Opt)
blhost -u -- fill-memory 0x20202000 0x4 0xC2000103 // searchCount=2, searchStride = 64 pages, Address type: Block Address, Option Block size: 3 long words
blhost -u -- fill-memory 0x20202004 0x4 0x2020200C // nand opt address
blhost -u -- fill-memory 0x20202008 0x4 0x4004     // image0 從 Block 4 開始,長度最大 4 個 Block

// 在 SRAM 里臨時存儲 Serial NAND 配置數據(NAND Opt)
blhost -u -- fill-memory 0x2020200C 0x4 0xC0020023 // Flash size: 2Gbit, 1 Plane, 64 Pages/Block, 2KB Page Size, Max Freq:60MHz

// 使用 Serial NAND 配置數據去配置 FlexSPI 介面以及寫入完整 FCB, DBBT 數據
blhost -u -- configure-memory 0x101 0x20202000

  上述 fill-memory 命令中 FCB Opt 配置數據組織詳見下表:

  上述 fill-memory 命令中 NAND Opt 配置數據組織詳見下表:

  上表 12 - 44byte 數據提供的配置信息主要是 FCB 和 NAND 屬性。configure-memory 命令執行成功之後,底下只需要將 Bootable image 從 Serial NAND 對應 Block 地址處開始下載即可,具體步驟如下:

// 擦除 Serial NAND 並將 image 下載進 Serial NAND
blhost -u -- flash-erase-region 0x4 0x4 0x101     // 從第4個Block開始擦除,範圍為4個Block長度
blhost -u -- write-memory 0x4 bt_image.bin 0x101  // 從第4個Block開始下載含 ivt, bd 的鏡像文件

  當然以上所有繁雜的命令行操作都可以使用 MCUBootUtility 工具(v5.2.1及以上)來一鍵完成:

五、進入Serial NAND啟動模式

  Application 已經被成功下載進 Serial NAND 卡之後,此時我們便可以開始設置晶元從 Serial NAND 啟動。

  先確定 BOOT_MODE[1:0]=2'b10,即晶元處於 Internal Boot 模式,再來選擇 Boot Device,Boot Device 由 BOOT_CFG1[7:4] 這四個 pin 的輸入狀態決定,其中 Serial NAND 啟動模式為 4'b11xx。

六、配置eFuse啟動Serial NAND

  設置好晶元啟動模式是從 Serial NAND 啟動之後,我們還需要最後關註一下與 Serial NAND 相關的具體特性配置,主要集中在晶元內部 eFuse 0x6e0/0x450 區域里,根據前面配置,這裡我們只需要設置 BOOT_SEARCH_COUNT bit 為 1,其餘保持預設 0 即可。

  這裡單獨解釋下 COL_ADDRESS_WIDTH 預設 0 即 12bits,看起來對應了 4KB Page size,但是因為 ECC 特性,這樣設置下的低 2KB page 空間存真實數據,高 2KB page 空間其實屬於所謂 Spare 空間,會被 Flash 自動用來存放 ECC 校驗碼,不過這個 Spare 空間有效範圍 64byte-128byte 不等(對於 MX35LF2G24AD 則是 128)。

  上述所有步驟全部完成之後,複位晶元你就應該能看到你放在 Serial NAND 里的 Application 已經正常地啟動了。

  至此,恩智浦i.MXRT1xxx系列MCU的Serial NAND啟動痞子衡便介紹完畢了,掌聲在哪裡~~~

歡迎訂閱

文章會同時發佈到我的 博客園主頁CSDN主頁知乎主頁微信公眾號 平臺上。

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

  最後歡迎關註痞子衡個人微信公眾號【痞子衡嵌入式】,一個專註嵌入式技術的公眾號,跟著痞子衡一起玩轉嵌入式。

痞子衡嵌入式-微信二維碼 痞子衡嵌入式-微信收款二維碼 痞子衡嵌入式-支付寶收款二維碼

  衡傑(痞子衡),目前就職於某知名外企半導體公司MCU系統部門,擔任嵌入式系統應用工程師。

  專欄內所有文章的轉載請註明出處:http://www.cnblogs.com/henjay724/

  與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]

  可以關註痞子衡的Github主頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。

  關於專欄文章有任何疑問請直接在博客下麵留言,痞子衡會及時回覆免費(劃重點)答疑。

  痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這篇文章主要介紹了介面的概念、定義和實現,以及顯式/隱式實現介面的場景。文章還對介面和抽象類進行了比較,指出它們的區別。同時,文章提供了詳細的代碼示例,方便讀者理解和實踐。 ...
  • ## 引言 眾所周知,使用線程可以極大的提高應用程式的效率和響應性,提高用戶體驗,但是不可以無節制的使用線程,為什麼呢? ## 線程的開銷 線程的開銷實際上是非常大的,我們從空間開銷和時間開銷上分別討論。 ### 線程的空間開銷 線程的空間開銷來自這四個部分: 1. 線程內核對象(Thread Ke ...
  • 在一些文檔處理中,我們需要對PDF蓋上公司的印章操作,本篇隨筆介紹利用Spire.Pdf實現PDF添加印章的操作,如全章和騎縫章的處理。 ...
  • 模型配置可以通過Fluent API和註解的方式 FluentAPI步驟 新建Products 和Category類 新建Products類 Products public class Product { public int Id { get; set; } public string Name ...
  • ## 一:背景 ### 1. 講故事 如果要分析 Linux上的 .NET程式 CPU 爆高,按以往的個性我肯定是抓個 dump 下來做事後分析,這種分析模式雖然不重但也不輕,還需要一定的底層知識,那有沒有傻瓜式的 CPU 爆高分析方式呢? 相信有很多朋友知道 **B站713事件**,最終就是用 p ...
  • > 註:本文隸屬於《理解ASP.NET Core》系列文章,請查看置頂博客或[點擊此處查看全文目錄](https://www.cnblogs.com/xiaoxiaotank/p/15185288.html) # 概述 在微服務化的架構設計中,網關扮演著重要的看門人角色,它所提供的功能之一就是**限 ...
  • ## 引言 上文[編碼技巧 同步鎖對象的選定](url)中,提到了在C#中,讓線程同步有兩種方式: - 鎖(lock、Monitor等) - 信號量(EventWaitHandle、Semaphore、Mutex) 加鎖是最常用的線程同步的方法,就不再討論,本篇主要討論使用信號量同步線程。 ## W ...
  • [TOC] # PWM脈衝寬調點燈 ## 前言 對於燈等來說有很多種方法,前面介紹了一些基礎的點燈方法,比如直接點燈,按鍵控制點燈,按鍵中斷點燈,但都是比較簡單的一些方法也很基礎,要問我有沒有什麼高級點的點燈方法,答案是有的,在這我要介紹一種高級點燈的方法就是使用PWM進行點燈。 ## 1.什麼是P ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...