天天看點

痞子衡嵌入式:其實i.MXRT1050,1020,1015系列ROM也提供了FlexSPI driver API

本篇是《利用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,我們可以參考這個常量定義。

痞子衡嵌入式:其實i.MXRT1050,1020,1015系列ROM也提供了FlexSPI driver API

  qspiflash_config适用于四線、100MHz、8MB的Flash,如果你的QSPI Flash在大小和速度上與它不同,可以做相應調整。不過這個qspiflash_config主要是給ROM啟動用的,而ROM啟動僅需要讀Flash,是以這個配置中LUT僅有Read,而我們需要的API一般都要實作擦除和程式設計,是以要修改其lookupTable如下:

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

文章會同時釋出到我的 部落格園首頁、CSDN首頁、知乎首頁、微信公衆号 平台上。

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

痞子衡嵌入式:其實i.MXRT1050,1020,1015系列ROM也提供了FlexSPI driver API

  最後歡迎關注痞子衡個人微信公衆号【痞子衡嵌入式】,一個專注嵌入式技術的公衆号,跟着痞子衡一起玩轉嵌入式。

痞子衡嵌入式:其實i.MXRT1050,1020,1015系列ROM也提供了FlexSPI driver API
痞子衡嵌入式:其實i.MXRT1050,1020,1015系列ROM也提供了FlexSPI driver API
痞子衡嵌入式:其實i.MXRT1050,1020,1015系列ROM也提供了FlexSPI driver API

  衡傑(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。

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

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

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

  關于專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回複免費(劃重點)答疑。

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