-
Notifications
You must be signed in to change notification settings - Fork 165
Open
Description
flashDriver::FlashDriver(){
uint32_t flashSize = (uint32_t)(*(volatile uint16_t*)FLASHSIZE_BASE)*0x400; // flash size in bytes
FlashMaxAddress = FLASH_BASE + flashSize;
SectorsTotal = getSectorNum(FlashMaxAddress-10)+1;
Maintain = false;
}
uint32_t FlashDriver::getSectorNum(uint32_t Address){
uint32_t curaddr = FLASH_BASE;
uint32_t nextaddr;
int num = 0;
for( ; ;num++){
switch(num%12){
case 0:
case 1:
case 2:
case 3:
nextaddr = curaddr + 16*0x400;
break;
case 4:
nextaddr = curaddr + 64*0x400;
break;
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
nextaddr = curaddr + 128*0x400;
break;
}
if((Address > curaddr) && (Address < nextaddr)){
break;
}
curaddr = nextaddr;
if(curaddr > FlashMaxAddress){
return 0xFFFFFFFF;
}
}
return num;
}
uint32_t FlashDriver::getSectorAddress(uint32_t num){
uint32_t curaddr = FLASH_BASE;
int inum = 0;
for( ; ;inum++){
switch(inum%12){
case 0:
break;
case 1:
case 2:
case 3:
case 4:
curaddr += 16*0x400;
break;
case 5:
curaddr += 64*0x400;
break;
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
curaddr += 128*0x400;
break;
}
if(inum == num){
break;
}
if(curaddr >= FlashMaxAddress){
return 0xFFFFFFFF;
}
}
return curaddr;
}Metadata
Metadata
Assignees
Labels
No labels