1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
|
/**********************************************************************************************************************
* FILE DESCRIPTION
* -------------------------------------------------------------------------------------------------------------------
* File: ti_fee.h
* Project: Tms570_TIFEEDriver
* Module: TIFEEDriver
* Generator: None
*
* Description: This file implements the TI FEE Api.
*---------------------------------------------------------------------------------------------------------------------
* Author: Vishwanath Reddy
*---------------------------------------------------------------------------------------------------------------------
* Revision History
*---------------------------------------------------------------------------------------------------------------------
* Version Date Author Change ID Description
*---------------------------------------------------------------------------------------------------------------------
* 00.01.00 31Aug2012 Vishwanath Reddy 0000000000000 Initial Version
* 00.01.01 29Oct2012 Vishwanath Reddy 0000000000000 Changes for implementing Error Recovery
* 00.01.02 30Nov2012 Vishwanath Reddy SDOCM00097786 Misra Fixes, Memory segmentation changes.
* 00.01.03 14Jan2013 Vishwanath Reddy SDOCM00098510 Changes as requested by Vector.
* 00.01.04 12Feb2012 Vishwanath Reddy SDOCM00099152 Integration issues fix.
* 00.01.05 04Mar2013 Vishwanath Reddy SDOCM00099152 Added Deleting a block feature, bug fixes.
* 00.01.06 11Mar2013 Vishwanath Reddy SDOCM00099152 Added feature : copying of unconfigured blocks.
* 00.01.07 15Mar2013 Vishwanath Reddy SDOCM00099152 Added feature : Number of 8 bytes writes, fixed
issue with copy blocks.
* 00.01.08 05Apr2013 Vishwanath Reddy SDOCM00099152 Added feature : CRC check for unconfigured blocks,
Main function modified to complete writes as fast
as possible, Added Non polling mode support.
* 00.01.09 19Apr2013 Vishwanath Reddy SDOCM00099152 Warning removal, Added feature comparision of data
during write.
* 00.01.10 11Jun2013 Vishwanath Reddy SDOCM00101845 Updated version information.
* 00.01.11 05Jul2013 Vishwanath Reddy SDOCM00101643 Updated version information.
* 01.12.00 13Dec2013 Vishwanath Reddy SDOCM00105412 Traceability tags added.
* MISRA C fixes. Version info corrected.
* 01.13.00 30Dec2013 Vishwanath Reddy 0000000000000 Undated version info for SDOCM00107976
* and SDOCM00105795.
* 01.13.01 19May2014 Vishwanath Reddy 0000000000000 Updated version info for SDOCM00107913
* and SDOCM00107622.
* 01.13.02 12Jun2014 Vishwanath Reddy 0000000000000 Updated version info for SDOCM00108238
* 01.14.00 26Mar2014 Vishwanath Reddy Update version info for SDOCM00107161.
* 01.15.00 06Jun2014 Vishwanath Reddy Support for Conqueror.
* 01.16.00 15Jul2014 Vishwanath Reddy SDOCM00112141 Remove MISRA warnings.
* 01.16.01 12Sep2014 Vishwanath Reddy SDOCM00112930 Prototype for TI_Fee_SuspendResumeErase added.
* TI_Fee_EraseCommandType enum added.
* extern added for TI_Fee_bEraseSuspended.
* 01.17.00 15Oct2014 Vishwanath Reddy SDOCM00113379 RAM Optimization changes.
* 01.17.01 30Oct2014 Vishwanath Reddy SDOCM00113536 Support for TMS570LS07xx,TMS570LS09xx,
* TMS570LS05xx, RM44Lx.
* 01.17.02 26Dec2014 Vishwanath Reddy SDOCM00114102 FLEE Errata Fix.
* SDOCM00114104 Change ALL 1's OK check condition.
* Updated version info. Added new macros.
* SDOCM00114423 Add new enum TI_Fee_DeviceType.
* Add new variable TI_Fee_MaxSectors and
* prototype TI_FeeInternal_PopulateStructures.
* 01.18.00 12Oct2015 Vishwanath Reddy SDOCM00119455 Update version history.
* Update ti_fee_util.c file for the
* bugfix "If morethan one data set is config-
* ured, then a valid block may get invalidated if
* multiple valid blocks are present in FEE memory.
* 01.18.01 17Nov2015 Vishwanath Reddy SDOCM00120161 Update version history.
* In TI_FeeInternal_FeeManager, do not change the
* state to IDLE,after completing the copy operation.
* 01.18.02 05Feb2016 Vishwanath Reddy SDOCM00121158 Update version history.
* Add a call of TI_FeeInternal_PollFlashStatus()
* before reading data from FEE bank in
* TI_FeeInternal_UpdateBlockOffsetArray(),
* TI_Fee_WriteAsync(),TI_Fee_WriteSync(),
* TI_Fee_ReadSync(), TI_Fee_Read()
* 01.18.03 30June2016 Vishwanath Reddy SDOCM00122388 Update patch version TI_FEE_SW_PATCH_VERSION.
* TI_FEE_FLASH_CRC_ENABLE is renamed to
* TI_FEE_FLASH_CHECKSUM_ENABLE.
* SDOCM00122429 In ti_fee_types.h, add error when endianess
* is not defined.
* 01.19.00 08Augu2016 Vishwanath Reddy SDOCM00122592 Update patch version TI_FEE_MINOR_VERSION.
* Code for using partially ersed sector is now
* removed.
* Bugfix for FEE reading from unimplemented memory
* space.
* 01.19.01 12Augu2016 Vishwanath Reddy SDOCM00122543 Update patch version TI_FEE_MINOR_VERSION.
* Synchronous write API modified to avoid copy of
* already copied block.
* 01.19.02 25Janu2017 Vishwanath Reddy SDOCM00122832 Update patch version TI_FEE_MINOR_VERSION.
* Format API modified to erase all configured VS.
* SDOCM00122833 In API TI_Fee_ErrorRecovery, added polling for
* flash status before calling TI_Fee_Init.
* 01.19.03 15May2017 Prathap Srinivasan SDOCM00122917 Added TI_Fee_bIsMainFunctionCalled Global Variable.
* 01.19.04 05Dec2017 Prathap Srinivasan HERCULES_SW-5082 Update version history.
*********************************************************************************************************************/
/*
* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the
* distribution.
*
* Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef TI_FEE_H
#define TI_FEE_H
/**********************************************************************************************************************
* INCLUDES
*********************************************************************************************************************/
#include "hal_stdtypes.h"
#include "fee_interface.h"
#include "ti_fee_types.h"
#include "ti_fee_cfg.h"
/**********************************************************************************************************************
* GLOBAL CONSTANT MACROS
*********************************************************************************************************************/
/* Fee Published Information */
#define TI_FEE_MAJOR_VERSION 3U
#define TI_FEE_MINOR_VERSION 0U
#define TI_FEE_PATCH_VERSION 2U
#define TI_FEE_SW_MAJOR_VERSION 1U
#define TI_FEE_SW_MINOR_VERSION 19U
#define TI_FEE_SW_PATCH_VERSION 4U
#define TI_FEE_VIRTUAL_SECTOR_VERSION 1U
/* Virtual sector states */
#define ActiveVSHi 0x0000FFFFU
#define ActiveVSLo 0x00000000U
#define CopyVSHi 0xFFFFFFFFU
#define CopyVSLo 0x00000000U
#define EmptyVSHi 0xFFFFFFFFU
#define EmptyVSLo 0x0000FFFFU
#define InvalidVSHi 0xFFFFFFFFU
#define InvalidVSLo 0xFFFFFFFFU
#define ReadyforEraseVSHi 0x00000000U
#define ReadyforEraseVSLo 0x00000000U
/* Data Block states*/
#define EmptyBlockHi 0xFFFFFFFFU
#define EmptyBlockLo 0xFFFFFFFFU
#define StartProgramBlockHi 0xFFFF0000U
#define StartProgramBlockLo 0xFFFFFFFFU
#define ValidBlockHi 0x00000000U
#define ValidBlockLo 0xFFFFFFFFU
#define InvalidBlockHi 0x00000000U
#define InvalidBlockLo 0xFFFF0000U
#define CorruptBlockHi 0x00000000U
#define CorruptBlockLo 0x00000000U
#define FEE_BANK 0U
/* Enable/Disable FEE sectors */
#define FEE_DISABLE_SECTORS_31_00 0x00000000U
#define FEE_DISABLE_SECTORS_63_32 0x00000000U
#define FEE_ENABLE_SECTORS_31_00 0xFFFFFFFFU
#define FEE_ENABLE_SECTORS_63_32 0xFFFFFFFFU
/**********************************************************************************************************************
* GLOBAL DATA TYPES AND STRUCTURES
*********************************************************************************************************************/
/* Structures used */
/* Enum to describe the Fee Status types */
typedef enum
{
TI_FEE_OK = 0U, /* Function returned no error */
TI_FEE_ERROR = 1U /* Function returned an error */
} TI_Fee_StatusType;
/* Enum to describe the Virtual Sector State */
typedef enum
{
VsState_Invalid=1U,
VsState_Empty=2U,
VsState_Copy=3U,
VsState_Active=4U,
VsState_ReadyForErase=5U
}VirtualSectorStatesType;
/* Enum to describe the Block State */
typedef enum
{
Block_StartProg=1U,
Block_Valid=2U,
Block_Invalid=3U
}BlockStatesType;
/* Enum for error trpes */
typedef enum
{
Error_Nil=0U,
Error_TwoActiveVS=1U,
Error_TwoCopyVS=2U,
Error_SetupStateMachine=3U,
Error_CopyButNoActiveVS=4U,
Error_NoActiveVS=5U,
Error_BlockInvalid=6U,
Error_NullDataPtr=7U,
Error_NoFreeVS=8U,
Error_InvalidVirtualSectorParameter=9U,
Error_ExceedSectorOnBank=10U,
Error_EraseVS=11U,
Error_BlockOffsetGtBlockSize=12U,
Error_LengthParam=13U,
Error_FeeUninit=14U,
Error_Suspend=15U,
Error_InvalidBlockIndex=16U,
Error_NoErase=17U,
Error_CurrentAddress=18U,
Error_Exceed_No_Of_DataSets=19U
}TI_Fee_ErrorCodeType;
typedef enum
{
Suspend_Erase=0U,
Resume_Erase
}TI_Fee_EraseCommandType;
/* Enum to describe the Device types */
typedef enum
{
CHAMPION = 0U, /* Function returned no error */
ARCHER = 1U /* Function returned an error */
} TI_Fee_DeviceType;
typedef uint32 TI_Fee_AddressType; /* Used for defining variables to indicate number of
bytes for address offset */
typedef uint32 TI_Fee_LengthType; /* Used for defining variables to indicate number of
bytes per read/write/erase */
typedef TI_Fee_ErrorCodeType Fee_ErrorCodeType;
/* Structure used when defining virtual sectors */
/* The following error checks need to be performed: */
/* Virtual Sector definitions are not allowed to overlap */
/* Virtual Sector definition is at least twice the size in bytes of the total size of all defined blocks */
/* We will need to define a formula to indicate if the number of write cycles indicated in the block definitions */
/* is possible in the defined Virtual Sector. */
/* Ending sector cannot be less than Starting sector */
typedef struct
{
uint16 FeeVirtualSectorNumber; /* Virtual Sector's Number - 0 and 0xFFFF values are not allowed*/
/* Minimum 1, Maximum 4 */
uint16 FeeFlashBank; /* Flash Bank to use for virtual sector. */
/* As we do not allow Flash EEPROM Emulation in Bank 0,
0 is not a valid option */
/* Defaultvalue 1, Minimum 1, Maxiumum 7 */
Fapi_FlashSectorType FeeStartSector; /* Defines the Starting Sector inthe Bank for this VirtualSector*/
Fapi_FlashSectorType FeeEndSector; /* Defines the Ending Sector inthe Bank for this Virtual Sector */
/* Start and End sectors can be the same, which indicates only
one sector */
/* is the entire virtual sector. */
/* Values are based on the FLASH_SECT enum */
/* Defaultvalue and Min is the same sector defined as the starting
sector */
/* Max values are based onthe device definition file being used.*/
} Fee_VirtualSectorConfigType;
/* Structure used when defining blocks */
typedef struct
{
uint16 FeeBlockNumber; /* Block's Number - 0 and 0xFFFF values are not allowed */
/* Start 1, Next: Number of Blocks + 1, Min 1, Max 0xFFFE */
uint16 FeeBlockSize; /* Block's Size - Actual number of bits used is reduced */
/* by number of bits used for dataset. */
/* Default 8, Min 1, Max (2^(16-# of Dataset Bits))-1 */
boolean FeeImmediateData; /* Indicates if the block is used for immediate data */
/* Default: False */
uint32 FeeNumberOfWriteCycles; /* Number of write cycles this block requires */
/* Default: 0, but this will not be a valid number.
Force customer to select a value */
/* Min 1, Max (2^32)-1 */
uint8 FeeDeviceIndex; /* Device Index - This will always be 0 */
/* Fixed value: 0 */
uint8 FeeNumberOfDataSets; /* Number of DataSets for the Block */
/* Default value: 1 */
uint8 FeeEEPNumber;
} Fee_BlockConfigType;
/* Structure used for Global variables */
typedef struct
{
TI_Fee_AddressType Fee_oFlashNextAddress; /* The next Flash Address to write to */
TI_Fee_AddressType Fee_oCopyCurrentAddress; /* Indicates the Address within the Active VS
which will be copied to Copy VS */
TI_Fee_AddressType Fee_oCopyNextAddress; /* Indicates the Address within the Copy VS to
which the data from Active VS will be copied to */
TI_Fee_AddressType Fee_u32nextwriteaddress; /* Indicates the next free Address within the curent
VS to which the data will be written */
TI_Fee_AddressType Fee_oVirtualSectorStartAddress; /* Start Address of the current Virtual Sector */
TI_Fee_AddressType Fee_oVirtualSectorEndAddress; /* End Address of the current Virtual Sector */
TI_Fee_AddressType Fee_oCopyVirtualSectorAddress; /* Start Address of the Copy Virtual Address */
TI_Fee_AddressType Fee_oCurrentStartAddress; /* Start Address of the Previous Block */
TI_Fee_AddressType Fee_oCurrentBlockHeader; /* Start Address of the Block which is being currently
written*/
TI_Fee_AddressType Fee_oWriteAddress; /* Address within the VS where data is to be written */
TI_Fee_AddressType Fee_oCopyWriteAddress; /* Address within the VS where data is to be copied */
TI_Fee_AddressType Fee_oActiveVirtualSectorAddress; /* Start Address of the Active VS */
TI_Fee_AddressType Fee_oBlankFailAddress; /* Address of first non-blank location */
TI_Fee_AddressType Fee_oActiveVirtualSectorStartAddress;/* Start Address of the active VS */
TI_Fee_AddressType Fee_oActiveVirtualSectorEndAddress; /* End Address of the active VS */
TI_Fee_AddressType Fee_oCopyVirtualSectorStartAddress; /* Start Address of the Copy VS */
TI_Fee_AddressType Fee_oCopyVirtualSectorEndAddress; /* End Address of the Copy VS */
TI_Fee_AddressType Fee_u32nextActiveVSwriteaddress; /* Next write address in Active VS */
TI_Fee_AddressType Fee_u32nextCopyVSwriteaddress; /* Next write address in Copy VS */
uint16 Fee_u16CopyBlockSize; /* Indicates the size of current block in bytes which is
been copied from Active to Copy VS */
uint8 Fee_u8VirtualSectorStart; /* Index of the Start Sector of the VS */
uint8 Fee_u8VirtualSectorEnd; /* Index of the End Sector of the VS */
uint32 Fee_au32VirtualSectorStateValue[TI_FEE_VIRTUAL_SECTOR_OVERHEAD >> 2U]; /* Array to store the Virtual
Sector Header and
Information record */
uint8 Fee_au8VirtualSectorState[TI_FEE_NUMBER_OF_VIRTUAL_SECTORS]; /* Stores the state of each
Virtual sector */
uint32 Fee_au32VirtualSectorEraseCount[TI_FEE_NUMBER_OF_VIRTUAL_SECTORS]; /* Array to store the erase
count of each Virtual
Sector*/
uint16 Fee_au16BlockOffset[TI_FEE_TOTAL_BLOCKS_DATASETS]; /* Array to store within the VS */
uint32 Fee_au32BlockHeader[TI_FEE_BLOCK_OVERHEAD >> 2U]; /* Array to store the Block Header value */
uint8 Fee_au8BlockCopyStatus[TI_FEE_TOTAL_BLOCKS_DATASETS]; /* Array to storeblock copy status */
uint8 Fee_u8InternalVirtualSectorStart; /* Indicates internal VS start index */
uint8 Fee_u8InternalVirtualSectorEnd; /* Indicates internal VS end index */
TI_FeeModuleStatusType Fee_ModuleState; /* Indicates the state of the FEE module */
TI_FeeJobResultType Fee_u16JobResult; /* Stores the Job Result of the current command */
TI_Fee_StatusType Fee_oStatus; /* Indicates the status of FEE */
TI_Fee_ErrorCodeType Fee_Error; /* Indicates the Error code */
uint16 Fee_u16CopyBlockNumber; /* Block number which is currently being copied */
uint16 Fee_u16BlockIndex; /* Index of the Current Block */
uint16 Fee_u16BlockCopyIndex; /* Index of the Block being copied from Copy to Active VS */
uint16 Fee_u16DataSetIndex; /* Index of the Current DataSet */
uint16 Fee_u16ArrayIndex; /* Index of the Current DataSet */
uint16 Fee_u16BlockSize; /* Size of the current block in bytes */
uint16 Fee_u16BlockSizeinBlockHeader; /* Size of the current block. Used to write into Block Header */
uint16 Fee_u16BlockNumberinBlockHeader; /* Number of the current block. Used to write into Block Header */
uint8 Fee_u8ActiveVirtualSector; /* Indicates the FeeVirtualSectorNumber for the Active VS */
uint8 Fee_u8CopyVirtualSector; /* Indicates the FeeVirtualSectorNumber for the Copy VS */
uint32 Fee_u32InternalEraseQueue; /* Indicates which VS can be erased when the FEE is in
BusyInternal State*/
uint8 Fee_u8WriteCopyVSHeader; /* Indicates the number of bytes of the Copy VS Header being
written */
uint8 Fee_u8WriteCount; /* Indicates the number of bytes of the Block Header being
written */
uint8 * Fee_pu8ReadDataBuffer; /* Pointer to read data */
uint8 * Fee_pu8ReadAddress; /* Pointer to read address */
uint8 * Fee_pu8Data; /* Pointer to the next data to be written to the VS */
uint8 * Fee_pu8CopyData; /* Pointer to the next data to be copied to the VS */
uint8 * Fee_pu8DataStart; /* Pointer to the first data to be written to the VS */
boolean Fee_bInvalidWriteBit; /* Indicates whether the block is written/invalidated/erased
for the first time */
boolean Fee_bWriteData; /* Indicates that there is data which is pending to be written
to the Block */
boolean Fee_bWriteBlockHeader; /* Indicates whether the Block Header has been written or not */
boolean bWriteFirstTime; /* Indicates if the block is being written first time */
boolean Fee_bFindNextVirtualSector; /* Indicates if there is aneed to find next free VS */
boolean Fee_bWriteVSHeader; /* Indicates if block header needs to be written */
boolean Fee_bWriteStartProgram; /* Indicates if start program block header needs to be written */
boolean Fee_bWritePartialBlockHeader; /* Indicates if start program block header needs to be written */
#if (TI_FEE_NUMBER_OF_UNCONFIGUREDBLOCKSTOCOPY != 0U)
uint16 Fee_au16UnConfiguredBlockAddress[TI_FEE_NUMBER_OF_UNCONFIGUREDBLOCKSTOCOPY]; /* Indicates
number of unconfigured blocks to copy */
uint8 Fee_au8UnConfiguredBlockCopyStatus[TI_FEE_NUMBER_OF_UNCONFIGUREDBLOCKSTOCOPY]; /* Array to store block
copy status */
#endif
}TI_Fee_GlobalVarsType;
/**********************************************************************************************************************
* EXTERN Declarations
*********************************************************************************************************************/
/* Fee Global Variables */
extern const Fee_BlockConfigType Fee_BlockConfiguration[TI_FEE_NUMBER_OF_BLOCKS];
#if (TI_FEE_GENERATE_DEVICEANDVIRTUALSECTORSTRUC == STD_OFF)
extern const Fee_VirtualSectorConfigType Fee_VirtualSectorConfiguration[TI_FEE_NUMBER_OF_VIRTUAL_SECTORS];
extern const Device_FlashType Device_FlashDevice;
#endif
#if (TI_FEE_GENERATE_DEVICEANDVIRTUALSECTORSTRUC == STD_ON)
extern Fee_VirtualSectorConfigType Fee_VirtualSectorConfiguration[TI_FEE_NUMBER_OF_VIRTUAL_SECTORS];
extern Device_FlashType Device_FlashDevice;
extern uint8 TI_Fee_MaxSectors;
#endif
extern TI_Fee_GlobalVarsType TI_Fee_GlobalVariables[TI_FEE_NUMBER_OF_EEPS];
extern TI_Fee_StatusWordType_UN TI_Fee_oStatusWord[TI_FEE_NUMBER_OF_EEPS];
#if(TI_FEE_FLASH_CHECKSUM_ENABLE == STD_ON)
extern uint32 TI_Fee_u32FletcherChecksum;
#endif
extern uint32 TI_Fee_u32BlockEraseCount;
extern uint8 TI_Fee_u8DataSets;
extern uint8 TI_Fee_u8DeviceIndex;
extern uint32 TI_Fee_u32ActCpyVS;
extern uint8 TI_Fee_u8ErrEraseVS;
#if (TI_FEE_NUMBER_OF_UNCONFIGUREDBLOCKSTOCOPY != 0U)
extern uint16 TI_Fee_u16NumberOfUnconfiguredBlocks[TI_FEE_NUMBER_OF_EEPS];
#endif
#if(TI_FEE_FLASH_ERROR_CORRECTION_HANDLING == TI_Fee_Fix)
extern boolean Fee_bDoubleBitError;
extern boolean Fee_bSingleBitError;
#endif
#if(TI_FEE_NUMBER_OF_EEPS==2U)
extern TI_Fee_StatusWordType_UN TI_Fee_oStatusWord_Global;
#endif
extern boolean TI_Fee_FapiInitCalled;
extern boolean TI_Fee_bEraseSuspended;
extern boolean TI_Fee_bIsMainFunctionCalled;
/**********************************************************************************************************************
* GLOBAL FUNCTION PROTOTYPES
*********************************************************************************************************************/
/* Interface Functions */
extern void TI_Fee_Cancel(uint8 u8EEPIndex);
extern Std_ReturnType TI_Fee_EraseImmediateBlock(uint16 BlockNumber);
extern TI_FeeModuleStatusType TI_Fee_GetStatus(uint8 u8EEPIndex);
extern void TI_Fee_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr);
extern void TI_Fee_Init(void);
extern Std_ReturnType TI_Fee_InvalidateBlock(uint16 BlockNumber);
extern Std_ReturnType TI_Fee_Read(uint16 BlockNumber,
uint16 BlockOffset,
uint8* DataBufferPtr,
uint16 Length);
extern Std_ReturnType TI_Fee_WriteAsync(uint16 BlockNumber, uint8* DataBufferPtr);
extern void TI_Fee_MainFunction(void);
extern TI_Fee_ErrorCodeType TI_FeeErrorCode(uint8 u8EEPIndex);
extern void TI_Fee_ErrorRecovery(TI_Fee_ErrorCodeType ErrorCode, uint8 u8VirtualSector);
extern TI_FeeJobResultType TI_Fee_GetJobResult(uint8 u8EEPIndex);
extern void TI_Fee_SuspendResumeErase(TI_Fee_EraseCommandType Command);
#if(TI_FEE_FLASH_ERROR_CORRECTION_HANDLING == TI_Fee_Fix)
extern void TI_Fee_ErrorHookSingleBitError(void);
extern void TI_Fee_ErrorHookDoubleBitError(void);
#endif
#if(TI_FEE_DRIVER == 1U)
extern Std_ReturnType TI_Fee_WriteSync(uint16 BlockNumber, uint8* DataBufferPtr);
extern Std_ReturnType TI_Fee_Shutdown(void);
extern boolean TI_Fee_Format(uint32 u32FormatKey);
extern Std_ReturnType TI_Fee_ReadSync(uint16 BlockNumber,uint16 BlockOffset,uint8* DataBufferPtr,uint16 Length);
#endif
/* TI Fee Internal Functions */
TI_Fee_AddressType TI_FeeInternal_GetNextFlashAddress(uint8 u8EEPIndex);
TI_Fee_AddressType TI_FeeInternal_AlignAddressForECC(TI_Fee_AddressType oAddress);
TI_Fee_AddressType TI_FeeInternal_GetCurrentBlockAddress(uint16 BlockNumber,uint16 DataSetNumber, uint8 u8EEPIndex);
/*SAFETYMCUSW 61 X MR:1.4,5.1 <APPROVED> "Reason - TI_FeeInternal_GetVirtualSectorParameter name is required here."*/
uint32 TI_FeeInternal_GetVirtualSectorParameter(Fapi_FlashSectorType oSector, uint16 u16Bank, boolean VirtualSectorInfo,
uint8 u8EEPIndex);
uint32 TI_FeeInternal_PollFlashStatus(void);
uint16 TI_FeeInternal_GetBlockSize(uint16 BlockIndex);
uint16 TI_FeeInternal_GetBlockIndex(uint16 BlockNumber);
uint16 TI_FeeInternal_GetDataSetIndex(uint16 BlockNumber);
uint16 TI_FeeInternal_GetBlockNumber(uint16 BlockNumber);
uint8 TI_FeeInternal_FindNextVirtualSector(uint8 u8EEPIndex);
uint8 TI_FeeInternal_WriteDataF021(boolean bCopy,uint16 u16WriteSize, uint8 u8EEPIndex);
boolean TI_FeeInternal_BlankCheck(uint32 u32StartAddress, uint32 u32EndAddress, uint16 u16Bank, uint8 u8EEPIndex);
Std_ReturnType TI_FeeInternal_CheckReadParameters(uint32 u32BlockSize,uint16 BlockOffset, const uint8* DataBufferPtr,
uint16 Length, uint8 u8EEPIndex);
Std_ReturnType TI_FeeInternal_CheckModuleState(uint8 u8EEPIndex);
Std_ReturnType TI_FeeInternal_InvalidateErase(uint16 BlockNumber);
TI_Fee_StatusType TI_FeeInternal_FeeManager(uint8 u8EEPIndex);
void TI_FeeInternal_WriteVirtualSectorHeader(uint8 FeeVirtualSectorNumber, VirtualSectorStatesType VsState,
uint8 u8EEPIndex) ;
/*SAFETYMCUSW 61 X MR:1.4,5.1 <APPROVED> "Reason - TI_FeeInternal_GetVirtualSectorIndex name is required here."*/
void TI_FeeInternal_GetVirtualSectorIndex(Fapi_FlashSectorType oSectorStart, Fapi_FlashSectorType oSectorEnd,
uint16 u16Bank, boolean bOperation, uint8 u8EEPIndex);
void TI_FeeInternal_WritePreviousBlockHeader(boolean bWrite, uint8 u8EEPIndex);
void TI_FeeInternal_WriteBlockHeader(boolean bWrite, uint8 u8EEPIndex,uint16 Fee_BlockSize_u16,uint16 u16BlockNumber);
void TI_FeeInternal_SetClearCopyBlockState(uint8 u8EEPIndex, boolean bSetClear);
void TI_FeeInternal_SanityCheck(uint16 BlockSize, uint8 u8EEPIndex);
void TI_FeeInternal_StartProgramBlock(uint8 u8EEPIndex);
void TI_FeeInternal_UpdateBlockOffsetArray(uint8 u8EEPIndex, boolean bActCpyVS,uint8 u8VirtualSector);
void TI_FeeInternal_WriteInitialize(TI_Fee_AddressType oFlashNextAddress, uint8* DataBufferPtr, uint8 u8EEPIndex);
void TI_FeeInternal_CheckForError(uint8 u8EEPIndex);
void TI_FeeInternal_EnableRequiredFlashSector(uint32 u32VirtualSectorStartAddress);
uint16 TI_FeeInternal_GetArrayIndex(uint16 BlockNumber, uint16 DataSetNumber, uint8 u8EEPIndex, boolean bCallContext);
#if(TI_FEE_FLASH_CHECKSUM_ENABLE == STD_ON)
uint32 TI_FeeInternal_Fletcher16( uint8 const *pu8data, uint16 u16Length);
#endif
#if (TI_FEE_GENERATE_DEVICEANDVIRTUALSECTORSTRUC == STD_ON)
void TI_FeeInternal_PopulateStructures(TI_Fee_DeviceType DeviceType);
#endif
#endif /* TI_FEE_H */
/**********************************************************************************************************************
* END OF FILE: ti_fee.h
*********************************************************************************************************************/
|