• 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

什么?這三款i.MXRT型號也開放了IAP API?

2020/07/13
85
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是i.MXRT1050/1020/1015 系列 ROM 中的 FlexSPI 驅(qū)動 API 使用

?

今天痞子衡去 4S 店給愛車做保養(yǎng)了,保養(yǎng)一次要等兩小時,閑來無聊就寫了這篇文章打發(fā)時間,正好痞子衡技術(shù)交流群里有朋友也在問這個主題,急人所急是痞子衡的一大特質(zhì)(此處請允許我裝一下)。

?

本篇是?利用 i.MXRT1xxx 系列 ROM 提供的 FlexSPI driver API 可輕松 IAP》?的續(xù)集,上篇文章基本上把 ROM API 原理及使用講得很透徹了,但文中賣了一個關(guān)子,即 i.MXRT1xxx 系列一共出了 7 款型號,但并不是每個型號都開放了 ROM API,最早誕生的三款型號(105x、1021、1015)就并沒有開放 API(不是沒有 API,而是沒有嚴格測試),隨著 ROM API 的優(yōu)點逐漸被大家意識到,客戶要求 API 開放的呼聲也越來越高,因此恩智浦研發(fā)團隊對未開放的 API 做了測試,明確功能一切正常后,終于官宣了。所以今天痞子衡著重講這三款未開放 API 的 RT 型號在 API 使用上跟主流 RT 型號(如 i.MXRT1060)有什么區(qū)別。

?

?

一、ROM API 簡介

1.1、API 設(shè)計實現(xiàn)

關(guān)于 i.MXRT1050/1020/1015 API 設(shè)計原理,這里就不予贅述了,因為跟 i.MXRT1060 中是一樣的。咱們直接看它們的 API 原型 bootloader_api_entry_t,細心的朋友會發(fā)現(xiàn)在原型定義上跟 i.MXRT1060 是有區(qū)別的,結(jié)構(gòu)體中前 3 個成員順序上不一樣,其實這是早期的原型定義,存在不合理的地方,顯然 version 放第一個才符合 API 標準定義,因此這在 i.MXRT1060 中得到了改進。此外在后面 API 分組功能上也差異較大,不過我們最在意的 FlexSPI NOR 驅(qū)動 API 在就行。

?


下面是 i.MXRT1050 中的 g_bootloaderTree 實例,其實只真正提供了 HAB、FlexSPI NOR、NAND ECC 三類 API:

?


下面是 i.MXRT1020/1015 中的 g_bootloaderTree 實例,這里甚至只提供了 FlexSPI NOR API,沒辦法,BootROM 空間有限:

?


二、API 之 FlexSPI 驅(qū)動

2.1 FlexSPI 驅(qū)動原型

flexspi_nor_driver_interface_t 是 FlexSPI NOR 驅(qū)動的原型,原型中定義了全部的 API 函數(shù),但具體在每個 RT 型號里并不是都有實例。

下面是 i.MXRT1050 中的 g_flexspiNorDriverInterface 實例,缺少了 get_config()函數(shù)實現(xiàn):


下面是 i.MXRT1020/1015 中的 g_flexspiNorDriverInterface 實例,除了缺少 get_config()函數(shù),還缺少 erase_all()函數(shù)實現(xiàn):

?


2.2 FlexSPI 驅(qū)動使用示例

根據(jù)前面介紹,我們知道未開放的 API 主要缺少 get_config()函數(shù),其他都是一樣的,但是別小看這個 get_config()函數(shù),它可是 API 簡便易用的核心所在,現(xiàn)在沒有了這個函數(shù),我們只能根據(jù)板子上的 Flash 型號去手工提供 512bytes 的 flexspi_nor_config_t 變量。


2.3 FlexSPI 配置變量初始化

那么如何初始化這 512bytes 的 flexspi_nor_config_t 變量呢,這就說來話長了,痞子衡講一個最常見的四線 QSPI Flash 的配置吧。

?

我們知道 i.MXRT1060-EVK 上默認連的是 ISSI 的 8MB QSPI Flash,SDK XIP 工程里默認使用了它的配置,在 SDK_2.x.x_EVK-MIMXRT1060boardsevkmimxrt1060xipevkmimxrt1060_flexspi_nor_config.c 中定義了常量 qspiflash_config,我們可以參考這個常量定義。

?

?

qspiflash_config 適用于四線、100MHz、8MB 的 Flash,如果你的 QSPI Flash 在大小和速度上與它不同,可以做相應(yīng)調(diào)整。不過這個 qspiflash_config 主要是給 ROM 啟動用的,而 ROM 啟動僅需要讀 Flash,因此這個配置中 LUT 僅有 Read,而我們需要的 API 一般都要實現(xiàn)擦除和編程,因此要修改其 lookupTable 如下:

?

?

至此,i.MXRT1050/1020/1015 系列 ROM 中的 FlexSPI 驅(qū)動 API 使用痞子衡便介紹完畢了,掌聲在哪里~~~

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

碩士畢業(yè)于蘇州大學(xué)電子信息學(xué)院,目前就職于恩智浦(NXP)半導(dǎo)體MCU系統(tǒng)部門,擔任嵌入式系統(tǒng)應(yīng)用工程師。痞子衡會定期分享嵌入式相關(guān)文章