很多人都覺得AUTOSAR的Memory很復(fù)雜,搞了很久都摸不透里面的原理策略。
其實,AUTOSAR的Memory在AUTOSAR的架構(gòu)下,封裝得很好,只是我們很多人從普通嵌入式軟件開發(fā)模式而來,一下子轉(zhuǎn)不過彎而已。
本文就從普通嵌入式軟件開發(fā)中的Memory入手,逐步講解AUTOSAR的Memory原理策略。
注:以下講的Memory方案是指EEPROM、DataFlash等非易失性存儲(NVM)的軟件方案。
1.傳統(tǒng)嵌入式存儲方案
試想下,一個簡單的嵌入式系統(tǒng)軟件里,如果想存儲寫信息到EEPROM(假設(shè)外置的EEPROM,通過IIC訪問),你會如何設(shè)計?
最簡單的辦法,寫好IIC通信,直接根據(jù)EEPROM的地址通過IIC進行訪問,反正就是操作EEPROM,不用管那么多。但是軟件結(jié)構(gòu)比較混亂,驅(qū)動和應(yīng)用混在一起。
這種做法,但凡有點軟件層次結(jié)構(gòu)概念的人都不會這么干,當(dāng)然只是臨時調(diào)試下硬件是無所謂的。
那么,改進下軟件設(shè)計,把IIC驅(qū)動單獨出來,是很常用的做法吧,比較IIC算是MCU的驅(qū)動,除了可以訪問EEPROM,還可以用來跟其他外設(shè)通信,做成獨立公共的驅(qū)動模塊,是理所當(dāng)然的。軟件層次結(jié)構(gòu)就像下面的這樣子。
當(dāng)然,對軟件有追求的人,肯定是比較鄙視上面兩種結(jié)構(gòu)的,EEPROM好歹也要單獨一個模塊吧。單獨一個應(yīng)用倒是無所謂,如果要好幾個應(yīng)用要讀寫EEPROM,豈不是亂成一團了!
于是,設(shè)計成這樣的接口,看起來是比較理想的。
普通的嵌入式軟件的EEPROM設(shè)計,大多都是這樣的,也比較靈活。
然而,AUTOSAR有更高的追求,它把EEPROM、DataFlash等NVM看成一類存儲,而不管存儲的實際介質(zhì)是什么,統(tǒng)統(tǒng)都叫NVM。
于是乎,設(shè)計一個NVM的模塊就呼之欲出了。NVM的對外的接口是統(tǒng)一的,而它對接DataFlash或EEPROM,還分別多加了一個FEE和EA這樣的模塊。
2.AUTOSAR的存儲方案
到這里,我們對比下這幾種方案。
上圖方案A和方案B就不考慮了,那方案C和方案D的對比,差別在哪?
除了NVM這個模塊是通用性的,還多出了個FEE和EA,那么FEE和EA分別是干嘛的?
在解釋這兩個模塊之前,先從AUTOSAR的架構(gòu)層面來看看,實際上FEE和EA就在Memory Hardware Abstraction層里面,注意關(guān)鍵字Abstraction。
FEE是Flash EEPROM Emulation的縮寫,而EA是EEPROM Abstraction的縮寫。
AUTOSAR考慮問題比較周到,NVM的存儲是要考慮壽命的,特別是用在汽車行業(yè)。
一般情況下,DataFlash的P/E Cycle是10萬次,EEPROM的是100萬次。另外,DataFlash的擦寫單位是比較大的,如果只想寫一兩個byte,需要擦除一大片,非常不友好。
于是要將DataFlash模擬成EEPROM來使用,這個FEE就出來了。當(dāng)然FEE還考慮了磨損均衡算法,英文一般叫Wear Leveling。
那EA呢?因為EEPROM不同廠家做的地址、page管理等方式不一樣,所以要做個抽象層來統(tǒng)一管理下,同時也加入了磨損均衡算法,來增加EEPROM的壽命。
以下以在0x0008地址寫入0x11, 0x22, 0x33, 0x44這四個字節(jié)內(nèi)容為例,看看EEPROM和DataFlash的實際操作情況:
很明顯,EEPROM在同一個位置頻繁操作也不是非常好的,只要次數(shù)多也是會影響壽命的,而Flash在這方面的劣勢就更明顯了,不但擦寫單位比較大,壽命也比較短,所以這個FEE和EA的抽象是有必要的,磨損均衡技術(shù)也是有必要的。
至于這個磨損均衡技術(shù)是怎么實現(xiàn)的,涉及到的內(nèi)容比較多,后續(xù)再細講。
細心的小伙伴,會發(fā)現(xiàn),為什么還有個MemIf?
實際上這個MemIf很簡單,僅僅是統(tǒng)一封裝了下FEE和EA的接口,為NVM提供一個統(tǒng)一的接口管理而已,如果非要說,那只能說NVM比較嬌貴,啥都要給它準備得好好的。
3.NVM的存儲結(jié)構(gòu)
這樣就完了嗎,軟件架構(gòu)層次基本就這樣了。
然而,AUTOSAR里面的這個Memory這一套東西,是很有搞頭的,怎么說呢?
除了層次分明外,它對存儲的結(jié)構(gòu)抽象得很明確,于是就有了RAM Block,Data Set等這樣的概念。
這部分內(nèi)容,在《一圖讀懂AUTOSAR NvM(附pdf版文檔資源)》里面已經(jīng)講得很清楚了,本文不再累述。再次附上一張NVM Block結(jié)構(gòu)的匯總圖,方便平時查閱。
4.AUTOSAR NVM的配置
講了這么多,NVM怎么使用?
想其他AUTOSAR的Mode模塊一樣,NVM的接口不是給應(yīng)用直接調(diào)用的,而是通過AUTOSAR的開發(fā)工具鏈給SWC配置NVM的Service接口,然后生成對應(yīng)的Runnable等接口調(diào)用的,這里有套規(guī)則。
這個NVM配置的內(nèi)容雖然涉及到的概念有點多,步驟也有點多,但搞清楚后就很簡單了。
審核編輯:劉清
-
FlaSh
+關(guān)注
關(guān)注
10文章
1621瀏覽量
147747 -
EEPROM
+關(guān)注
關(guān)注
9文章
1010瀏覽量
81404 -
AUTOSAR
+關(guān)注
關(guān)注
10文章
350瀏覽量
21472 -
NVM
+關(guān)注
關(guān)注
1文章
39瀏覽量
19108
原文標(biāo)題:AUTOSAR的Memory是如何設(shè)計的?
文章出處:【微信號:embedded_sw,微信公眾號:嵌入式軟件實戰(zhàn)派】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論