/*********************************************************************************************************************** * FILE DESCRIPTION * ------------------------------------------------------------------------------------------------------------------*/ /** \file * \brief Implementation of pattern/mask based non-volatile information storage * * -------------------------------------------------------------------------------------------------------------------- * COPYRIGHT * -------------------------------------------------------------------------------------------------------------------- * \par Copyright * \verbatim * Copyright (c) 2026 by Vector Informatik GmbH. All rights reserved. * * This software is copyright protected and proprietary to Vector Informatik GmbH. * Vector Informatik GmbH grants to you only those rights as set out in the license conditions. * All other rights remain with Vector Informatik GmbH. * \endverbatim */ /**********************************************************************************************************************/ /*********************************************************************************************************************** * TEMPLATE REVISION HISTORY * -------------------------------------------------------------------------------------------------------------------- * Version Date Author Change Id Description * -------------------------------------------------------------------------------------------------------------------- * 01.00.00 2017-02-24 visci - Initial version * 01.01.00 2018-06-15 visci ESCAN00099699 No changes * 01.02.00 2018-09-24 visrr ESCAN00100837 No changes * 01.03.00 2018-12-07 visshs ESCAN00101559 No changes * 01.04.00 2019-01-25 viskjs ESCAN00101824 Added patterns that can be validated multiple times * ESCAN00101823 Added feature to store arbitrary values at end of logical block * 01.04.01 2019-03-26 viskjs ESCAN00102200 No changes * ESCAN00102204 No changes * ESCAN00102646 No changes * 01.04.02 2019-07-22 vistbe ESCAN00103605 No changes * 01.04.03 2020-05-07 visjdn ESCAN00106002 No changes * 01.04.04 2021-03-03 visrie ESCAN00108616 No changes * ESCAN00108753 No changes * FBL-3129 Added/adapted MemMap sections * Update to MISRA 2012 * 01.04.05 2021-03-16 visrie ESCAN00108859 No changes * 01.05.00 2021-06-16 visrie FBL-3641 Support OTA use case and user extension * -------------------------------------------------------------------------------------------------------------------- * REVISION HISTORY * -------------------------------------------------------------------------------------------------------------------- * Version Date Author Change Id Description * -------------------------------------------------------------------------------------------------------------------- * 05.00.00 2022-08-15 vistmo FBL-5514 Support Additional OTA functionality * ESCAN00112435 No changes * ESCAN00112575 No changes * 05.01.00 2022-10-04 jschmitding FBL-5917 No changes * ESCAN00113919 No changes * 05.01.01 2022-10-17 fmenke ESCAN00112879 No changes * 05.01.02 2023-01-13 fmenke ESCAN00112890 No changes * ESCAN00113612 No changes * 05.02.00 2023-02-09 vistmo ESCAN00112972 No changes * ESCAN00113292 No changes * ESCAN00113835 No changes * ESCAN00113843 No changes * ESCAN00113764 No changes * FBL-6438 No changes * 05.02.01 2023-05-11 fmenke ESCAN00113831 No changes * 05.03.00 2023-07-24 fmenke FBL-7335 No changes * 05.03.01 2023-08-31 lhopfhauer ESCAN00115494 No changes * 05.03.02 2024-07-16 erizk ESCAN00117344 No changes * 05.03.03 2025-02-06 virchl ESCAN00118587 No changes * 05.04.00 2025-02-28 jjohnson FBL-10065 No changes * 05.04.01 2025-06-10 jostravsky ESCAN00120315 No changes * 05.04.02 2025-07-08 visarcmijo ESCAN00119833 No changes * 05.05.00 2025-09-01 fmenke FBL-11218 No changes * ESCAN00120917 No changes * 05.06.00 2025-10-28 mpatil FBL-11690 No changes * 05.07.00 2026-01-13 dganesh FBL-12162 No changes **********************************************************************************************************************/ #ifndef FBLLIB_NVPATTERN_OEM_H #define FBLLIB_NVPATTERN_OEM_H /*********************************************************************************************************************** * DEFINES **********************************************************************************************************************/ /* Check if multiple validation feature was explicitly enabled externally */ # if !defined( FBL_NVPATTERN_ENABLE_MULTIPLE_VALIDATION ) /* Disables NvPatterns which can be validated multiple times after erasing a logical block */ # define FBL_NVPATTERN_DISABLE_MULTIPLE_VALIDATION # endif /* !FBL_NVPATTERN_ENABLE_MULTIPLE_VALIDATION */ /* Check if block properties feature was explicitly enabled externally */ # if !defined( FBL_NVPATTERN_ENABLE_BLOCK_PROPERTIES ) /* Disables storing arbitrary data at the end of logical blocks */ # define FBL_NVPATTERN_DISABLE_BLOCK_PROPERTIES # endif /* !FBL_NVPATTERN_ENABLE_BLOCK_PROPERTIES */ /* Disable user patterns if they are not explicitly defined */ #if !defined( FBL_NVPATTERN_USER_PATTERN_ID ) # define FBL_NVPATTERN_USER_PATTERN_ID #endif /* FBL_NVPATTERN_USER_PATTERN_ID */ #if !defined( FBL_NVPATTERN_USER_PATTERN_MULTIPLICITY ) # define FBL_NVPATTERN_USER_PATTERN_MULTIPLICITY #endif /* FBL_NVPATTERN_USER_PATTERN_MULTIPLICITY */ #if !defined( FBL_NVPATTERN_USER_PROPERTY_ID ) # define FBL_NVPATTERN_USER_PROPERTY_ID #endif /* FBL_NVPATTERN_USER_PROPERTY_ID */ #if !defined( FBL_NVPATTERN_USER_PROPERTY_ENTRY ) # define FBL_NVPATTERN_USER_PROPERTY_ENTRY #endif /* FBL_NVPATTERN_USER_PROPERTY_ENTRY */ /*********************************************************************************************************************** * TYPEDEFS **********************************************************************************************************************/ /* * This module is used to store NvPatterns and block properties at the end of logical blocks. * Block properties are used to store arbitrary data of the length defined in fblNvPatternElementLength to memory. * Block properties can be written once after erasure of the logical block. * NvPatterns are used to store a boolean value (valid/invalid). They can be set to valid * several times if the respective value in fblNvPatternMultiplicity is set to > 1. * * MEMORY LAYOUT: * * |--------------------------------| <-- UPPER END of pattern/property area (usually end of logical block) * | kFblNvPatternId_First | First NvPattern * | ... | * | kFblNvPatternId_Final | * | kFblNvPatternId_Separator | <-- SEPARATOR between patterns and block properties (do NOT delete this entry) * | kFblNvProperty_First | First block property * | ... | * | kFblNvProperty_Final | * | kFblNvPatternId_Last | <-- LOWER END of pattern/property area (do NOT delete this entry) * | | * * Note: the actual pattern/block property size is determined by the page size. * All data elements are aligned to multiples of the page size of the respective device! */ /* PRQA S 0724 TAG_FblNvPatternOem_0724 */ /* MD_FblNvPatternOem_0724_EnumValNotUnique */ /* Identifiers for patterns and block properties */ typedef enum { kFblNvPatternId_Invalid = 0u /* do NOT change this entry */ /* PartitionValidity (OTA) and ApplValidity (BM) uses the same value */ ,kFblNvPatternId_PartitionValidity ,kFblNvPatternId_ApplValidity = kFblNvPatternId_PartitionValidity /* ModuleValidity (OTA) and BlockValidity (BM) uses the same value */ ,kFblNvPatternId_ModuleValidity ,kFblNvPatternId_BlockValidity = kFblNvPatternId_ModuleValidity #if defined( FBL_ENABLE_FLASH_ERASED_DETECTION ) ,kFblNvPatternId_ErasedState #endif FBL_NVPATTERN_USER_PATTERN_ID #if defined( FBL_NVPATTERN_ENABLE_BLOCK_PROPERTIES ) ,kFblNvPatternId_Separator /* do NOT delete this entry */ FBL_NVPATTERN_USER_PROPERTY_ID #endif /* FBL_NVPATTERN_ENABLE_BLOCK_PROPERTIES */ ,kFblNvPatternId_Last /* do NOT delete this entry */ } tFblNvPatternId; /* PRQA L:TAG_FblNvPatternOem_0724 */ #if defined( FBL_NVPATTERN_ENABLE_BLOCK_PROPERTIES ) typedef struct { IO_SizeType length; tFblNvPatternId dependentPattern; } tFblBlockProperty; #endif /* FBL_NVPATTERN_ENABLE_BLOCK_PROPERTIES */ /*********************************************************************************************************************** * GLOBAL DATA **********************************************************************************************************************/ #define FBLNVPATTERN_START_SEC_CONST #include "MemMap.h" /* PRQA S 5087 */ /* MD_MSR_MemMap */ #if defined ( FBL_NVPATTERN_ENABLE_MULTIPLE_VALIDATION ) /* PRQA S 3684 1 */ /* MD_FblNvPatternOem_3684 */ V_MEMROM0 extern V_MEMROM1 vuint8 V_MEMROM2 fblNvPatternMultiplicity[]; #endif /* FBL_NVPATTERN_ENABLE_MULTIPATTERNS */ #if defined( FBL_NVPATTERN_ENABLE_BLOCK_PROPERTIES ) /* PRQA S 3684 1 */ /* MD_FblNvPatternOem_3684 */ V_MEMROM0 extern V_MEMROM1 tFblBlockProperty V_MEMROM2 fblNvBlockProperties[]; #endif /* FBL_NVPATTERN_ENABLE_BLOCK_PROPERTIES */ #define FBLNVPATTERN_STOP_SEC_CONST #include "MemMap.h" /* PRQA S 5087 */ /* MD_MSR_MemMap */ #endif /* FBLLIB_NVPATTERN_OEM_H */ /*********************************************************************************************************************** * END OF FILE: FBL_NVPATTERN_OEM.H **********************************************************************************************************************/