123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #include <drive_eeprom.h>
- #include <stm32f10x_conf.h>
-
-
- u8 writeFlash(u32 StartAddr,u32 *p_data,u32 size)
- {
- volatile FLASH_Status FLASHStatus;
- u32 EndAddr=StartAddr+size*4;
- vu32 NbrOfPage = 0;
- u32 EraseCounter = 0x0, Address = 0x0;
- int i;
- int MemoryProgramStatus=1;
-
- FLASH_Unlock();
- NbrOfPage=((EndAddr-StartAddr)/PageSize)+1;
- FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
-
- FLASHStatus=FLASH_COMPLETE;
- for(EraseCounter=0;(EraseCounter<NbrOfPage)&&(FLASHStatus==FLASH_COMPLETE);EraseCounter++)
- {
- FLASHStatus=FLASH_ErasePage(StartAddr+(PageSize*EraseCounter));
- }
-
- Address = StartAddr;
- i=0;
- while((Address<EndAddr)&&(FLASHStatus==FLASH_COMPLETE))
- {
- FLASHStatus=FLASH_ProgramWord(Address,p_data[i++]);
- Address=Address+4;
- }
- Address = StartAddr;
- i=0;
- while((Address < EndAddr) && (MemoryProgramStatus != 0))
- {
- if((*(vu32*) Address) != p_data[i++])
- { MemoryProgramStatus = 0;
- return 1;
- }
- Address += 4;
- }
- return 0;
- }
- int readFlash(u32 StartAddr,u32 *p_data,u32 size)
- {
- u32 EndAddr=StartAddr+size*4;
- int MemoryProgramStatus=1;
- u32 Address = 0x0;
- int i=0;
- Address = StartAddr;
- while((Address < EndAddr) && (MemoryProgramStatus != 0))
- {
- p_data[i++]=(*(vu32*) Address);
- Address += 4;
- }
- return 0;
- }
|