ISSDK  1.8
IoT Sensing Software Development Kit
driver_KSDK_NVM.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 - 2016, Freescale Semiconductor, Inc.
3  * Copyright 2016-2017 NXP
4  * All rights reserved.
5  *
6  * SPDX-License-Identifier: BSD-3-Clause
7  */
8 
9 /*! \file driver_KSDK_NVM.c
10  \brief middleware driver for NVM on Kinetis devices
11 */
12 #include "sensor_fusion.h"
13 #include "driver_KSDK_NVM.h"
14 
15 #ifndef CPU_LPC54114J256BD64_cm4
16 #include "fsl_flash.h"
17 #else
18 #include "fsl_flashiap.h"
19 #endif
20 
21 #define ERROR 1
22 #define SUCCESS 0;
23 #ifndef CPU_LPC54114J256BD64_cm4
24 byte NVM_SetBlockFlash(uint8_t *Source, uint32_t Dest, uint16_t Count)
25 {
26  byte retVal=0;
27  status_t result;
28  uint32_t pflashSectorSize = ERROR;
29  flash_config_t flashDriver; // Flash driver Structure
30 
31  // Clean up Flash driver Structure
32  memset(&flashDriver, 0, sizeof(flash_config_t));
33  // Setup flash driver structure for device and initialize variables.
34  result = FLASH_Init(&flashDriver);
35  if (kStatus_FLASH_Success == result)
36  {
37  FLASH_GetProperty(&flashDriver, FLASH_SECTOR_SIZE_PROPERTY, &pflashSectorSize);
38  result = FLASH_Erase(&flashDriver, Dest, pflashSectorSize, FLASH_ERASE_KEY);
39 
40  if (kStatus_FLASH_Success == result) {
41  result = FLASH_Program(&flashDriver, Dest, Source, Count);
42  if (kStatus_FLASH_Success == result) retVal=SUCCESS;
43  }
44  }
45  return(retVal);
46 }
47 #else
48 byte checkIAPStatus(status_t result) {
49  byte retVal=0;
50  switch (result) {
51  case kStatus_FLASHIAP_Success:
52  retVal = SUCCESS;
53  break;
54  case kStatus_FLASHIAP_InvalidCommand :
55  retVal = ERROR;
56  break;
57  case kStatus_FLASHIAP_SrcAddrError :
58  retVal = ERROR;
59  break;
60  case kStatus_FLASHIAP_DstAddrError :
61  retVal = ERROR;
62  break;
63  case kStatus_FLASHIAP_SrcAddrNotMapped :
64  retVal = ERROR;
65  break;
66  case kStatus_FLASHIAP_DstAddrNotMapped :
67  retVal = ERROR;
68  break;
69  case kStatus_FLASHIAP_CountError :
70  retVal = ERROR;
71  break;
72  case kStatus_FLASHIAP_InvalidSector :
73  retVal = ERROR;
74  break;
75  case kStatus_FLASHIAP_NotPrepared :
76  retVal = ERROR;
77  break;
78  case kStatus_FLASHIAP_CompareError :
79  retVal = ERROR;
80  break;
81  case kStatus_FLASHIAP_Busy :
82  retVal = ERROR;
83  break;
84  case kStatus_FLASHIAP_ParamError :
85  retVal = ERROR;
86  break;
87  case kStatus_FLASHIAP_AddrError :
88  retVal = ERROR;
89  break;
90  case kStatus_FLASHIAP_AddrNotMapped :
91  retVal = ERROR;
92  break;
93  case kStatus_FLASHIAP_NoPower :
94  retVal = ERROR;
95  break;
96  case kStatus_FLASHIAP_NoClock :
97  retVal = ERROR;
98  break;
99  default:
100  break;
101  }
102  return retVal;
103 }
104 
105 byte NVM_SetBlockFlash(uint8_t *Source, uint32_t Dest, uint16_t Count)
106 {
107  byte retVal=ERROR;
108  status_t result;
109  result = FLASHIAP_PrepareSectorForWrite(NVM_SECTOR_NUMBER, NVM_SECTOR_NUMBER);
110  if (result == kStatus_FLASHIAP_Success) {
111  result = FLASHIAP_ErasePage(NVM_PAGE_NUMBER, NVM_PAGE_NUMBER, SystemCoreClock);
112  if (result == kStatus_FLASHIAP_Success) {
113  result = FLASHIAP_PrepareSectorForWrite(NVM_SECTOR_NUMBER, NVM_SECTOR_NUMBER);
114  if (result == kStatus_FLASHIAP_Success) {
115 
116  result = FLASHIAP_CopyRamToFlash(CALIBRATION_NVM_ADDR, (uint32_t *) Source, (uint32_t) Count, SystemCoreClock);
117  //if (result == kStatus_FLASHIAP_Success) retVal = SUCCESS;
118  retVal = checkIAPStatus(result);
119  }
120  }
121  }
122  return(retVal);
123 }
124 #endif
#define FLASH_ERASE_KEY
Definition: frdm_k64f.h:150
#define CALIBRATION_NVM_ADDR
start of final 4K (sector size) of 1M flash
Definition: frdm_k64f.h:147
#define SUCCESS
#define NVM_SECTOR_NUMBER
Sector number in flash where we will store parameters.
Definition: lpc54114.h:131
#define NVM_PAGE_NUMBER
Page number in flash where we will store parameters.
Definition: lpc54114.h:132
middleware driver for NVM on Kinetis devices
The sensor_fusion.h file implements the top level programming interface.
#define FLASH_SECTOR_SIZE_PROPERTY
Definition: frdm_k64f.h:149
#define ERROR
unsigned char byte
Definition: sensor_fusion.h:38
uint32_t SystemCoreClock
byte NVM_SetBlockFlash(uint8_t *Source, uint32_t Dest, uint16_t Count)