Skip to content

calculating sector number and address #8

@lazbaphilipp

Description

@lazbaphilipp
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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions