DevEBox_STM32H750VB_QSPIFLM/src/FlashPrg.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;
}