/************************************************************************** * * Copyright (c) 2026-2026 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file NVDriver.h * * @author (last) Arpita Srivastava * @date (last) 11-Jun-2026 * * @author (original) Arpita Srivastava * @date (original) 11-Jun-2026 * ***************************************************************************/ #ifndef _NV_DRIVER_H #define _NV_DRIVER_H #include "Common.h" #include "DDDefs.h" /** * @defgroup NVDriver NVDriver * @brief Non Volatile Memory Driver module provides an abstraction layer for * accessing Flash memory, ncluding initialization, sector erase, read, and write operations. * * @addtogroup NVDriver * @{ */ // ********** public definitions ********** #define BANK7_SECTOR0_START_ADDRESS 0xF0200000 ///< Bank7 sector 0 start address. #define BANK7_SECTOR0_END_ADDRESS 0xF0203FFF ///< Bank7 sector 0 end address. #define BANK7_SECTOR1_START_ADDRESS 0xF0204000 ///< Bank7 sector 1 start address. #define BANK7_SECTOR1_END_ADDRESS 0xF0207FFF ///< Bank7 sector 1 end address. #define BANK7_SECTOR2_START_ADDRESS 0xF0208000 ///< Bank7 sector 2 start address. #define BANK7_SECTOR2_END_ADDRESS 0xF020BFFF ///< Bank7 sector 2 end address. #define BANK7_SECTOR3_START_ADDRESS 0xF020C000 ///< Bank7 sector 3 start address. #define BANK7_SECTOR3_END_ADDRESS 0xF020FFFF ///< Bank7 sector 3 end address. #define MAX_EEPROM_WRITE_BUFFER_BYTES 16U ///< Max allowed bytes for an EEPROM write (16 bytes). /// Non Volatile Memory operation modes enumeration. typedef enum NVM_Operation { NVM_OPERATION_NONE = 0, ///< Default mode to prevent any accidental ops. NVM_OPERATION_WRITE, ///< Operation mode write. NVM_OPERATION_READ, ///< Operation mode read. NVM_OPERATION_ERASE, ///< Operation mode erase a sector. NUM_OF_NVM_OPERATIONS ///< Total number of operation states. } NVM_OPERATION_T; /// NVM record type enumeration typedef enum NVM_Record_Type { NVM_SYSTEM_RECORD = 0, ///< NVM process system record. NVM_SERVICE_RECORD, ///< NVM process service record. NVM_CALIBRATION_RECORD, ///< NVM process calibration record. NVM_INSTITUTIONAL_RECORD, ///< NVM process institutional record. NVM_USAGE_INFO_RECORD, ///< NVM process usage info record. NUM_OF_NVM_RECORD_TYPES ///< Number of NVM records jobs. } NVM_RECORD_TYPE_T; //TODO: Fix in TD /// DD available NV data to get typedef enum DD_nv_commands { GET_CAL_PRESSURE_SENOSRS = 0, ///< Get pressure sensors calibration data. GET_CAL_TEMP_SENSORS, ///< Get temperature sensors calibration data. GET_CAL_CONCENTRATE_PUMPS_RECORD, ///< Get concentrate pumps calibration record. GET_CAL_D12_PUMP_RECORD, ///< Get D12 dialysate pump calibration record. GET_CAL_D48_PUMP_RECORD, ///< Get D48 dialysate pump calibration record. GET_CAL_ACID_CONCENTREATES, ///< Get acid concentrates calibration data. GET_CAL_BICARB_CONCENTRATES, ///< Get bicarb concentrates calibration data. GET_CAL_ACCEL_SENSORS, ///< Get accelerometers calibration data. GET_CAL_BLOOD_LEAK_SENSOR, ///< Get blood leak sensor calibration data. GET_SYSTEM_RECORD, ///< Get system record. GET_SERVICE_RECORD, ///< Get service record. GET_INSTITUTIONAL_RECORD, ///< Get institutional record. GET_USAGE_RECORD, ///< Get usage record. NUM_OF_NV_DD_DATA ///< Number of non-volatile data. } NV_DATA_T; //TODO: Fix in TD /// NVM self-test states enumeration. typedef enum NVM_Self_Test_States { NVM_SELF_TEST_STATE_READ_RECORDS = 0, ///< Self test read records. NVM_SELF_TEST_STATE_CHECK_CRC, ///< Self test check CRC. NVM_SELF_TEST_STATE_COMPLETE, ///< Self test complete. NUM_OF_NVM_SELF_TEST_STATES ///< Total number of self-test states. } NVM_SELF_TEST_STATE_T; /// Process records job structure typedef struct { NVM_OPERATION_T memoryOperation; ///< Memory operation. NVM_RECORD_TYPE_T recordJob; ///< Record job (i.e sector 0). } PROCESS_RECORD_JOB_T; //TODO: Fix in TD /// Process records specifications structure typedef struct { U32 recordFlashAddress; ///< Jobs spec start address. U32 sizeofRecord; ///< Jobs spec size of job. U08* structAddressPtr; ///< Jobs structure address pointer. U08* structCRCPtr; ///< Jobs structure CRC pointer. DD_EVENT_ID_T nvEvent; ///< Jobs non-volatile DD event (i.e calibration, system). } PROCESS_RECORD_SPECS_T; // ********** public function prototypes ********** void initNVDriver( void ); void eraseSector( U32* recordFlashAddress ); void writeSector( U32* recordFlashAddress, U08* bufferAddress, U32 bufferSize ); void readSector( U32* recordFlashAddress, U32* bufferAddress, U32 bufferSize ); BOOL isFlashReady( void ); /**@}*/ #endif /* _NV_DRIVER_H */