Subversion Repositories DashDisplay

Rev

Rev 21 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 21 Rev 22
Line 47... Line 47...
47
static FLASH_Status EE_Format(void);
47
static FLASH_Status EE_Format(void);
48
static uint16_t EE_FindValidPage(uint8_t Operation);
48
static uint16_t EE_FindValidPage(uint8_t Operation);
49
static uint16_t EE_VerifyPageFullWriteVariable(uint16_t VirtAddress, uint16_t Data);
49
static uint16_t EE_VerifyPageFullWriteVariable(uint16_t VirtAddress, uint16_t Data);
50
static uint16_t EE_PageTransfer(uint16_t VirtAddress, uint16_t Data);
50
static uint16_t EE_PageTransfer(uint16_t VirtAddress, uint16_t Data);
51
 
51
 
-
 
52
 
-
 
53
static uint16_t EE_ErasePages(uint32_t base,int count)
-
 
54
{
-
 
55
    uint16_t FlashStatus;
-
 
56
        EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
-
 
57
          EraseInitStruct.PageAddress = base;
-
 
58
          EraseInitStruct.NbPages     = count;
-
 
59
          if (HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK)
-
 
60
          {
-
 
61
                  /* If erase operation was failed, a Flash error code is returned */
-
 
62
        FlashStatus = HAL_FLASH_GetError();
-
 
63
        return FlashStatus;
-
 
64
    }
-
 
65
        return HAL_FLASH_ERROR_NONE;
-
 
66
 
-
 
67
}
52
/**
68
/**
53
  * @brief  Restore the pages to a known good state in case of page's status
69
  * @brief  Restore the pages to a known good state in case of page's status
54
  *   corruption after a power loss.
70
  *   corruption after a power loss.
55
  * @param  None.
71
  * @param  None.
56
  * @retval - Flash error code: on write Flash error
72
  * @retval - Flash error code: on write Flash error
Line 74... Line 90...
74
  {
90
  {
75
    case ERASED:
91
    case ERASED:
76
      if (PageStatus1 == VALID_PAGE) /* Page0 erased, Page1 valid */
92
      if (PageStatus1 == VALID_PAGE) /* Page0 erased, Page1 valid */
77
      {
93
      {
78
        /* Erase Page0 */
94
        /* Erase Page0 */
79
          EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
-
 
80
          EraseInitStruct.PageAddress = PAGE0_BASE_ADDRESS;
95
          FlashStatus = EE_ErasePages(PAGE0_BASE_ADDRESS,1);
81
          EraseInitStruct.NbPages     = 1;
96
          if(FlashStatus!=HAL_FLASH_ERROR_NONE)
82
          if (HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK)
-
 
83
          {
97
                  {
84
                  /* If erase operation was failed, a Flash error code is returned */
-
 
85
              FlashStatus = HAL_FLASH_GetError();
-
 
86
              return FlashStatus;
98
                     return FlashStatus;
87
          }
99
                  }
88
      }
100
      }
89
      else if (PageStatus1 == RECEIVE_DATA) /* Page0 erased, Page1 receive */
101
      else if (PageStatus1 == RECEIVE_DATA) /* Page0 erased, Page1 receive */
90
      {
102
      {
91
        /* Erase Page0 */
103
        /* Erase Page0 */
92
          EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
-
 
93
          EraseInitStruct.PageAddress = PAGE0_BASE_ADDRESS;
104
          FlashStatus = EE_ErasePages(PAGE0_BASE_ADDRESS,1);
94
          EraseInitStruct.NbPages     = 1;
105
          if(FlashStatus!=HAL_FLASH_ERROR_NONE)
95
          if (HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK)
-
 
96
          {
106
                  {
97
                  /* If erase operation was failed, a Flash error code is returned */
-
 
98
                 FlashStatus = HAL_FLASH_GetError();
-
 
99
                 return FlashStatus;
107
                     return FlashStatus;
100
          }
108
                  }
101
          /* Mark Page1 as valid */
109
          /* Mark Page1 as valid */
102
 
110
 
103
         HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,PAGE1_BASE_ADDRESS, VALID_PAGE);
111
         HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,PAGE1_BASE_ADDRESS, VALID_PAGE);
104
        /* If program operation was failed, a Flash error code is returned */
112
        /* If program operation was failed, a Flash error code is returned */
105
         FlashStatus = HAL_FLASH_GetError();
113
         FlashStatus = HAL_FLASH_GetError();
Line 154... Line 162...
154
        if (FlashStatus != HAL_FLASH_ERROR_NONE)
162
        if (FlashStatus != HAL_FLASH_ERROR_NONE)
155
        {
163
        {
156
          return FlashStatus;
164
          return FlashStatus;
157
        }
165
        }
158
        /* Erase Page1 */
166
        /* Erase Page1 */
159
        FLASH_PageErase(PAGE1_BASE_ADDRESS);
167
          FlashStatus = EE_ErasePages(PAGE1_BASE_ADDRESS,1);
160
        /* If erase operation was failed, a Flash error code is returned */
-
 
161
        FlashStatus = HAL_FLASH_GetError();
-
 
162
        if (FlashStatus != HAL_FLASH_ERROR_NONE)
168
          if(FlashStatus!=HAL_FLASH_ERROR_NONE)
163
            {
169
                  {
164
          return FlashStatus;
170
                     return FlashStatus;
165
        }
171
                  }
-
 
172
 
166
      }
173
      }
167
      else if (PageStatus1 == ERASED) /* Page0 receive, Page1 erased */
174
      else if (PageStatus1 == ERASED) /* Page0 receive, Page1 erased */
168
      {
175
      {
169
        /* Erase Page1 */
176
        /* Erase Page1 */
170
        FLASH_PageErase(PAGE1_BASE_ADDRESS);
177
          FlashStatus = EE_ErasePages(PAGE1_BASE_ADDRESS,1);
171
        /* If erase operation was failed, a Flash error code is returned */
-
 
172
        FlashStatus = HAL_FLASH_GetError();
-
 
173
        if (FlashStatus != HAL_FLASH_ERROR_NONE)
178
          if(FlashStatus!=HAL_FLASH_ERROR_NONE)
174
        {
179
                  {
175
          return FlashStatus;
180
                     return FlashStatus;
176
        }
181
                  }
177
        /* Mark Page0 as valid */
182
/* Mark Page0 as valid */
178
        HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,PAGE0_BASE_ADDRESS, VALID_PAGE);
183
        HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,PAGE0_BASE_ADDRESS, VALID_PAGE);
179
 
184
 
180
        /* If program operation was failed, a Flash error code is returned */
185
        /* If program operation was failed, a Flash error code is returned */
181
        FlashStatus = HAL_FLASH_GetError();
186
        FlashStatus = HAL_FLASH_GetError();
182
        if (FlashStatus != HAL_FLASH_ERROR_NONE)
187
        if (FlashStatus != HAL_FLASH_ERROR_NONE)
Line 208... Line 213...
208
        }
213
        }
209
      }
214
      }
210
      else if (PageStatus1 == ERASED) /* Page0 valid, Page1 erased */
215
      else if (PageStatus1 == ERASED) /* Page0 valid, Page1 erased */
211
      {
216
      {
212
        /* Erase Page1 */
217
        /* Erase Page1 */
213
        FLASH_PageErase(PAGE1_BASE_ADDRESS);
218
          FlashStatus = EE_ErasePages(PAGE1_BASE_ADDRESS,1);
214
        FlashStatus = HAL_FLASH_GetError();
-
 
215
        /* If erase operation was failed, a Flash error code is returned */
-
 
216
        if (FlashStatus != HAL_FLASH_ERROR_NONE)
219
          if(FlashStatus!=HAL_FLASH_ERROR_NONE)
217
        {
220
                  {
218
          return FlashStatus;
221
                     return FlashStatus;
219
        }
222
                  }
-
 
223
 
220
      }
224
      }
221
      else /* Page0 valid, Page1 receive */
225
      else /* Page0 valid, Page1 receive */
222
      {
226
      {
223
        /* Transfer data from Page0 to Page1 */
227
        /* Transfer data from Page0 to Page1 */
224
        for (VarIdx = 0; VarIdx < NumbOfVar; VarIdx++)
228
        for (VarIdx = 0; VarIdx < NumbOfVar; VarIdx++)
Line 252... Line 256...
252
        if (FlashStatus != HAL_FLASH_ERROR_NONE)
256
        if (FlashStatus != HAL_FLASH_ERROR_NONE)
253
        {
257
        {
254
          return FlashStatus;
258
          return FlashStatus;
255
        }
259
        }
256
        /* Erase Page0 */
260
        /* Erase Page0 */
257
        FLASH_PageErase(PAGE0_BASE_ADDRESS);
261
          FlashStatus = EE_ErasePages(PAGE0_BASE_ADDRESS,1);
258
        /* If erase operation was failed, a Flash error code is returned */
-
 
259
        FlashStatus = HAL_FLASH_GetError();
-
 
260
        if (FlashStatus != HAL_FLASH_ERROR_NONE)
262
          if(FlashStatus!=HAL_FLASH_ERROR_NONE)
261
        {
263
                  {
262
          return FlashStatus;
264
                     return FlashStatus;
263
        }
265
                  }
264
      }
266
      }
265
      break;
267
      break;
266
 
268
 
267
    default:  /* Any other state -> format eeprom */
269
    default:  /* Any other state -> format eeprom */
268
      /* Erase both Page0 and Page1 and set Page0 as valid page */
270
      /* Erase both Page0 and Page1 and set Page0 as valid page */
Line 375... Line 377...
375
static FLASH_Status EE_Format(void)
377
static FLASH_Status EE_Format(void)
376
{
378
{
377
  FLASH_Status FlashStatus = HAL_FLASH_ERROR_NONE;
379
  FLASH_Status FlashStatus = HAL_FLASH_ERROR_NONE;
378
 
380
 
379
  /* Erase Page0 and Page1  */
381
  /* Erase Page0 and Page1  */
380
  /* Fill EraseInit structure*/
-
 
381
   EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
-
 
382
   EraseInitStruct.PageAddress = PAGE0_BASE_ADDRESS;
382
  FlashStatus = EE_ErasePages(PAGE0_BASE_ADDRESS,1);
383
   EraseInitStruct.NbPages     = 2;
383
  if(FlashStatus!=HAL_FLASH_ERROR_NONE)
384
 
-
 
385
   if(HAL_FLASHEx_Erase(&EraseInitStruct, &PAGEError) != HAL_OK)
-
 
386
   /* If erase operation was failed, a Flash error code is returned */
-
 
387
  {
384
          {
388
          FlashStatus = HAL_FLASH_GetError();
-
 
389
             return FlashStatus;
385
             return FlashStatus;
390
  }
386
          }
391
 
-
 
392
 
387
 
393
  /* Set Page0 as valid page: Write VALID_PAGE at Page0 base address */
388
  /* Set Page0 as valid page: Write VALID_PAGE at Page0 base address */
394
  uint32_t rc = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,PAGE0_BASE_ADDRESS, VALID_PAGE);
389
  uint32_t rc = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,PAGE0_BASE_ADDRESS, VALID_PAGE);
395
   /* If program operation was failed, a Flash error code is returned */
390
   /* If program operation was failed, a Flash error code is returned */
396
 
391
 
-
 
392
 
-
 
393
 
-
 
394
 
397
    if (rc!= HAL_OK)
395
    if (rc!= HAL_OK)
398
   {
396
   {
399
          FlashStatus = HAL_FLASH_GetError();
397
          FlashStatus = HAL_FLASH_GetError();
400
        return FlashStatus;
398
        return FlashStatus;
401
   }
399
   }
402
 
400
 
-
 
401
    FlashStatus = EE_ErasePages(PAGE1_BASE_ADDRESS,1);
-
 
402
    if(FlashStatus!=HAL_FLASH_ERROR_NONE)
-
 
403
          {
-
 
404
             return FlashStatus;
-
 
405
          }
-
 
406
 
-
 
407
 
403
  /* Return Page1 erase operation status */
408
  /* Return Page1 erase operation status */
404
  return FlashStatus;
409
  return FlashStatus;
405
}
410
}
406
 
411
 
407
/**
412
/**
Line 617... Line 622...
617
      }
622
      }
618
    }
623
    }
619
  }
624
  }
620
 
625
 
621
  /* Erase the old Page: Set old Page status to ERASED status */
626
  /* Erase the old Page: Set old Page status to ERASED status */
622
  FLASH_PageErase(OldPageAddress);
627
  FlashStatus = EE_ErasePages(OldPageAddress,1);
623
  /* If erase operation was failed, a Flash error code is returned */
-
 
624
  FlashStatus = HAL_FLASH_GetError();
-
 
625
  if (FlashStatus !=  HAL_FLASH_ERROR_NONE)
628
  if(FlashStatus!=HAL_FLASH_ERROR_NONE)
626
  {
629
          {
627
    return FlashStatus;
630
             return FlashStatus;
628
  }
631
          }
629
 
632
 
630
  /* Set new Page status to VALID_PAGE status */
633
  /* Set new Page status to VALID_PAGE status */
631
  HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,NewPageAddress, VALID_PAGE);
634
  HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD,NewPageAddress, VALID_PAGE);
632
  /* If program operation was failed, a Flash error code is returned */
635
  /* If program operation was failed, a Flash error code is returned */
633
  FlashStatus = HAL_FLASH_GetError();
636
  FlashStatus = HAL_FLASH_GetError();