本篇是《利用i.MXRT1xxx系列ROM提供的FlexSPI driver API可輕松IAP》的續集,上篇文章基本上把ROM API原理及使用講得很透徹了,但文中賣了一個關子,即i.MXRT1xxx系列一共出了7款型号,但并不是每個型号都開放了ROM API,最早誕生的三款型号(105x、1021、1015)就并沒有開放API(不是沒有API,而是沒有嚴格測試),随着ROM API的優點逐漸被大家意識到,客戶要求API開放的呼聲也越來越高,是以恩智浦研發團隊對未開放的API做了測試,明确功能一切正常後,終于官宣了。是以今天痞子衡着重講這三款未開放API的RT型号在API使用上跟主流RT型号(如i.MXRT1060)有什麼差別。
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT1050/1020/1015系列ROM中的FlexSPI驅動API使用。
今天痞子衡去4S店給愛車做保養了,保養一次要等兩小時,閑來無聊就寫了這篇文章打發時間,正好痞子衡技術交流群裡有朋友也在問這個主題,急人所急是痞子衡的一大特質(此處請允許我裝一下)。
本篇是 《利用i.MXRT1xxx系列ROM提供的FlexSPI driver API可輕松IAP》 的續集,上篇文章基本上把ROM API原理及使用講得很透徹了,但文中賣了一個關子,即i.MXRT1xxx系列一共出了7款型号,但并不是每個型号都開放了ROM API,最早誕生的三款型号(105x、1021、1015)就并沒有開放API(不是沒有API,而是沒有嚴格測試),随着ROM API的優點逐漸被大家意識到,客戶要求API開放的呼聲也越來越高,是以恩智浦研發團隊對未開放的API做了測試,明确功能一切正常後,終于官宣了。是以今天痞子衡着重講這三款未開放API的RT型号在API使用上跟主流RT型号(如i.MXRT1060)有什麼差別。
RT晶片型号
是否支援ROM API
是否全功能API
i.MXRT117x
支援
是
i.MXRT1064
i.MXRT106x
i.MXRT105x
未開放 -> 官宣開放
N/A -> 僅少get_config()
i.MXRT1021
N/A -> 少get_config()和erase_all()
i.MXRT1015
i.MXRT1011
否(沒有program()和erase())
關于i.MXRT1050/1020/1015 API設計原理,這裡就不予贅述了,因為跟i.MXRT1060中是一樣的。咱們直接看它們的API原型 bootloader_api_entry_t,細心的朋友會發現在原型定義上跟i.MXRT1060是有差別的,結構體中前3個成員順序上不一樣,其實這是早期的原型定義,存在不合理的地方,顯然version放第一個才符合API标準定義,是以這在i.MXRT1060中得到了改進。此外在後面API分組功能上也差異較大,不過我們最在意的FlexSPI NOR驅動API在就行。
下面是i.MXRT1050中的g_bootloaderTree執行個體,其實隻真正提供了HAB、FlexSPI NOR、NAND ECC三類API:
下面是i.MXRT1020/1015中的g_bootloaderTree執行個體,這裡甚至隻提供了FlexSPI NOR API,沒辦法,BootROM空間有限:
flexspi_nor_driver_interface_t是FlexSPI NOR驅動的原型,原型中定義了全部的API函數,但具體在每個RT型号裡并不是都有執行個體。
下面是i.MXRT1050中的g_flexspiNorDriverInterface執行個體,缺少了get_config()函數實作:
下面是i.MXRT1020/1015中的g_flexspiNorDriverInterface執行個體,除了缺少get_config()函數,還缺少erase_all()函數實作:
根據前面介紹,我們知道未開放的API主要缺少get_config()函數,其他都是一樣的,但是别小看這個get_config()函數,它可是API簡便易用的核心所在,現在沒有了這個函數,我們隻能根據闆子上的Flash型号去手工提供512bytes的flexspi_nor_config_t變量。
那麼如何初始化這512bytes的flexspi_nor_config_t變量呢,這就說來話長了,痞子衡講一個最常見的四線QSPI Flash的配置吧。
我們知道i.MXRT1060-EVK上預設連的是ISSI的8MB QSPI Flash,SDK XIP工程裡預設使用了它的配置,在 \SDK_2.x.x_EVK-MIMXRT1060\boards\evkmimxrt1060\xip\evkmimxrt1060_flexspi_nor_config.c中定義了常量 qspiflash_config,我們可以參考這個常量定義。

qspiflash_config适用于四線、100MHz、8MB的Flash,如果你的QSPI Flash在大小和速度上與它不同,可以做相應調整。不過這個qspiflash_config主要是給ROM啟動用的,而ROM啟動僅需要讀Flash,是以這個配置中LUT僅有Read,而我們需要的API一般都要實作擦除和程式設計,是以要修改其lookupTable如下:
至此,i.MXRT1050/1020/1015系列ROM中的FlexSPI驅動API使用痞子衡便介紹完畢了,掌聲在哪裡~~~
文章會同時釋出到我的 部落格園首頁、CSDN首頁、知乎首頁、微信公衆号 平台上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。
最後歡迎關注痞子衡個人微信公衆号【痞子衡嵌入式】,一個專注嵌入式技術的公衆号,跟着痞子衡一起玩轉嵌入式。
衡傑(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。
專欄内所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]
可以關注痞子衡的Github首頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關于專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回複免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。