Index: NVDataMgmt.c =================================================================== diff -u -r34d06953f880f3dd2b50f5361cfe31a70c579a38 -ra3514aa5cf959bdc0c0af7d1bc43864881af1438 --- NVDataMgmt.c (.../NVDataMgmt.c) (revision 34d06953f880f3dd2b50f5361cfe31a70c579a38) +++ NVDataMgmt.c (.../NVDataMgmt.c) (revision a3514aa5cf959bdc0c0af7d1bc43864881af1438) @@ -40,10 +40,28 @@ #define BANK7_SECTOR3_START_ADDRESS 0xF020FFFF #define BANK7_SECTOR3_END_ADDRESS 0xF020C000 +// RTC RAM defines + +#define BOOTLOADER_FLAG_START_ADDRESS 0x0000 +#define BOOTLOADER_FLAG_LENGTH_BYTES 4U + +// Address 20 in the RTC RAM +#define LOG_RECORDS_START_ADDRESS 0x0014 +#define LOG_RECORDS_LENGTH_BYTES 6U + +#define BUFFER_INDEX_0 0U +#define BUFFER_INDEX_1 1U +#define BUFFER_INDEX_2 2U +#define BUFFER_INDEX_3 3U +#define BUFFER_INDEX_4 4U +#define BUFFER_INDEX_5 5U + typedef enum NVDataMgmt_Self_Test_States { NVDATAMGMT_SELF_TEST_STATE_START = 0, - NVDATAMGMT_SELF_TEST_STATE_READ_MEMORY_DATA, + NVDATAMGMT_SELF_TEST_STATE_READ_BOOTLOADER_FLAG, + NVDATAMGMT_SELF_TEST_STATE_READ_LOG_RECORD, + NVDATAMGMT_SELF_TEST_STATE_READ_MFG_DATA, NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC, NVDATAMGMT_SELF_TEST_STATE_COMPLETE, NUM_OF_NVDATAMGMT_SELF_TEST_STATES @@ -71,37 +89,54 @@ NVDATAMGMT_RTC } NVDATAMGMT_MEMORY_LOCATION_STATE_T; +// Private functions + +static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestStart( void ); +static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadMfgData( void ); +static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadBootloaderFlag( void ); +static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadLogRecord( void ); +static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestCheckCRC( void ); + +/*static NVDATAMGMT_EXEC_STATE_T handleExecWaitForPost( void ); +static NVDATAMGMT_EXEC_STATE_T handleExecIdle( void ); +static NVDATAMGMT_EXEC_STATE_T handleExecWrite( void ); +static NVDATAMGMT_EXEC_STATE_T handleExecRead( void );*/ + +// Private variables + #pragma pack(push,4) struct memoryOps { NVDATAMGMT_READ_WRITE_STATE_T readWrite; NVDATAMGMT_MEMORY_LOCATION_STATE_T memoryLocation; - U32 startAddress; + U32 startAddress; U16* buffer; - U32 length; + U32 length; }; #pragma pack(pop) -// Private functions +#pragma pack(push,4) +typedef struct +{ + U16 recordsCount; + U16 nextWriteIndex; + U16 nextReadIndex; +} LOG_RECORDS; +#pragma pack(push,4) -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestStart( void ); -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadMemoryData( void ); -static NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestCheckCRC( void ); -static NVDATAMGMT_EXEC_STATE_T handleExecWaitForPost( void ); -static NVDATAMGMT_EXEC_STATE_T handleExecIdle( void ); -static NVDATAMGMT_EXEC_STATE_T handleExecWrite( void ); -static NVDATAMGMT_EXEC_STATE_T handleExecRead( void ); - -// Private variables - struct memoryOps jobQueue[ MAX_QUEUE_SIZE ]; +static LOG_RECORDS logRecords; static Fapi_StatusType EEPROMStatus = Fapi_Status_Success; static NVDATAMGMT_SELF_TEST_STATE_T NVDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_START; static NVDATAMGMT_EXEC_STATE_T NVDataMgmtExecState = NVDATAMGMT_EXEC_STATE_WAIT_FOR_POST; static SELF_TEST_STATUS_T NVDataMgmtSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; static BOOL isServiceOnEntry = TRUE; +static U32 bootloaderFlag = 0; +static U16 RTCRAMBuffer[ 8 ] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +// for testing only, remove static U32 readBuffer[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; /************************************************************************* @@ -117,7 +152,6 @@ { // TODO: initialize all the necessary variables NVDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_START; - EEPROMStatus = Fapi_initializeFlashBanks( ROUNDED_HCLK_FREQ ); EEPROMStatus = Fapi_setActiveFlashBank( Fapi_FlashBank7 ); } @@ -142,23 +176,70 @@ } else if ( EEPROMStatus == Fapi_Status_Success ) { - state = NVDATAMGMT_SELF_TEST_STATE_READ_MEMORY_DATA; + state = NVDATAMGMT_SELF_TEST_STATE_READ_BOOTLOADER_FLAG; isServiceOnEntry = TRUE; } return state; } -NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadMemoryData( void ) +NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadBootloaderFlag( void ) { - NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_MEMORY_DATA; + NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_BOOTLOADER_FLAG; + if ( isServiceOnEntry && getRTCRAMState() == RTC_RAM_STATE_READY ) + { + readFromRAM( BOOTLOADER_FLAG_START_ADDRESS, BOOTLOADER_FLAG_LENGTH_BYTES ); + isServiceOnEntry= FALSE; + } + if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE ) + { + U08 i; + U32 tempValue; + getDataFromRAM( RTCRAMBuffer, BOOTLOADER_FLAG_LENGTH_BYTES ); + for ( i = 0; i < BOOTLOADER_FLAG_LENGTH_BYTES; i++ ) + { + tempValue = RTCRAMBuffer [ i ] << i * SHIFT_8_BITS_FOR_BYTE_SHIFT; + bootloaderFlag = bootloaderFlag + tempValue; + } + state = NVDATAMGMT_SELF_TEST_STATE_READ_LOG_RECORD; + isServiceOnEntry= TRUE; + } + return state; +} +NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadLogRecord ( void ) +{ + NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_LOG_RECORD; + if ( isServiceOnEntry && getRTCRAMState() == RTC_RAM_STATE_READY ) + { + readFromRAM( LOG_RECORDS_START_ADDRESS, LOG_RECORDS_LENGTH_BYTES ); + isServiceOnEntry= FALSE; + } + if ( getRTCRAMStatus() == RTC_RAM_STATUS_IDLE ) + { + getDataFromRAM( RTCRAMBuffer, LOG_RECORDS_LENGTH_BYTES ); + logRecords.recordsCount = ( RTCRAMBuffer[ BUFFER_INDEX_0 ] << SHIFT_8_BITS_FOR_BYTE_SHIFT ) + + RTCRAMBuffer[ BUFFER_INDEX_1 ]; + logRecords.nextWriteIndex = ( RTCRAMBuffer[ BUFFER_INDEX_2 ] << SHIFT_8_BITS_FOR_BYTE_SHIFT ) + + RTCRAMBuffer[ BUFFER_INDEX_3 ]; + logRecords.nextReadIndex = ( RTCRAMBuffer[ BUFFER_INDEX_4 ] << SHIFT_8_BITS_FOR_BYTE_SHIFT ) + + RTCRAMBuffer[ BUFFER_INDEX_5 ]; + state = NVDATAMGMT_SELF_TEST_STATE_READ_MFG_DATA; + isServiceOnEntry = TRUE; + } + return state; +} + +NVDATAMGMT_SELF_TEST_STATE_T handleSelfTestReadMfgData( void ) +{ + NVDATAMGMT_SELF_TEST_STATE_T state = NVDATAMGMT_SELF_TEST_STATE_READ_MFG_DATA; if ( isServiceOnEntry ) { - EEPROMStatus = Fapi_doMarginRead((uint32_t*)BANK7_SECTOR0_START_ADDRESS, readBuffer, 8, Fapi_NormalRead); + EEPROMStatus = Fapi_doMarginRead( (uint32_t*)BANK7_SECTOR0_START_ADDRESS, readBuffer, 8, Fapi_NormalRead ); isServiceOnEntry = FALSE; } else if ( EEPROMStatus == Fapi_Status_Success ) { + state = NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC; isServiceOnEntry = TRUE; } return state; @@ -182,12 +263,26 @@ NVDataMgmtSelfTestState = handleSelfTestStart(); break; - case NVDATAMGMT_SELF_TEST_STATE_READ_MEMORY_DATA: + case NVDATAMGMT_SELF_TEST_STATE_READ_BOOTLOADER_FLAG: - NVDataMgmtSelfTestState = handleSelfTestReadMemoryData(); + NVDataMgmtSelfTestState = handleSelfTestReadBootloaderFlag(); break; + case NVDATAMGMT_SELF_TEST_STATE_READ_LOG_RECORD: + + NVDataMgmtSelfTestState = handleSelfTestReadLogRecord(); + break; + + case NVDATAMGMT_SELF_TEST_STATE_READ_MFG_DATA: + + NVDataMgmtSelfTestState = handleSelfTestReadMfgData(); + break; + case NVDATAMGMT_SELF_TEST_STATE_CHECK_CRC: + + // FOR TESTING PURPOSES. REMOVE THIS CODE + NVDataMgmtSelfTestState = NVDATAMGMT_SELF_TEST_STATE_COMPLETE; + NVDataMgmtSelfTestResult = SELF_TEST_STATUS_PASSED; break; case NVDATAMGMT_SELF_TEST_STATE_COMPLETE: @@ -203,10 +298,28 @@ } - void execNVDataMgmt( void ) { + switch ( NVDataMgmtExecState ) + { + case NVDATAMGMT_EXEC_STATE_WAIT_FOR_POST: + break; + case NVDATAMGMT_EXEC_STATE_IDLE: + break; + + case NVDATAMGMT_EXEC_STATE_WRITE: + break; + + case NVDATAMGMT_EXEC_STATE_READ: + break; + + case NVDATAMGMT_EXEC_STATE_FAULT: + break; + + default: + break; + } } Index: RTC.c =================================================================== diff -u -r34d06953f880f3dd2b50f5361cfe31a70c579a38 -ra3514aa5cf959bdc0c0af7d1bc43864881af1438 --- RTC.c (.../RTC.c) (revision 34d06953f880f3dd2b50f5361cfe31a70c579a38) +++ RTC.c (.../RTC.c) (revision a3514aa5cf959bdc0c0af7d1bc43864881af1438) @@ -458,17 +458,17 @@ RAMBufferLength = length; prepRAMBuffer[ RTC_PREP_RAM_INDEX ] = RTC_PREP_RAM_READ_WRITE; - prepRAMBuffer[ RTC_RAM_HIGH_ADDRESS_INDEX ] = ( address >> SHIFT_8_BITS_FOR_BYTE_SHIFT ); - prepRAMBuffer[ RTC_RAM_LOW_ADDRESS_INDEX ] = ( address & MASK_OFF_MSB ); + //prepRAMBuffer[ RTC_RAM_HIGH_ADDRESS_INDEX ] = ( address >> SHIFT_8_BITS_FOR_BYTE_SHIFT ); + //prepRAMBuffer[ RTC_RAM_HIGH_ADDRESS_INDEX ] = ( address & MASK_OFF_NIBBLE_LSB ) >> SHIFT_BITS_BY_4; + prepRAMBuffer[ RTC_RAM_HIGH_ADDRESS_INDEX ] = 0x0000; + prepRAMBuffer[ RTC_RAM_LOW_ADDRESS_INDEX ] = address; txBuffer[ BUFFER_INDEX_0 ] = RTC_READ_FROM_RAM; - for ( i = 0; i < RAMBufferLength; i++ ) { txBuffer[ i + BUFFER_INDEX_1 ] = 0x0000; } } } - return status; }