天天看點

痞子衡嵌入式:借助Serial Plot軟體測量i.MXRT系列FlexSPI驅動Flash頁程式設計執行時間分布

  大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT系列FlexSPI驅動Flash頁程式設計執行時間。

  痞子衡之前寫過一篇文章 《串行NOR Flash的頁程式設計模式對于量産效率的影響》,簡要分析了 NOR Flash 的 Page Program 指令不同模式對于整體量産時間的影響,文章僅從理論計算角度做了分析,假定了 Flash 中所有 Page 擦寫表現都是一緻的,但是每個 Page 的表現真的是完全一緻嗎?今天我們從一個客戶問題出發來探讨下這個話題:

  最近有一個 i.MXRT1170 客戶回報,他們的應用程式裡 IAP 功能代碼對于 Flash 擦寫表現不穩定。他們的 IAP 代碼就是移植的 \SDK_2.10.0_MIMXRT1170-EVK\boards\evkmimxrt1170\driver_examples\flexspi\nor\polling_transfer 例程,Flash 選用得跟官方 EVK 上一樣的型号 IS25WP128-JBLE,測試代碼會把整個 Flash 的 16MB 循環擦除寫入,反複進行測試,在測試過程中發現的部分區域表現速度較慢,這個慢的定義是在部分 256 位元組(一個 Page)寫入時,寫入 API 傳回時間較長(因為是輪詢模式),但是傳回狀态是正确的。

  由于客戶并沒有進一步給出 Page 寫入快慢時間分别是多少,痞子衡隻能先盲猜。既然寫入 API 傳回狀态是正确的,那說明 FlexSPI 驅動是能正常工作的,先排除闆級硬體設計問題。那麼隻剩下兩種可能:一、FlexSPI 軟體驅動執行穩定性問題;二、Flash 本身 Page 表現一緻性問題。這兩個問題都可以通過觀察統計全部 Page 的寫入時間來進一步确認。對于第二個可能性,從 Flash 手冊裡我們可以得知 Page 寫入指令的等待時間典型值是 0.2ms,最大值是 0.8ms,但這個表述并沒有明确這是針對不同 Flash 晶片而言,還是針對同一 Flash 内不同 Page 而言。

痞子衡嵌入式:借助Serial Plot軟體測量i.MXRT系列FlexSPI驅動Flash頁程式設計執行時間分布

  帶着上述疑問,痞子衡決定在官方 MIMXRT1170-EVK 上實測一下,我們僅需簡單改造一下 \SDK_2.10.0_MIMXRT1170-EVK\boards\evkmimxrt1170\driver_examples\flexspi\nor\polling_transfer 例程,在 flexspi_nor_polling_transfer.c 源檔案中 main() 函數裡加入計時代碼統計 flexspi_nor_flash_page_program() 函數執行時間即可,其中計時實作可用 https://github.com/JayHeng/microseconds 項目,具體用法參考 《通用微秒(microseconds)計時函數架構設計與實作》 一文。

  上一節代碼中,我們把所有 Page 的寫入時間都通過序列槽列印了出來,現在需要一款序列槽波形顯示軟體,來直覺地看這 65536 個時間結果的差異。痞子衡試用了好幾款軟體:Serial Plot v0.12.0、Serial Chart V034、Serial Hunter V31,發現做得最完善的是 Serial Plot 軟體,推薦給大家:

Serial Plot 軟體源碼:https://github.com/hyOzd/serialplot Serial Plot 軟體安裝包:https://serialplot.ozderya.net/downloads/serialplot-0.12.0-win32-setup.exe

  Serial Plot 軟體做得最好的地方是對序列槽接收資料格式的完善支援,既可以是 Binary(單通道位元組長度可設),也可以是 ASCII 碼(通道間隔符可設),還可以是自定義資料幀(幀頭、幀格式可設),通道數也可以任意設,基本上可以滿足大部分序列槽波形顯示需求了。

痞子衡嵌入式:借助Serial Plot軟體測量i.MXRT系列FlexSPI驅動Flash頁程式設計執行時間分布

  準備就緒,給闆卡通上電,将測試程式下載下傳進去跑起來,打開 Serial Plot 設定好序列槽接收參數後觀測結果,我們發現波形顯示是一條直線,即 65536 個 Page 寫入時間是穩定的,都是 271us(測試工程選擇的是 debug build),這個結果推翻了我們之前的兩個猜測,寫入 API 執行時間是穩定的,Flash 的各 Page 表現也是一緻的。後來跟客戶進一步溝通,客戶回報他們是在 ThreadX 的 LevelX 中發現的,是以看起來客戶問題和 ThreadX 系統排程有關,那就是另外一個話題了,以後再展開。

痞子衡嵌入式:借助Serial Plot軟體測量i.MXRT系列FlexSPI驅動Flash頁程式設計執行時間分布

  至此,i.MXRT系列FlexSPI驅動Flash頁程式設計執行時間痞子衡便介紹完畢了,掌聲在哪裡~~~

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

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

痞子衡嵌入式:借助Serial Plot軟體測量i.MXRT系列FlexSPI驅動Flash頁程式設計執行時間分布

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

痞子衡嵌入式:借助Serial Plot軟體測量i.MXRT系列FlexSPI驅動Flash頁程式設計執行時間分布
痞子衡嵌入式:借助Serial Plot軟體測量i.MXRT系列FlexSPI驅動Flash頁程式設計執行時間分布
痞子衡嵌入式:借助Serial Plot軟體測量i.MXRT系列FlexSPI驅動Flash頁程式設計執行時間分布

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

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

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

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

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

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