本文根據AUTOSAR4.4(Classic Platform)(https://www.autosar.org/standards/classic-platform/classic-platform-440/)標準中的 :
AUTOSAR_SRS_MemoryServices.pdf
AUTOSAR_SWS_NVRAMManager.pdf
兩篇文章整理。僅爲個人理解,不當之處,還請指正,感謝!
AUTOSAR基本架構的介紹很多,可以自行搜索相關資料,比如 https://www.jianshu.com/p/cfffc1692ea2。
言歸正傳,這兩篇文檔主要是Memory Service 層的 Requirement 和 Specification。
1 NVRAM Block
1.1 縮寫
NVRAM Block是NVM manager層所定義對象。其相關的概念和基本對象包括:
Acronym: | Description: | |
Basic Storage Object (本文簡稱BSO) 基本存儲對象 |
A “Basic Storage Object” is the smallest entity of a NVRAM Block. Several “Basic Storage Objects” can be used to build a NVRAM Block. A “Basic Storage Object” can reside in different memory locations (RAM/ROM/NV memory). |
基本存儲對象是NVRAM Block的最小實體。 幾個BSO組成一個NVRAM Block。 BSO可以位於不同的存儲器中(RAM/ROM/NV memory) |
NVRAM Block | The “NVRAM Block” is the entire structure, which is needed to administrate and to store a block of NV data. | NVRAM Block是NVM層存儲器的定義對象,用作管理和存儲非易失性數據。 |
NV data | The data to be stored in the Non-Volatile memory. | 要存儲在NV Memory中的非易失性數據。 |
Block Management Type block管理型類 |
Type of the NVRAM Block. It depends on the (configurable) individual composition of a NVRAM Block in chunks of different mandatory/optional Basic Storage Objects and the subsequent handling of this NVRAM block. | NVRAM Block 的類型。取決於NVRAM block 的BSO構成和後續block的處理方式。 |
NV Block Header | Additional information included in the NV Block if the mechanism “Static Block ID” is enabled. | 如果BVRAN Block啓用了 “Static Block ID”,則其中包含NV Block的附加信息。 |
RAM Block | The “RAM Block” is a Basic Storage Object. It represents the part of a NVRAM Block, which resides in the RAM. See [SRS_LIBS_08534] |
BSO:RAM Block。對NVRAM Block來說是必需(mandatory)成分。 |
ROM Block | The “ROM Block” is a Basic Storage Object. It represents the part of a NVRAM Block, which resides in the ROM. The “ROM Block” is an optional part of a NVRAM Block. | BSO:ROM Block,位於ROM中。對NVRAM Block來說是可選(optinal)成分。 |
NV Block | The “NV Block” is a Basic Storage Object. It represents the part of a NVRAM Block, which resides in the NV memory. The “NV Block” is a mandatory part of a NVRAM Block. | BSO: NV Block。位於NV Memory(比如:Flash,EEPROM等)中,對NVRAM Block來說是必需(mandatory)成分。 |
Administrative Block | The “Administrative Block” is a Basic Storage Object. It resides in RAM. The Administrative Block contains any RAM data, that are necessary to manage the NVRAM block, for being able to perform processing on it and to deliver status information. The “Administrative Block” is a mandatory part of a NVRAM Block. |
BSO:Administrative Block。位於RAM中。其中包含管理NVRAM Block所必需的的RAM數據(狀態信息等)。是NVRAM Block的必需(mandatory)成分。 |
1.2 BSO和NVRAM Block 之間的組織關係如圖 1 所示
圖1 NVRAM 個構成(BSO)
Application(以後簡稱App)層的SoftWare Component(以後簡稱SWC)需要存儲非易失性數據(NV Data)時,就使用NVM Manager 生成不同的NVRAM Block。NVRAM Block包含不同的BSO成分,每一個NVRAM Block包含哪些BSO在配置時決定,配置時每個NVRAM Block都會有一個 NVRAM block descriptor ,一旦 block descriptor 固定,則NVRAM Block的構成也就固定(fixed)了。每一個NVRAM Block都會被分配一個 Block ID,NVM模塊就使用 Block ID 來選擇要訪問的single block。每一個NVRAM Block都可以爲其配置 block management type(Native,Redundant,Dataset)。
所有地址偏移都是相對於 NVRAM block descriptor 中RAM或ROM的起始地址(這裏認爲是block ID,待確認)給出的。 一般認爲起始地址爲0。(如果需要,相應的設備驅動程序將添加設備特別定義的基址或偏移量)。
1.3 BSO的邏輯成分
下圖展示了集中BSO的邏輯組成:
1.4 Block management types
前面提到:每一個NVRAM Block都可以爲其配置 block management type(Native,Redundant,Dataset)。
NVRAM Block的管理類型有3種:
- native
- redundant
- dataset
每一種類型的NVRAM Block的BSO組成爲:
1.4.1 Native NVRAM Block
Native NVRAM塊是最簡單的塊管理類型。
1.4.2 Redundant NVRAM Block
包含2個NV block。如果一個 NV block 塊被認爲是無效(invalid)的(例如read fail),則會使用另一個有效的NV block 中的數據來恢復無效的 NV block(即將有效NV block 中的數據寫到無效的 NV block中)。如果恢復失敗,則應將該錯誤報告給DET(錯誤碼爲:NVM_E_LOSS_OF_REDUNDANCY)
1.4.3 Dataset NVRAMBlock
Dataset NVRAM Block 塊中包含幾個大小相同的(NV / ROM)block。 應用程序可以一次訪問block中的任意一個。
(原文:The Dataset NVRAM block is an array of equally sized data blocks (NV/ROM). The application can at one time access exactly one of these elements.)
[SWS_NvM_00144] dataset 的 位置 index 在Administrative block 通過一個單獨的字段來標識。
[SWS_NvM_00374] NNvM模塊應能讀取daset中所有的NV塊。
[SWS_NvM_00375] 當且僅當禁用 write protection 時,NvM模塊才能write所有的NV塊。
[SWS_NvM_00146] 如果dataset NVRAM block配置了 ROM block,則index range要能涵蓋ROM,即通過index 要能索引NV block 和 ROM block 。
[SWS_NvM_00376] NvM模塊應只能讀取ROM block(default datasets)。
[SWS_NvM_00377] NvM模塊應將 write ROM block 視爲 write to a protected NV block。
[SWS_NvM_00444] Dataset NVRAM Block中的 (NV + ROM)block 總數必須在1..255的範圍內。
[SWS_NvM_00445]⌈在可選ROM塊的情況下,索引從0到NvMNvBlockNum-1的數據區域表示NV塊在NV存儲器中的CRC。索引從NvMNvBlockNum到NvMNvBlockNum + NvMRomBlockNum-1的數據區域表示ROM塊。
[SWS_NvM_00445] Dataset NVRAM Block中的 (NV + ROM塊) 的index 關係圖如下圖:
先是NV block,然後是ROM block
1.5 NVRAM Manager API configuration classes
NVM 模塊提供哪些API AUTOSAR 中也做了規定。但是爲了適應不同的硬件資源,NVM模塊可以配置哪些API在當前的環境中是可用的。爲此,NVM模塊中提供了一個 API configuration classes 的配置項,其有三個參數,對應不同的API範圍:
—— API configuration class 3: 所有定義的API都可以使用;
—— API configuration class 2: 部分API可用,可用API的中間集合.
—— API configuration class 1: 最少的API可用,在任何情況下都需要的API最小集合。適用於硬件資源非常有限系統。
1.6 硬件抽象層的尋址方案
硬件抽象接口(即更低層的Fee和EA)爲NVM提供了虛擬線性32位地址空間用於尋址,這32位地址由16bit的 block number和16bit的block address offset構成。
According to [SWS_NvM_00051], the NvM module allows for a (theoretical) maximum of 65536(2^16) logical blocks, each logical block having a (theoretical) maximum size of 64(2^16) Kbytes.
(NVM模塊最多允許尋址 65536(2^16)個邏輯塊,每個邏輯塊的大小最大爲 64(2^16) Kbytes)
16bit 的block number 被進一步劃分成兩部分:
- NV block base number (NVM_NV_BLOCK_BASE_NUMBER) with a bit width of (16 -NVM_DATASET_SELECTION_BITS)
- Data index with a bit width of (NVM_DATASET_SELECTION_BITS)
即: NVM_DATASET_SELECTION_BITS + NVM_NV_BLOCK_BASE_NUMBER = 16
NvMDatasetSelectionBits 在NVM module中是可配置項,用作Dataset類型的NVRAM Block中的NV block的尋址,即dataset中,NVblock的dataindex 可以爲 0,1,2... (2^bit-1)。NvMDatasetSelectionBits被定義之後,則block base number的大小也隨即確定(用作對base number尋址的bits個數 == 16-selectionbits), 即NVRAM Block ID可以爲 0,1,2,... (2^basenumberbits-1)。
NVM模塊的 NvMNvBlockBaseNumber, NvMDatasetSelectionBits 和FeeEA 模塊的 EA_BLOCK_NUMBER / FEE_BLOCK_NUMBER 的關係換算關係是:
FEE/EA_BLOCK_NUMBER = (NvMNvBlockBaseNumber << NvMDatasetSelectionBits) + DataIndex.
bit 和其組合後的表示意義:
NvMDatasetSelectionBits ——> Data Index(一個NVRAM Block的NV block 的編號)
NvMNvBlockBaseNumberbits ——> NVMBlockBaseNumber(即爲NVRAM Block ID,NVRAM Block的編號)
即兩個類型的 bit 合計共有16個。
例 1:
NvMDatasetSelectionBits == 2 (即被配置爲2bit),則可以用作NvMNvBlockBaseNumber 的是14bit。由此:
Range of NvMNvBlockBaseNumber: 0x1..0x3FFE(2^14個,即:0 ~(2^14-1))
Range of data index: 0x0..0x3(=2^NvMDatasetSelectionBits-1) (2^2個,即:0 ~ (2^2-1))
Range of FEE_BLOCK_NUMBER/EA_BLOCK_NUMBER: 0x4..0xFFFB (1<<2 + 0)
對於一個 native NVRAM block,如果其 NvMNvBlockBaseNumber = 2:
——則其對應的NV block 在 Fee/EA 層的 FEE/EA_BLOCK_NUMBER = 8
對於一個 redundant NVRAM block(有2個NV block)如果其 NvMNvBlockBaseNumber = 3:
—— 其1st NV block (data index = 0)在 Fee/EA 層的 FEE/EA_BLOCK_NUMBER = 12 (=3<<2+0,)
—— 其2nd NV block(data index = 1) 在 Fee/EA 層的 FEE/EA_BLOCK_NUMBER = 13(=3<<2+1)
對於一個 dataset NVRAM block 如果其 NvMNvBlockBaseNumber = 4, NvMNvBlockNum = 3 (即有3個NV block):
—— 其 1st NV block(data index = 0) 在 Fee/EA 層的 FEE/EA_BLOCK_NUMBER = 16 (4<<2 +0)
—— 其 2nd NV block (data index = 1)在 Fee/EA 層的 FEE/EA_BLOCK_NUMBER = 17(4<<2 +1)
—— 其 3rd NV block (data index = 2)在 Fee/EA 層的 FEE/EA_BLOCK_NUMBER = 18(4<<2 +2)
2 功能
NVRAM Manager(Non-Volatile RAM Manager)管理所有非易失性存儲器(Non-Volatile Memory)中數據的存儲。其本身是獨立於硬件(hardware)的,直接訪問硬件的功能被封裝到BSW的更下層(MemIF,Fee/EA, Fls/Eep)。NVRAM Manger 負責處理對非易失性數據的訪問並對單個數據元素提供(checksum protection等)可靠性機制。爲了適用於汽車系統的所有領域,NVRAM Manager具有高度的可擴展性。
3 SRS文檔中:Requirements Tracing(14條BRF)
Requirement | Description | Satisfied by |
RS_BRF_00129 |
AUTOSAR shall support data corruption detection and protection。
支持數據損壞檢測和保護 |
SRS_Mem_00030, SRS_Mem_00129, SRS_Mem_08001, SRS_Mem_08010, SRS_Mem_08545, SRS_Mem_08546, SRS_Mem_08547, SRS_Mem_08550, SRS_Mem_08552, SRS_Mem_08553, SRS_Mem_08555, SRS_Mem_08556 |
RS_BRF_01048 |
AUTOSAR module design shall support modules to cooperate in a multitasking 模塊支持多任務環境下協作。 |
SRS_Mem_00034, SRS_Mem_08542, SRS_Mem_08558 |
RS_BRF_01064 |
AUTOSAR BSW shall provide callback functions in order to access upper layer modules。 BSW通過callback函數訪問上層模塊。 |
SRS_Mem_00125 |
RS_BRF_01076 |
AUTOSAR basic software shall perform module local error recovery to the extent possible。 BSW模塊可以進行本地錯誤恢復。
|
SRS_Mem_00038 |
RS_BRF_01096 |
AUTOSAR shall support start-up and shutdown of ECUs。 支持ECU的start-up 和 shutdown。 |
SRS_Mem_00137, SRS_Mem_08540 |
RS_BRF_01416 |
AUTOSAR services shall support standardized handling of non-volatile memory data。 service支持對非易失性數據的標準化處理。 |
SRS_Mem_00013, SRS_Mem_00016, SRS_Mem_00017, SRS_Mem_00136, SRS_Mem_00138, SRS_Mem_08544, SRS_Mem_08554 |
RS_BRF_01800 |
AUTOSAR non-volatile memory functionality shall be divided into a hardware dependent and independent layer。 NV memory的功能被劃分成兩部分:硬件獨立和硬件依賴。 |
SRS_Mem_00011 |
RS_BRF_01808 |
AUTOSAR non-volatile memory handling shall 支持多種類型的硬件。 |
SRS_Mem_08000 |
RS_BRF_01812 |
AUTOSAR non-volatile memory functionality shall support the prioritization and asynchronous execution of jobs。 支持作業優先級設定和異步請求。 |
SRS_Mem_00034, SRS_Mem_08543, SRS_Mem_08558 |
RS_BRF_01816 |
AUTOSAR non-volatile memory functionality shall organize persistent data based on logical memory blocks。 應基於邏輯存儲器塊組織持久數據。 |
SRS_Mem_00041, SRS_Mem_08001, SRS_Mem_08009, SRS_Mem_08528, SRS_Mem_08529, SRS_Mem_08531, SRS_Mem_08533, SRS_Mem_08534, SRS_Mem_08538, SRS_Mem_08543, SRS_Mem_08549, SRS_Mem_08560 |
RS_BRF_01824 |
AUTOSAR non-volatile memory functionality shall provide a mapping of non volatile memory into random access memory。 提供NV memory到RAM memory的映射 |
SRS_Mem_00027, SRS_Mem_08014,
|
RS_BRF_01832 |
AUTOSAR non-volatile memory shall handle 應獨立於物理地址處理邏輯存儲器塊。 |
SRS_Mem_08007, SRS_Mem_08531 |
RS_BRF_01840 |
AUTOSAR non-volatile memory functionality shall 保證存儲塊的完整性。 |
SRS_Mem_00018, SRS_Mem_00030, SRS_Mem_00127, SRS_Mem_00129, SRS_Mem_00135, SRS_Mem_08010, SRS_Mem_08011, SRS_Mem_08015, SRS_Mem_08535, SRS_Mem_08541, SRS_Mem_08546, SRS_Mem_08547, SRS_Mem_08548, SRS_Mem_08552, SRS_Mem_08553, SRS_Mem_08556 |
RS_BRF_01848 |
AUTOSAR non-volatile memory functionality shall 提供增強硬件可靠性的機制。 |
SRS_Mem_00018, SRS_Mem_08529, SRS_Mem_08531, SRS_Mem_08548, SRS_Mem_08551, SRS_Mem_08554 |
3 SRS中:Requirements Specification
functional requirement 主要分爲5個部分來闡述:
- configuration:在配置期間要滿足那些要求,可以進行哪些操作等。
- initialization:ECU啓動時的操作
- normal operation:正常功能和操作
- shutdown operation:ECU關機的操作
- fault operation:錯誤處理
具體條款可以參考文檔,這裏不搬運了。