关于CH32V307VCT6擦写flash时,用户APP死机(变砖)问题

@WCH

把现象详细说明一下:用户App将FLASH最后64K用于保存数据,在正常供电下,读、写结果都正确,用户App也正常;但是在写的过程中突然断电,就死机(变砖),反复上电也没用,似乎是用户App被冲了。

最后64K?是什么地址?


Link .id:


ENTRY( _start )


__stack_size = 2048;


PROVIDE( _stack_size = __stack_size );



MEMORY

{

FLASH (rx) : ORIGIN = 0x0000000000, LENGTH = 256K

RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K

}


APP:

#define PAGE_FAST_SIZE  (u16)0x100

#define PAGE_SIZE  (u32)0x1000

#define FLASH_SIZE  (u32)0x40000

#define FLASH_END  (u32)(0x08000000+FLASH_SIZE) 

#define EE_BASE_ADDRESS (FLASH_END-1*PAGE_SIZE)

#define BACK_ADDRES     (FLASH_END-2*PAGE_SIZE)

void write_fundata_fast(uint32_t Address)

{

    u16 i;

    u32 addr;


    FLASH_Unlock_Fast();


    mCRC=0;

    for(i=0;i

    {

        mCRC +=fundata.i[i];// Get mCRC

    }


    for(i=0;i

    {

        addr=Address+i*PAGE_FAST_SIZE;

        if( *(u32*)addr!=ERASED ) FLASH_ErasePage_Fast(addr);

        FLASH_ProgramPage_Fast(addr, &fundata.lparameter[i*PAGE_FAST_SIZE/4]);

    }


    FLASH_Lock_Fast();

}

void Power_Off_Store()

{

    write_fundata_fast(EE_BASE_ADDRESS);

}



#define FLASH_SIZE  (u32)0x40000


#define ERASED  0xe339e339



掉电还要做擦除动作?本身掉电操作flash是很容易出问题的,你还多块擦除编程,其实307是有480Kflash的,256K后面的空间可以做数据,我测试过也可以跑程序,只是用MRS下载会异常,自己做个bootloader的话,后面的空间就可以尽量利用,那样你可以预先擦除,掉电操作能省多少时间是多少,看看这样有没有帮助


只有登录才能回复,可以选择微信账号登录