AUTOSAR學習教程-BSW標準解讀
需要教程的小伙伴,v:xiaoying121416,備注【AUTOSAR】哦~
1、AUTOSAR BSW標準解讀 – NvM
NvM的全稱是NVRAM Manager。NVRAM是用來保存NV(Non Volatile,非易失)數(shù)據(jù)的,所謂的非易失數(shù)據(jù)指的是那些在掉電以后不會丟失的數(shù)據(jù),而NvM模塊是用來提供Nv數(shù)據(jù)管理的,用來維護NV數(shù)據(jù)。
滿足AUTOSAR標準的NVRAM內(nèi)存結(jié)構(gòu)如下圖,從這張圖,我們能夠比較清晰的看到AUTOSAR的NvM設(shè)計邏輯:

?
NvM的數(shù)據(jù)存儲結(jié)構(gòu)
NvM中的的數(shù)據(jù)承載是以塊(Block)出現(xiàn)的,總共有四種類型的數(shù)據(jù)塊,又可以稱為基礎(chǔ)存儲對象(Basic Storage Objects),他們分別是:
1.?NV Block:這種類型的塊必須要有的,它存儲了非易失的數(shù)據(jù),對于NvM是可見的,對于應(yīng)用程序不可見;
2.?RAM Block:這種類型的塊用于應(yīng)用程序訪問數(shù)據(jù),它又分為permanent和temporary兩種,兩者的區(qū)別是,permanent類型的RAM在調(diào)用NvM讀取接口的時候(readall,readblock)會自動的將NV Block里邊的數(shù)據(jù)讀取到permanent RAM block,而temporary類型的RAM必須作為readblock接口的參數(shù),在readblock調(diào)用的時候會被填充,對于應(yīng)用程序和NvM均為可見;
3.?ROM Block:這種類型的塊提供了數(shù)據(jù)的默認值,是可選的,對于NvM可見,對于應(yīng)用程序不可見;
4.?Administrative Block:這種類型的塊用于提供NvM數(shù)據(jù)管理用到的信息,對于NvM可見,對應(yīng)用程序是不可見的。
每一種塊的結(jié)構(gòu)可以參考下面三張圖,對于Admin Block,與具體的NvM實現(xiàn)相關(guān),AUTOSAR并沒有規(guī)定它的具體結(jié)構(gòu):
?



?
值得注意的是,以上提到的Block的概念是NvM中的概念,是抽象出來的和具體實現(xiàn)無關(guān),大家不要和普通的RAM/ROM以及FLASH/RAM/DLFASH/EEPROM等概念混淆。下邊這個實現(xiàn)樣例表格可以幫助大家加深一些理解:

NvM的尋址方式
NvM模塊為程序運行提供了數(shù)據(jù)管理,因此很多模塊會和NvM有交互,跟NvM交互的模塊有RTE,DEM,EcuM,DET,MemIf,SchM,CRC Library。
為了實現(xiàn)存儲管理NvM需要對FLASH或者EEPROM進行操作,這種操作并不是直接進行的,而是通過MemIf模塊,MemIf模塊把位于它下面的FLASH或者EEPROM抽象成線性的32位地址空間(包含了16位的邏輯塊編號和16位的邏輯塊內(nèi)地址偏移),這個規(guī)定決定了NvM允許的最大邏輯塊數(shù)為65536塊,而每一塊的大小為64K。 而邏輯塊編號又可以分成兩部分(塊標識和dataset標識),這兩部分的長度是可以通過NvMDatasetSelectionBits來配置的,它代表了dataset標識符的長度,出去dataset標識符部分就是塊標識符了,dataset標識符最長為8個bit(最多256個datasets)。下邊可以通過簡單的一個示例圖直觀的看出這個概念:

?
NvM的邏輯數(shù)據(jù)塊管理類型
NvM的邏輯塊有三種類型:
1.?NVM_BLOCK_NATIVE:包含1個NV Block,1個RAM Block,0到1個ROM Block,1個Admin Block。最簡單的NvM類型,效率最高
2.?NVM_BLOCK_REDUNDANT:包含2個NV Block,1個RAM Block,0到1個ROM Block,1個Admin Block。比NATIVE類型具有更高的穩(wěn)定性和容錯能力,使用兩個NV Block能夠在一個NV Block失效的情況下從另外一個NV Block讀取數(shù)據(jù)。
3.?NVM_BLOCK_DATASET:包含1到255個NV Block,1個RAM Block,0到n個ROM Block,1個Admin Block。
NvM模塊提供了相應(yīng)的接口函數(shù)管理邏輯塊,為了能夠使NvM更廣泛的應(yīng)用到汽車領(lǐng)域,根據(jù)不同的硬件資源,這些API可以被裁減使用,這種裁減分類三類:
1.?Class3 – 所有API都是支持的
2.?Class2 – 中等程度支持
3.?Class1 – 簡單程度支持,這種裁減下,NVM_BLOCK_DATASET是不支持的
具體對應(yīng)的的API列表在規(guī)范中可以查到,這里就不列出來了