AUTOSAR的NvM Block有三種Native、Redundant和DataSet,用得最多的是Native,但你知道其他兩種是干什么的嗎?
AUTOSAR NVM(Non-Volatile Memory)是AUTOSAR標(biāo)準(zhǔn)中定義的一種用于存儲非易失性數(shù)據(jù)的機制。在AUTOSAR NVM中,數(shù)據(jù)被存儲在一個或多個NVM塊中。每個NVM塊由一個或多個NVM數(shù)據(jù)集組成,可以存儲不同類型的數(shù)據(jù)。
圖見《一圖讀懂AUTOSAR NvM(附pdf版文檔資源)》
在AUTOSAR NVM塊中的三種類型,它們之間的區(qū)別如下:
Native
Native數(shù)據(jù)是NVM塊中存儲的原始數(shù)據(jù),是應(yīng)用程序需要讀寫的數(shù)據(jù)。Native數(shù)據(jù)只在NVM塊中存儲一份,如果數(shù)據(jù)損壞或丟失,將無法恢復(fù)。因此,在寫入Native數(shù)據(jù)時,需要確保數(shù)據(jù)的可靠性和一致性。
舉例說明:江湖中的《九陽神功》只有一份,弄丟了就丟了。
Redundant
Redundant數(shù)據(jù)是為了增加數(shù)據(jù)的可靠性而存儲在NVM塊中的備份數(shù)據(jù)。與Native數(shù)據(jù)不同,Redundant數(shù)據(jù)通常存儲在NVM塊中的不同位置,以增加數(shù)據(jù)的冗余度。如果Native數(shù)據(jù)損壞或丟失,可以使用Redundant數(shù)據(jù)進行恢復(fù)。在寫入Redundant數(shù)據(jù)時,需要確保數(shù)據(jù)的可靠性和一致性,以確保Redundant數(shù)據(jù)可以成功地用于數(shù)據(jù)恢復(fù)。
舉例說明:江湖中,如果你巧合得到了一份《葵花寶典》,你也很清楚這玩意的“魅力”,你不想擁有它也不希望它失傳,于是偷偷抄了一份,把原件扔到江湖中,愛咋咋地。如果江湖中的原件丟了,那你可以偷偷拿出你的手抄稿慢慢研究,咳咳~~
DataSet
DataSet數(shù)據(jù)是AUTOSAR NVM中的一個特殊數(shù)據(jù)類型,它是一組數(shù)據(jù)的集合。DataSet數(shù)據(jù)通常用于存儲應(yīng)用程序的配置數(shù)據(jù)或狀態(tài)數(shù)據(jù),例如車輛參數(shù)、故障碼等。與Native和Redundant數(shù)據(jù)不同,DataSet數(shù)據(jù)可以在應(yīng)用程序運行期間進行讀寫,并且可以使用AUTOSAR配置工具進行配置和管理。
DataSet數(shù)據(jù)由一個或多個DataBlock組成,每個DataBlock由一個或多個DataElement組成。在寫入DataSet數(shù)據(jù)時,需要確保數(shù)據(jù)的可靠性和一致性,并且需要考慮到數(shù)據(jù)的版本管理和數(shù)據(jù)更新等問題。
舉例說明:江湖中的《降龍十八掌》有好多個版本,例如有洪七公版、郭靖版和喬峰版,每個版本都有點不一樣。
總之,在AUTOSAR NVM中,Native數(shù)據(jù)是應(yīng)用程序需要讀寫的原始數(shù)據(jù),Redundant數(shù)據(jù)是為了增加數(shù)據(jù)的可靠性而存儲的備份數(shù)據(jù),DataSet數(shù)據(jù)是一組數(shù)據(jù)的集合,通常用于存儲配置數(shù)據(jù)或狀態(tài)數(shù)據(jù),一般可以是車廠不同車型的配置數(shù)據(jù)。
理論是這個樣子,話也是這么說,但總得拿出來遛一遛,看看實際的樣子。
于是乎,上代碼、改配置,直接運行試試效果:
以下工程驗證還是基于《AUTOSAR NvM模塊配置詳解》案例來修改。
Native
這個在原來教程有展示了,也是用得比較多一種,就配置成Native就好了,在EEPROM或FLASH中存儲的數(shù)據(jù)只有一份。
它的讀寫示意圖是這樣的:
Redundant
Redundant就是冗余、重復(fù)的意思,最直觀的理解就是有多一個備份Block。這樣可以讓數(shù)據(jù)更加可靠、容錯性更好,可用性也更好。
注意:只要數(shù)據(jù)了,備份每次都要重新同步的。
實際案例中的寫入過程動圖是這樣的:
在讀的時候,讀到其中一份是正確的就OK了
真實的讀取過程也很簡單:
但是,如果從第一個Block讀取的數(shù)據(jù)是錯誤的(例如CRC校驗不正確),那么,它就會從備份Block去讀取數(shù)據(jù)。以下,我故意將CRC部分改成別的錯誤值,其讀出來后會校驗CRC,發(fā)現(xiàn)錯的,再嘗試讀取備份區(qū)域的數(shù)據(jù):
那么它的讀取過程是怎樣的呢?看動圖:
這樣看來,這個非常適合用于存儲非常重要的數(shù)據(jù),例如用于功能安全場合。
DataSet
DataSet數(shù)據(jù)是一組數(shù)據(jù),這組數(shù)據(jù)里面有很多份相互獨立的數(shù)據(jù)。它并不像Redundant那樣,這些數(shù)據(jù)即使會有些相似性,但都是不一樣的,改動其中一份不會影響其他的。
DataSet的讀寫其實跟Native的基本一樣,只是在操作之前需要調(diào)用NvM_SetDataIndex函數(shù)來指定要操作哪一個DataSet數(shù)據(jù)塊。它的參數(shù)定義是這樣的:
Std_ReturnType NvM_SetDataIndex(NvM_BlockIdType BlockId, uint8 DataIndex)
如果不調(diào)用這個NvM_SetDataIndex函數(shù),默認(rèn)情況下,是操作最前的那個數(shù)據(jù)塊,跟Native的表現(xiàn)一致:
如果操作第二塊就是這樣(起始地址是第一塊的后面,緊挨著的):
以上就是NvM Block的Native、Redundant和DataSet的區(qū)別了。
審核編輯 :李倩
-
存儲
+關(guān)注
關(guān)注
13文章
4522瀏覽量
87293 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1223瀏覽量
25377 -
DataSet
+關(guān)注
關(guān)注
0文章
5瀏覽量
2296
原文標(biāo)題:AUTOSAR NvM Block的Native、Redundant和Dataset有什么區(qū)別?
文章出處:【微信號:embedded_sw,微信公眾號:嵌入式軟件實戰(zhàn)派】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
分析Autosar架構(gòu)下的NVM源碼
hdmi與vga有什么區(qū)別
NvM在AUTOSAR中的層次結(jié)構(gòu)
NVM Block連續(xù)寫及Default Value問題分析

評論