tao_z
2022-05-25 1044ba0d2286698d0da28112bffc0f114bef2134
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
#ifndef NVM_H
#define NVM_H
#include "typedef.h"
/**
 * @brief Virtual address 0 is invalid .we can not use this address
 *
 */
 
typedef enum
{
    MEM_PARTITION_RAM = 0x00,
    MEM_PARTITION_CODEFLASH = 0x01,
    MEM_MAX_PARTITION_NUM
} MEM_PARTITION_LIST_Te;
 
typedef void (*NVM_OPERATION_COMPLETE_CALLBACK)(uint8_t nvm_operation_type, uint16_t virtureaddr, int8_t success);
/*
 * These defines are the "nvm_operation_type" in the operation complete callback typedef below.
 */
#define NVM_OP_TYPE_NONE ((uint8_t)0u)       /**< no operation */
#define NVM_OP_TYPE_WRITE ((uint8_t)1u)      /**< partition write operation */
#define NVM_OP_TYPE_READ ((uint8_t)2u)       /**< partition read operation */
#define NVM_OP_TYPE_ERASE ((uint8_t)3u)      /**< partition erase operation */
#define NVM_OP_TYPE_FORMAT ((uint8_t)4u)     /**< partition format operation */
#define NVM_OP_TYPE_SCAN ((uint8_t)5u)       /**< scan (synch with shadow) operation for all partitions */
#define NVM_OP_TYPE_REFRESH ((uint8_t)6u)    /**< scan (synch with shadow) for one partition. */
#define NVM_OP_TYPE_SHUTDOWN ((uint8_t)7u)   /**< prepare to shutdown, don't allow more operations */
#define NVM_OP_TYPE_HALT ((uint8_t)8u)       /**< nvm halt operation, stop doing stuff */
#define NVM_OP_TYPE_RESTORE ((uint8_t)9u)    /**< start up again after a halt */
#define NVM_OP_TYPE_RAW_WRITE ((uint8_t)10u) /**< raw write to absolute addr, not a partition write */
#define NVM_OP_TYPE_MAX ((uint8_t)11u)       /**< invalid, anything this value or larger */
 
#define FBL_MEM_SEGMENT_SIZE (0x100)
#define MEM_MAX_TEMP_BUFF_NUM (2u)
 
typedef struct
{
    uint8_t shutdown_requested : 1;
    uint8_t halt_requested : 1;
    uint8_t force_shutdown : 1;
    uint8_t halted : 1;
    uint8_t busy : 1;
    uint8_t ee_error : 1;
    uint8_t erased : 1;
    uint8_t flash_driver_loaded : 1;
} NVM_FLAGS_Ts;
 
typedef struct
{
    uint8_t *p_buffer; /**< todo: this can be deleted, only reference for MEM_Read() which isn't implemented. */
    uint8_t partition_id;
    uint8_t current_sequenc; /**< */
    uint8_t prev_seqence;
    uint8_t mem_operation_id;                         /**< the operation type; read, write, erase, format, scan, refresh */
    uint32_t size_in_bytes;                           /**< size in bytes of the op, maybe for absolute erase or read or write */
    uint32_t start_addr;                              /**< starting addr of absolute read, write or erase */
    NVM_OPERATION_COMPLETE_CALLBACK pfn_complete_cbk; /**< pointer to callback function which executes after the operation completes (success or fail) */
} MEM_OPERATION_Ts;
 
#define RAM_FALSH_DRIVE_LENGHT (96u)
extern uint8_t flashCode[RAM_FALSH_DRIVE_LENGHT + 4];
extern NVM_FLAGS_Ts Nvm_Flags;
extern uint8_t Mem_PartionTempBuff[MEM_MAX_TEMP_BUFF_NUM][FBL_MEM_SEGMENT_SIZE];
 
extern int8_t NEM_WriteData(MEM_OPERATION_Ts *op);
extern int8_t NVM_EraseData(uint32_t startaddr, uint32_t length);
extern int8_t NVM_ReInitFlashDriveRam(void);
extern void NVM_Init(void);
extern bool NVM_Is_Busy(void);
extern uint8_t MEM_PartitionCRCOK(uint8_t partionid);
extern uint8_t ApplFblIsValidApp();
#endif