]> rtime.felk.cvut.cz Git - arc.git/commitdiff
Nvm/Fee: now uses SchM
authormahi <devnull@localhost>
Mon, 20 Aug 2012 18:21:05 +0000 (20:21 +0200)
committermahi <devnull@localhost>
Mon, 20 Aug 2012 18:21:05 +0000 (20:21 +0200)
boards/mpc5516it/examples/mem_nvm_fee/Nvm_App.c
boards/mpc5516it/examples/mem_nvm_fee/config/Fee_Cfg.c
boards/mpc5516it/examples/mem_nvm_fee/config/Fee_Cfg.h
boards/mpc5516it/examples/mem_nvm_fee/config/NvM_Cfg.c
boards/mpc5516it/examples/mem_nvm_fee/config/NvM_Cfg.h
boards/mpc5516it/examples/mem_nvm_fee/mem_nvm_fee_mpc5516it.arxml

index 3b3f84f158e4199e899487564defb63ff0a6df64..7f92dca2b14de9b57cadcd5db0a50f34dfa6d3da 100644 (file)
@@ -1,3 +1,26 @@
+/* -------------------------------- Arctic Core ------------------------------\r
+ * Arctic Core - the open source AUTOSAR platform http://arccore.com\r
+ *\r
+ * Copyright (C) 2009  ArcCore AB <contact@arccore.com>\r
+ *\r
+ * This source code is free software; you can redistribute it and/or modify it\r
+ * under the terms of the GNU General Public License version 2 as published by the\r
+ * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.\r
+ *\r
+ * This program is distributed in the hope that it will be useful, but\r
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\r
+ * for more details.\r
+ * -------------------------------- Arctic Core ------------------------------*/\r
+\r
+/*\r
+ * EXAMPLE\r
+ *   Just a simple example that uses the NvM API's.\r
+ *\r
+ */\r
+\r
+\r
+\r
 /* ----------------------------[includes]------------------------------------*/\r
 #include "Std_Types.h"\r
 #include "Os.h"\r
 \r
 /* ----------------------------[private define]------------------------------*/\r
 \r
+/* STD_ON  - Block_2_Native will be written. Block_2_Native will only\r
+ *           be called once.\r
+ * STD_OFF - Block_2_Native's will be called at every startup since no\r
+ *           data is ever written to the block\r
+ */\r
+#define WRITE_BLOCK_2          STD_OFF\r
+\r
 /* ----------------------------[private macro]-------------------------------*/\r
+\r
+#define PATTERN_FILL(_block,_st_val) patternFill(_block,sizeof(_block),_st_val)\r
+#define PATTERN_VERIFY(_block,_st_val) patternVerify(_block,sizeof(_block),_st_val)\r
+\r
+#define BUSY_WAIT(_block,_var) \\r
+       do { \\r
+               NvM_GetErrorStatus(_block, &_var); \\r
+       } while( _var != NVM_REQ_OK );\r
+\r
+\r
 /* ----------------------------[private typedef]-----------------------------*/\r
 /* ----------------------------[private function prototypes]-----------------*/\r
 /* ----------------------------[private variables]---------------------------*/\r
@@ -21,42 +61,40 @@ uint8 TEST_RamBlock_Dataset_0[20];
 uint8 TEST_RamBlock_Dataset_1[2];\r
 uint8 TEST_tmpRam[100];\r
 \r
-\r
+uint8 Block_2_RamBlock[10];\r
 \r
 /* ----------------------------[private functions]---------------------------*/\r
 \r
 static void nvmApplication(void);\r
 \r
-/* ----------------------------[public functions]----------------------------*/\r
-\r
-\r
-Std_ReturnType TEST_SingleBlockFunctionCallbackBlock3(uint8 ServiceId, NvM_RequestResultType JobResult)\r
-{\r
-       return E_OK;\r
-}\r
-\r
-void TEST_MultiBlockFunctionCallback(uint8 ServiceId, NvM_RequestResultType JobResult)\r
-{\r
-}\r
-\r
-\r
-#define PATTERN_FILL(_block) patternFill(_block,sizeof(_block))\r
-#define PATTERN_VERIFY(_block) patternVerify(_block,sizeof(_block))\r
-\r
-void patternFill( uint8 *bPtr, uint32 numBytes )\r
+/**\r
+ * Fill memory with a increasing number starting with startVal\r
+ *\r
+ * @param bPtr\r
+ * @param numBytes\r
+ * @param startVal\r
+ */\r
+static void patternFill( uint8 *bPtr, uint32 numBytes, uint8 startVal )\r
 {\r
        int i;\r
        for(i=0;i< numBytes; i++) {\r
-               bPtr[i] = i;\r
+               bPtr[i] = startVal++;\r
        }\r
 }\r
 \r
-\r
-int patternVerify( uint8 *bPtr, uint32 numBytes )\r
+/**\r
+ * Verify a pattern filled by patternFill.\r
+ *\r
+ * @param bPtr\r
+ * @param numBytes\r
+ * @param startVal\r
+ * @return\r
+ */\r
+static int patternVerify( uint8 *bPtr, uint32 numBytes, uint8 startVal )\r
 {\r
        int i;\r
-       for(i=0;i< numBytes; i++) {\r
-               if( bPtr[i] != i ) {\r
+       for(i=0;i< numBytes; i++, startVal++) {\r
+               if( bPtr[i] != startVal ) {\r
                        return 1;\r
                }\r
        }\r
@@ -64,56 +102,112 @@ int patternVerify( uint8 *bPtr, uint32 numBytes )
        return 0;\r
 }\r
 \r
-void TEST_MultiBlockCallback( void ) {\r
+\r
+/* ----------------------------[public functions]----------------------------*/\r
+\r
+void MultiBlock_Callback(uint8 ServiceId, NvM_RequestResultType JobResult) {\r
 \r
 }\r
 \r
+/*\r
+ * Block_1_DataSet\r
+ */\r
+\r
+void Block_Dataset_SingleCallback( void ) {\r
+}\r
+\r
+/*\r
+ * Block_2_Native\r
+ */\r
+\r
+void Block_2_InitCallback( void ) {\r
+       PATTERN_FILL(Block_2_RamBlock,10);\r
+}\r
+\r
+\r
+/*\r
+ * The application task\r
+ */\r
 TASK(Application) {\r
        for(;;) {\r
                nvmApplication();\r
        }\r
 }\r
 \r
-\r
-\r
-/* NvM_ReadAll()\r
+/**\r
  *\r
- * Read all blocks just to see that everything is as it should.\r
- * */\r
+ */\r
 static void nvmApplication(void) {\r
        NvM_RequestResultType errorStatus;\r
        Std_ReturnType rv;\r
        int currBlock;\r
+       static int counter = 0;\r
 \r
-       /* All reads should be OK */\r
-//     feeReadStatus.blockNumber = ALL_BLOCKS;\r
-//     feeReadStatus.rv = E_OK;\r
+       /* Verify that a block read during NvM_ReadAll() is there */\r
+       rv = PATTERN_VERIFY(Block_2_RamBlock,10);\r
+       assert(rv == 0);\r
 \r
-//     NvM_ReadAll();\r
-//     TEST_ASSERT( WaitToComplete( 0 , 30 ) == NVM_REQ_OK );\r
+       currBlock = NVM_Block_1_Dataset_HANDLE;\r
 \r
-       currBlock = NVM_block_1_dataset_HANDLE;\r
-\r
-       PATTERN_FILL(TEST_RamBlock_Dataset_0);\r
+       /*\r
+        * Write some pattern to Dataset 0\r
+        */\r
+       PATTERN_FILL(TEST_RamBlock_Dataset_0,0);\r
        NvM_WriteBlock(currBlock,TEST_RamBlock_Dataset_0);\r
-//     TEST_ASSERT( 0 == PATTERN_VERIFY(TEST_RamBlock_Dataset_0));\r
+       BUSY_WAIT(currBlock,&errorStatus);\r
 \r
-       do {\r
-               NvM_GetErrorStatus(currBlock, &errorStatus);\r
-       } while( errorStatus != NVM_REQ_OK );\r
+       memset(TEST_RamBlock_Dataset_0,0,sizeof(TEST_RamBlock_Dataset_0));\r
+       NvM_ReadBlock(currBlock,TEST_RamBlock_Dataset_0);\r
+       BUSY_WAIT(currBlock,&errorStatus);\r
+\r
+       rv = PATTERN_VERIFY(TEST_RamBlock_Dataset_0,0);\r
+       assert(rv == 0);\r
+\r
+       /*\r
+        * Write some pattern to Dataset 1\r
+        */\r
+       rv = NvM_SetDataIndex(currBlock,1);\r
+       assert( rv == E_OK );\r
+       BUSY_WAIT(currBlock,&errorStatus);\r
+\r
+       PATTERN_FILL(TEST_RamBlock_Dataset_0,5);\r
+       NvM_WriteBlock(currBlock,TEST_RamBlock_Dataset_0);\r
+       BUSY_WAIT(currBlock,&errorStatus);\r
 \r
        memset(TEST_RamBlock_Dataset_0,0,sizeof(TEST_RamBlock_Dataset_0));\r
        NvM_ReadBlock(currBlock,TEST_RamBlock_Dataset_0);\r
+       BUSY_WAIT(currBlock,&errorStatus);\r
+\r
+       rv = PATTERN_VERIFY(TEST_RamBlock_Dataset_0,5);\r
+       assert(rv == 0);\r
+\r
+\r
+       /*\r
+        * Back to Dataset 0 and check data.\r
+        */\r
+       NvM_SetDataIndex(currBlock,0);\r
+       assert( rv == E_OK );\r
+       BUSY_WAIT(currBlock,&errorStatus);\r
+\r
+       NvM_ReadBlock(currBlock,TEST_RamBlock_Dataset_0);\r
+       BUSY_WAIT(currBlock,&errorStatus);\r
+\r
+       rv = PATTERN_VERIFY(TEST_RamBlock_Dataset_0,0);\r
+       assert(rv == 0);\r
+\r
+\r
+#if (WRITE_BLOCK_2 == STD_ON)\r
+\r
+       currBlock = NVM_Block_2_Native_HANDLE;\r
+\r
+       rv = NvM_WriteBlock(currBlock,NULL);\r
+       assert( rv == E_OK );\r
 \r
        do {\r
                NvM_GetErrorStatus(currBlock, &errorStatus);\r
        } while( errorStatus != NVM_REQ_OK );\r
 \r
-//     TEST_ASSERT( 0 == PATTERN_VERIFY(TEST_RamBlock_Dataset_0));\r
-}\r
-\r
-\r
-void Task_Application(void) {\r
+#endif\r
 \r
 }\r
 \r
index ee619fd5c49b9e2ff6563cc3f40f5b8929704053..2be55a340acaafa34e5adee90ee713a1c111b497 100644 (file)
@@ -23,6 +23,12 @@ const Fee_BlockConfigType BlockConfigList[] = {
                .ImmediateData = FALSE,\r
                .NumberOfWriteCycles = 0\r
        },      \r
+       {\r
+               .BlockNumber = 4,               \r
+               .BlockSize = 14,\r
+               .ImmediateData = FALSE,\r
+               .NumberOfWriteCycles = 0\r
+       },      \r
        {\r
                .BlockNumber = 3,               \r
                .BlockSize = 22,\r
index 032860e1e16f912b2a4e437ef0465d4fe21167f6..a06c380f9205a53350117262387e974df1c93514 100644 (file)
@@ -32,6 +32,6 @@
 #define FEE_INDEX                                              0\r
 #define FEE_VIRTUAL_PAGE_SIZE              16\r
 \r
-#define FEE_NUM_OF_BLOCKS                              2\r
+#define FEE_NUM_OF_BLOCKS                              3\r
 #define FEE_MAX_NUM_SETS                               2 // 2^NvmDatasetSelectionBits \r
 #endif /*FEE_CFG_H_*/\r
index 9e9bf5ce049148739c88db1d1825a2a3f8273c5b..4fce95d2de5559347358d107e301c8ca2fad5869 100644 (file)
 \r
 #include "NvM.h"\r
 \r
+/* Ram block for Block_2_Native */\r
+extern uint8 Block_2_RamBlock[];\r
+/* InitBlockCallbackFunction block for Block_2_Native */\r
+extern Std_ReturnType Block_2_InitCallback(void);\r
 \r
 // Single block callbacks\r
+extern Std_ReturnType Block_Dataset_SingleCallback(uint8 ServiceId, NvM_RequestResultType JobResult);
 \r
 \r
 // Multi block callback\r
-extern void TEST_MultiBlockCallback(uint8 ServiceId, NvM_RequestResultType JobResult);\r
+extern void MultiBlock_Callback(uint8 ServiceId, NvM_RequestResultType JobResult);\r
 \r
 #ifdef CFG_NVM_USE_SERVICE_COMPONENT\r
-Std_ReturnType block_1_dataset_JobFinished(UInt8 ServiceId, NvM_RequestResultType JobResult) {\r
-       return Rte_Call_block_1_dataset_NvMNotifyJobFinished_JobFinished(ServiceId, JobResult);\r
+Std_ReturnType Block_1_Dataset_JobFinished(UInt8 ServiceId, NvM_RequestResultType JobResult) {\r
+       return Rte_Call_Block_1_Dataset_NvMNotifyJobFinished_JobFinished(ServiceId, JobResult);\r
+}\r
+Std_ReturnType Block_2_Native_JobFinished(UInt8 ServiceId, NvM_RequestResultType JobResult) {\r
+       return Rte_Call_Block_2_Native_NvMNotifyJobFinished_JobFinished(ServiceId, JobResult);\r
 }\r
 \r
-Std_ReturnType block_1_dataset_InitBlock(UInt8 ServiceId, NvM_RequestResultType JobResult) {\r
-       return Rte_Call_block_1_dataset_NvMNotifyInitBlock_InitBlock(ServiceId, JobResult);\r
+Std_ReturnType Block_1_Dataset_InitBlock(UInt8 ServiceId, NvM_RequestResultType JobResult) {\r
+       return Rte_Call_Block_1_Dataset_NvMNotifyInitBlock_InitBlock(ServiceId, JobResult);\r
+}\r
+Std_ReturnType Block_2_Native_InitBlock(UInt8 ServiceId, NvM_RequestResultType JobResult) {\r
+       return Rte_Call_Block_2_Native_NvMNotifyInitBlock_InitBlock(ServiceId, JobResult);\r
 }\r
 \r
-const blockNotifyJobFinishedFunc_t blockNotifyJobFinished[1] = {\r
-       block_1_dataset_JobFinished,\r
+const blockNotifyJobFinishedFunc_t blockNotifyJobFinished[2] = {\r
+       Block_1_Dataset_JobFinished,\r
+       Block_2_Native_JobFinished,\r
 };\r
 \r
-const blockNotifyInitBlockFunc_t blockNotifyInitBlock[1] = {\r
-       block_1_dataset_InitBlock,\r
+const blockNotifyInitBlockFunc_t blockNotifyInitBlock[2] = {\r
+       Block_1_Dataset_InitBlock,\r
+       Block_2_Native_InitBlock,\r
 };\r
 #endif\r
 \r
@@ -68,7 +81,7 @@ const NvM_BlockDescriptorType BlockDescriptorList[] = {
                .BlockWriteProt = STD_OFF,\r
                .WriteBlockOnce = STD_OFF,              /* Value is not configurable */\r
                .SelectBlockForReadall = STD_OFF,\r
-               .SingleBlockCallback = NULL,\r
+               .SingleBlockCallback = Block_Dataset_SingleCallback,\r
                .NvBlockLength = 20,\r
                .RamBlockDataAddress = NULL,\r
                .NvBlockNum = 2,\r
@@ -83,11 +96,32 @@ const NvM_BlockDescriptorType BlockDescriptorList[] = {
                .RomBlockDataAdress = NULL,\r
                .InitBlockCallback = NULL,\r
        },\r
+       {\r
+               .NvramBlockIdentifier = 3,\r
+               .BlockManagementType = NVM_BLOCK_NATIVE,\r
+               .BlockWriteProt = STD_OFF,\r
+               .WriteBlockOnce = STD_OFF,              /* Value is not configurable */\r
+               .SelectBlockForReadall = STD_ON,\r
+               .SingleBlockCallback = NULL,\r
+               .NvBlockLength = 10,\r
+               .RamBlockDataAddress = Block_2_RamBlock,\r
+               .NvBlockNum = 1,\r
+               .NvramDeviceId = 1,                     /* Value is not configurable */         \r
+               .NvBlockBaseNumber = 4,\r
+               .BlockUseCrc = true,\r
+               .CalcRamBlockCrc = false,\r
+               .BlockJobPriority = 0,                  /* Value is not configurable */\r
+               .ResistantToChangesSw = FALSE,  /* Value is not configurable */\r
+               .BlockCRCType = NVM_CRC32,\r
+               .RomBlockNum = 0,\r
+               .RomBlockDataAdress = NULL,\r
+               .InitBlockCallback = Block_2_InitCallback,\r
+       },\r
 };\r
 \r
 const NvM_ConfigType NvM_Config = {\r
                .Common = {\r
-                               .MultiBlockCallback = TEST_MultiBlockCallback,\r
+                               .MultiBlockCallback = MultiBlock_Callback,\r
                },\r
                .BlockDescriptor = BlockDescriptorList,         \r
 };\r
index d82017431a86fd5f079133a05259d376243ae643..900e78765cfc10f143969d10f50a27aba7e59afd 100644 (file)
 #define NVM_SIZE_IMMEDIATE_JOB_QUEUE   0                                               // 1..255\r
 #define NVM_SIZE_STANDARD_JOB_QUEUE            4                                               // 1..255\r
 \r
-#define NVM_block_1_dataset_HANDLE 2\r
+#define NVM_Block_1_Dataset_HANDLE 2\r
+#define NVM_Block_2_Native_HANDLE 3\r
 \r
 #define NVM_MAX_BLOCK_LENGTH                   20\r
 \r
-#define NVM_NUM_OF_NVRAM_BLOCKS                        2\r
+#define NVM_NUM_OF_NVRAM_BLOCKS                        3\r
 \r
 #ifdef CFG_NVM_USE_SERVICE_COMPONENT\r
 typedef Std_ReturnType (*blockNotifyJobFinishedFunc_t)(UInt8, NvM_RequestResultType);\r
index 8a1d3a74f178cbcdc7feea956df9e51f71e0d0ec..380129cf7e8affe46a74fdfedd0acad22f5e713e 100644 (file)
@@ -46,7 +46,7 @@
           <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/NvM</DEFINITION-REF>\r
           <CONTAINERS>\r
             <CONTAINER UUID="f2439634-d30c-4441-b20c-0352011f425e">\r
-              <SHORT-NAME>block_1_dataset</SHORT-NAME>\r
+              <SHORT-NAME>Block_1_Dataset</SHORT-NAME>\r
               <ADMIN-DATA>\r
                 <SDGS>\r
                   <SDG GID="Arccore::IdentifiableOptions" />\r
                 </BOOLEAN-VALUE>\r
                 <FUNCTION-NAME-VALUE>\r
                   <DEFINITION-REF DEST="FUNCTION-NAME-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmSingleBlockCallback</DEFINITION-REF>\r
-                  <VALUE />\r
+                  <VALUE>Block_Dataset_SingleCallback</VALUE>\r
                 </FUNCTION-NAME-VALUE>\r
                 <BOOLEAN-VALUE>\r
                   <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmWriteBlockOnce</DEFINITION-REF>\r
                   <REFERENCE-VALUES>\r
                     <REFERENCE-VALUE>\r
                       <DEFINITION-REF DEST="SYMBOLIC-NAME-REFERENCE-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmTargetBlockReference/NvmFeeRef/NvmNameOfFeeBlock</DEFINITION-REF>\r
-                      <VALUE-REF DEST="CONTAINER">/nvm_05_fls_mpc5516it/Fee/Fee_Block_1</VALUE-REF>\r
+                      <VALUE-REF DEST="CONTAINER">/nvm_05_fls_mpc5516it/Fee/Fee_Block_Dataset_0</VALUE-REF>\r
                     </REFERENCE-VALUE>\r
                   </REFERENCE-VALUES>\r
                 </CONTAINER>\r
                 </INTEGER-VALUE>\r
                 <FUNCTION-NAME-VALUE>\r
                   <DEFINITION-REF DEST="FUNCTION-NAME-DEF">/ArcCore/NvM/NvmCommon/NvmMultiBlockCallback</DEFINITION-REF>\r
-                  <VALUE>TEST_MultiBlockCallback</VALUE>\r
+                  <VALUE>MultiBlock_Callback</VALUE>\r
                 </FUNCTION-NAME-VALUE>\r
                 <BOOLEAN-VALUE>\r
                   <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/NvM/NvmCommon/NvmPollingMode</DEFINITION-REF>\r
                 </BOOLEAN-VALUE>\r
               </PARAMETER-VALUES>\r
             </CONTAINER>\r
+            <CONTAINER UUID="1348e625-fe60-402e-9e16-52113eb7dfd8">\r
+              <SHORT-NAME>Block_2_Native</SHORT-NAME>\r
+              <ADMIN-DATA>\r
+                <SDGS>\r
+                  <SDG GID="Arccore::IdentifiableOptions" />\r
+                </SDGS>\r
+              </ADMIN-DATA>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/NvM/NvmBlockDescriptor</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmBlockCRCType</DEFINITION-REF>\r
+                  <VALUE>NVM_CRC32</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmBlockJobPriority</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+                <ENUMERATION-VALUE>\r
+                  <DEFINITION-REF DEST="ENUMERATION-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmBlockManagementType</DEFINITION-REF>\r
+                  <VALUE>NVM_BLOCK_NATIVE</VALUE>\r
+                </ENUMERATION-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmBlockUseCrc</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmBlockWriteProt</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmCalcRamBlockCrc</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <FUNCTION-NAME-VALUE>\r
+                  <DEFINITION-REF DEST="FUNCTION-NAME-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmInitBlockCallback</DEFINITION-REF>\r
+                  <VALUE>Block_2_InitCallback</VALUE>\r
+                </FUNCTION-NAME-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="DERIVED-INTEGER-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmNvBlockBaseNumber</DEFINITION-REF>\r
+                  <VALUE>4</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmNvBlockLength</DEFINITION-REF>\r
+                  <VALUE>10</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmNvBlockNum</DEFINITION-REF>\r
+                  <VALUE>1</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmNvramBlockIdentifier</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="DERIVED-INTEGER-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmNvramDeviceId</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+                <STRING-VALUE>\r
+                  <DEFINITION-REF DEST="STRING-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmRamBlockDataAddress</DEFINITION-REF>\r
+                  <VALUE>Block_2_RamBlock</VALUE>\r
+                </STRING-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmResistantToChangedSw</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <STRING-VALUE>\r
+                  <DEFINITION-REF DEST="STRING-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmRomBlockDataAddress</DEFINITION-REF>\r
+                  <VALUE />\r
+                </STRING-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmRomBlockNum</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmSelectBlockForReadall</DEFINITION-REF>\r
+                  <VALUE>true</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <FUNCTION-NAME-VALUE>\r
+                  <DEFINITION-REF DEST="FUNCTION-NAME-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmSingleBlockCallback</DEFINITION-REF>\r
+                  <VALUE />\r
+                </FUNCTION-NAME-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmWriteBlockOnce</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmBlockCbkUsePort</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+              </PARAMETER-VALUES>\r
+              <SUB-CONTAINERS>\r
+                <CONTAINER UUID="f577c043-d9aa-410f-8fda-71baab64104c">\r
+                  <SHORT-NAME>NvmFeeRef</SHORT-NAME>\r
+                  <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmTargetBlockReference/NvmFeeRef</DEFINITION-REF>\r
+                  <REFERENCE-VALUES>\r
+                    <REFERENCE-VALUE>\r
+                      <DEFINITION-REF DEST="SYMBOLIC-NAME-REFERENCE-PARAM-DEF">/ArcCore/NvM/NvmBlockDescriptor/NvmTargetBlockReference/NvmFeeRef/NvmNameOfFeeBlock</DEFINITION-REF>\r
+                      <VALUE-REF DEST="CONTAINER">/nvm_05_fls_mpc5516it/Fee/Fee_Block_Native</VALUE-REF>\r
+                    </REFERENCE-VALUE>\r
+                  </REFERENCE-VALUES>\r
+                </CONTAINER>\r
+              </SUB-CONTAINERS>\r
+            </CONTAINER>\r
           </CONTAINERS>\r
         </MODULE-CONFIGURATION>\r
         <MODULE-CONFIGURATION UUID="6b94ef7e-3c42-48fa-bcd0-a71f3681b630">\r
           <DEFINITION-REF DEST="MODULE-DEF">/ArcCore/Fee</DEFINITION-REF>\r
           <CONTAINERS>\r
             <CONTAINER UUID="787e69b8-436e-428e-8667-b932e28154f4">\r
-              <SHORT-NAME>Fee_Block_1</SHORT-NAME>\r
+              <SHORT-NAME>Fee_Block_Dataset_0</SHORT-NAME>\r
               <ADMIN-DATA>\r
                 <SDGS>\r
                   <SDG GID="Arccore::IdentifiableOptions" />\r
               </PARAMETER-VALUES>\r
             </CONTAINER>\r
             <CONTAINER UUID="04933477-a39d-4b35-acf1-c6743d73d075">\r
-              <SHORT-NAME>Fee_Block_2</SHORT-NAME>\r
+              <SHORT-NAME>Fee_Block_Native</SHORT-NAME>\r
+              <ADMIN-DATA>\r
+                <SDGS>\r
+                  <SDG GID="Arccore::IdentifiableOptions" />\r
+                </SDGS>\r
+              </ADMIN-DATA>\r
+              <DEFINITION-REF DEST="PARAM-CONF-CONTAINER-DEF">/ArcCore/Fee/FeeBlockConfiguration</DEFINITION-REF>\r
+              <PARAMETER-VALUES>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Fee/FeeBlockConfiguration/FeeBlockNumber</DEFINITION-REF>\r
+                  <VALUE>4</VALUE>\r
+                </INTEGER-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Fee/FeeBlockConfiguration/FeeBlockSize</DEFINITION-REF>\r
+                  <VALUE>14</VALUE>\r
+                </INTEGER-VALUE>\r
+                <BOOLEAN-VALUE>\r
+                  <DEFINITION-REF DEST="BOOLEAN-PARAM-DEF">/ArcCore/Fee/FeeBlockConfiguration/FeeImmediateData</DEFINITION-REF>\r
+                  <VALUE>false</VALUE>\r
+                </BOOLEAN-VALUE>\r
+                <INTEGER-VALUE>\r
+                  <DEFINITION-REF DEST="INTEGER-PARAM-DEF">/ArcCore/Fee/FeeBlockConfiguration/FeeNumberOfWriteCycles</DEFINITION-REF>\r
+                  <VALUE>0</VALUE>\r
+                </INTEGER-VALUE>\r
+              </PARAMETER-VALUES>\r
+            </CONTAINER>\r
+            <CONTAINER UUID="23cefe56-b33f-456e-ab3f-ea4d133b7e85">\r
+              <SHORT-NAME>Fee_Block_Dataset_1</SHORT-NAME>\r
               <ADMIN-DATA>\r
                 <SDGS>\r
                   <SDG GID="Arccore::IdentifiableOptions" />\r