加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

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

2020/07/13
107
閱讀需 7 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

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

?

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

?

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

?

?

一、ROM API 簡介

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

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

?


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

?


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

?


二、API 之 FlexSPI 驅(qū)動

2.1 FlexSPI 驅(qū)動原型

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

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


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

?


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

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


2.3 FlexSPI 配置變量初始化

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

?

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

?

?

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

?

?

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

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

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