77 lines
1.9 KiB
C
77 lines
1.9 KiB
C
#include "FlashConfig.h"
|
|
#include "FlashOS.h"
|
|
#include "FlashOperations.h"
|
|
|
|
/*
|
|
* Initialize Flash Programming Functions
|
|
* Parameter: adr: Device Base Address
|
|
* clk: Clock Frequency (Hz)
|
|
* fnc: Function Code (1 - Erase, 2 - Program, 3 - Verify)
|
|
* Return Value: 0 - OK, 1 - Failed
|
|
*/
|
|
int Init(unsigned long adr, unsigned long clk, unsigned long fnc) {
|
|
if (Flash_Init() != 0) return 1;
|
|
|
|
/* Verify operation */
|
|
if (fnc == 3) {
|
|
if (Flash_Map() != 0) return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
* De-Initialize Flash Programming Functions
|
|
* Parameter: fnc: Function Code (1 - Erase, 2 - Program, 3 - Verify)
|
|
* Return Value: 0 - OK, 1 - Failed
|
|
*/
|
|
int UnInit(unsigned long fnc) {
|
|
if (fnc == 3) {
|
|
if (Flash_UnMap() != 0) return 1;
|
|
}
|
|
|
|
if (Flash_Deinit() != 0) return 1;
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
* Erase complete Flash Memory
|
|
* Return Value: 0 - OK, 1 - Failed
|
|
*/
|
|
int EraseChip(void) {
|
|
if (Flash_EraseChip() != 0) return 1;
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
* Erase Sector in Flash Memory
|
|
* Parameter: adr: Sector Address
|
|
* Return Value: 0 - OK, 1 - Failed
|
|
*/
|
|
int EraseSector(unsigned long adr) {
|
|
uint32_t sector_offset = (adr - APP_FLASH_BASE) & ~(APP_FLASH_SECTOR_SIZE - 1);
|
|
if (Flash_EraseSector(sector_offset) != 0) return 1;
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
* Program Page in Flash Memory
|
|
* Parameter: adr: Page Start Address
|
|
* sz: Page Size
|
|
* buf: Page Data
|
|
* Return Value: 0 - OK, 1 - Failed
|
|
*/
|
|
int ProgramPage(unsigned long adr, unsigned long size, unsigned char *buffer) {
|
|
uint32_t page_start = (adr - APP_FLASH_BASE);
|
|
if (Flash_ProgramPage(page_start, buffer, size) != 0) return 1;
|
|
return 0;
|
|
}
|
|
|
|
unsigned long Verify(unsigned long adr, unsigned long sz, unsigned char *buf) {
|
|
while (sz-- > 0) {
|
|
if (*(char *)adr++ != *((char *)buf++)) return (adr);
|
|
}
|
|
|
|
return adr;
|
|
}
|