QSPI Flash帶來了什麼:
MCU除了工業控制外,大部分對於價格是敏感的。消費性產品只能用1美金以下的MCU,一般應用在3美金,工控也無法超過10美金。
QSPI Flash容量32Mb=4MB報價為0.3美金,除了消費性產品,對成本所造成的壓力還可以接受。一但使用上手,預估會有爆發性成長。
最重要的功能是XIP( Execute in place )中文叫在地執行,就是QSPI Flash全顆內容可以直接映射到MCU記憶體空間上,還可以執行程式。程式空間等於大幅增加,可以容納的程式更多。
新的MCU則是加大RAM的容量,相同價格下RAM容量也增加數倍。
架構規劃:
這個部分主要是評估使用架構在限定的硬體條件下是否可以完成韌體規格。
以往因為程式區不大,常常都不會安裝RTOS。
除了RTOS對很多工程師來說是一個不太確定的核心(遇到問題無法解決)。
另外是怕空間不足。像是省下EEPROM而使用internal Flash做參數存放區,而利用掉。
但以QSPI Flash的空間來說,已經沒有限定使用的理由。唯一的理由只剩下工程師自己了。
以STM32來說,STM32CubeMX(驅動程式產生器)可以很方便的就將FreeRTOS引入使用,完全不用理會如何安裝RTOS。
以正規的RTOS來說,開一個工作元(Task)都會消耗RAM,但FreeRTOS有另一種方法(=Coroutine)可以做到類Task又只需很少的RAM。
就算是只有10KB的RAM來說,要Run FreeRTOS也不是難事。
為何使用QSPI Flash RTOS會變得重要,主因是程式變多了。以往寫程式到一定程度,程式空間滿了,老闆就不會再要求新加功能。
現在這個理由消失,以前寫個128KB就可以阻止老闆的野心,現在要寫到4MB看來很難了。
要填滿4MB並非不可能,但不是一個人做,是數個人一起做。不同人同時寫一個MCU,若不用RTOS,是整合不起來的。
再來還有一個限制RAM。不過RAM的限制會有其他方案來擴張。
QSPI Flash使MCU對記憶體限制少了。相對軟體規格增加,對軟體管理功能也要一併提升,好的方法就是引用RTOS。
多模組整合:
程式空間加大,一定會引用一堆Open Source函式庫,有些還是從PC來的,它是有OS的環境。在MCU上RTOS的行為和PC OS相似,要引用也是需要RTOS。
再來是模組之間的格式必然不同,小型軟體介面就是為了膠合不同模組而來的。寫得好,還可以分給不同裝置來使用。
個人就有將Xmodem整理起來,可以用在不同的通信上(UART, SPI等)做為PC資料傳輸用。
只用一套程式,應用於不同裝置上,對軟體穩定性是一種考驗,但相對弄好就很穩定。
RAM超載的處理:
QSPI Flash容量雖大,相對RAM就小很多,RAM變成限定資源。
RAM是有可能因為工作量增加而產生超載。這是需要處理的,必須在架構一開始就對不同的工作想好方法,後補都是很危險的事。
處理方法只有二種:資料丟棄,或是部分工作放棄。
資料丟棄只要決定好放棄是新的還是舊的,只要不要損壞工作就好。
部分工作放棄比較難做。要決定部分程式不執行。有RTOS則又簡單得多,優先權設定可以解決這個問題。
另外多利用區域變數或是動態記憶體的方式也是解決的方法。
ROM表格及Hook的應用:
因為ROM大很多,有些設定資料其實變動有限,直接轉成固定值表格(資料結構陣列),再用Hook(=pointer)指向正在作用的資料內容。
這一類的程式會增加很多,因為ROM不用完,就好像是老闆失職,只好用這種方式吃掉ROM。
用得好,還可以一口氣將相同機台,不同客戶設定或是程式整合進來。
Ram內執行函式不再用:
以往在寫入Flash更新時,要將Flash寫入函式複製到RAM上再執行。現在改成由剩下的64KB internal flash來執行。
剩下的internal flash除了取代RAM function外,也是User Boot Loader的使用區域。QSPI Flash完全存放應用程式。
小型直譯器:
另類除錯方法,在系統存活時做測試用。用來補償RTOS存在時無法做單步除錯動作。但做單元測試很好用。
個人很看好這個應用,做得好時,可以動態新增使用者程式,在不用全機升級的狀況下做小功能新增。
以往直譯器對MCU來說很吃資源,現在則可以有效使用。
但目前QSPI Flash XIP也有缺點,就是Compiler支援不足。舊版本無法將程式配置在QSPI Flash上。又要做Compiler升級才行。