void fmc_erase_pages(void){ uint32_t EraseCounter; fmc_unlock(); //FMC 解锁 fmc_flag_clear(FMC_FLAG_BANK0_END | FMC_FLAG_BANK0_WPERR | FMC_FLAG_BANK0_PGERR ); //清除标志 for(EraseCounter = 0; EraseCounter < PageNum; EraseCounter++){ fmc_page_erase(FMC_WRITE_START_ADDR + (...
void fmc_erase_pages(void) { uint32_t EraseCounter; fmc_unlock(); //FMC 解锁 fmc_flag_clear(FMC_FLAG_BANK0_END | FMC_FLAG_BANK0_WPERR | FMC_FLAG_BANK0_PGERR ); //清除标志 for(EraseCounter = 0; EraseCounter < PageNum; EraseCounter++){ fmc_page_erase(FMC_WRITE_START_ADDR + ...
fmc_page_erase(erase_addr); erase_addr+=2048; data_earse_num-=1024; } /*若写入地址不是页起始地址*/ }else{ for(;(data_earse_num>0||erase_addr>=write_start_addr+data_lengh*2);) { fmc_page_erase(erase_addr); erase_addr+=2048; data_earse_num-=1024; } } /* 若写入地址加上写...
fmc_flag_clear(FMC_FLAG_BANK0_END | FMC_FLAG_BANK0_WPERR | FMC_FLAG_BANK0_PGERR ); //清除标志 for(EraseCounter = 0; EraseCounter < PageNum; EraseCounter++){ fmc_page_erase(FMC_WRITE_START_ADDR + (FMC_PAGE_SIZE * EraseCounter)); //page 擦除 fmc_flag_clear(FMC_FLAG_BANK0_EN...
在某些GD32F103/101系列中,Page Erase的典型值为100ms,但实际测量可能在60ms左右。 对比STM32,其Page Erase的典型值为20~40ms。 擦除操作的步骤: 确保FMC(Flash Memory Controller)未锁定。 检查BUSY位以确定闪存是否正忙。 设置PER位以准备擦除。 将待擦除页的地址写入FMC_ADDRx寄存器。 通过设置START位来...
fmc_page_erase(erase_addr);erase_addr+=2048;data_earse_num-=1024;} /*若写入地址不是页起始...
12.2.FMC 功能 支持32 位整字或 16 位半字编程,页擦除和整片擦除操作; 支持CPU 执行指令零等待区域(code area)和非零等待区域(data area); 大小为 16 字节的可选字节块可根据用户需求配置; 具有安全保护状态,可阻止对代码或数据的非法读访问;
gd_eval_led_init(LED2);gd_eval_led_init(LED3);2)进行 page erase复制void fmc_erase_pages(...
在fmc_page_erase()都有对应操作。 写数据 解锁和擦除之后,就可以对flash进行写数据的操作。 其中第一步确保FMC_CTLx寄存器不处于锁定状态已在上面解锁了,所以直接进行第二步,检查FMC_STATx寄存器的BUSY位来判定闪存是否正处于擦写访问状态,若BUSY位为1,则需等待该操作结束,BUSY位变为0; 对于写函数,使用fmc_wor...
if(write_start_addr%FLAG_PAGE_SIZE == 0) /* 若写入地址为页起始地址 */ { for(;data_earse_num>0;) { fmc_page_erase(erase_addr); /* 清除错误标志 */ fmc_flag_clear(FMC_FLAG_RDDERR|FMC_FLAG_PGSERR|FMC_FLAG_PGMERR|FMC_FLAG_WPERR|FMC_FLAG_OPERR); ...