1 GD32的FLASH读、擦除、写操作-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

GD32的FLASH读、擦除、写操作

撞上电子 2024-02-19 12:46 次阅读

一,GD32的flash特征

1、在flash的前256K字节空间内,CPU执行指令零等待;在此范围外,CPU读取指令存在较长延时;

2、对于flash大于512KB(不包括等于512KB)的GD32F10x_CL和GD32F10x_XD,使用了两片闪存;前512KB容量在第一片闪存(bank0)中,后续的容量在第二片闪存(bank1)中;

3、对于flash容量小于等于512KB的GD32F10x_CL和GD32F10x_HD,只使用了bank0;

4、对 于 GD32F10x_MD , 闪 存 页 大 小 为 1KB 。GD32F10x_CL 和 GD32F10x_HD ,GD32F10x_XD,bank0的闪存页大小为2KB,bank1的闪存页大小为4KB;

5、支持32位整字或16位半字编程,页擦除和整片擦除操作;

二,GD32的flash结构

1、GD32F10x_MD

d596480a-cee1-11ee-9118-92fbcf53809c.png

GD32F10x_CL,GD32F10x_HD 和 GD32F10x_XD

d5d1b67e-cee1-11ee-9118-92fbcf53809c.png

三,GD32的flash读操作

flash可以像普通存储空间一样直接寻址访问。

value=*(uint32_t*)FlashAddr;

uint16_t IAP_ReadFlag(void){ return *(volatile uint16_t*)(FLASH_ADDR); }

四,GD32的flash擦除操作

每一页可以被独立擦除,步骤如下:

1,确保FMC_CTLx寄存器不处于锁定状态;

2,检查FMC_STATx寄存器的BUSY位来判定闪存是否正处于擦写访问状态,若BUSY位为1,则需等待该操作结束,BUSY位变为0;

3,置位FMC_CTLx寄存器的PER位;

4,将待擦除页的绝对地址(0x08XX XXXX)写到FMC_ADDRx寄存器;

5,通过将FMC_CTLx寄存器的START位置1来发送页擦除命令到FMC;

6,等待擦除指令执行完毕,FMC_STATx寄存器的BUSY位清0;

7,如果需要,使用DBUS读并验证该页是否擦除成功。

void fmc_erase_page(uint32_t Page_Address){ fmc_unlock(); //fmc解锁 /* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
/* erase the flash pages */ fmc_page_erase(Page_Address);
/* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
fmc_lock(); //fmc上锁}

要擦除连续的几页:

void fmc_erase_pages(void){uint32_terase_counter;
/* unlock the flash program/erase controller */ fmc_unlock(); /* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
/* erase the flash pages */ for(erase_counter = 0; erase_counter < page_num; erase_counter++){ fmc_page_erase(FMC_WRITE_START_ADDR + (FMC_PAGE_SIZE * erase_counter)); fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR); }

/* lock the main FMC after the erase operation */ fmc_lock();}

全部擦除:

void fmc_erase_page(uint32_t Page_Address){ fmc_unlock(); //fmc解锁 /* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
/* erase whole chip */ fmc_mass_erase();
/* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR);
fmc_lock(); //fmc上锁}

五,flash写

往flash的某个地址写入数据前,一般要先擦除该地址。

16位半字编程:

void IAP_WriteFlag(uint16_t flag){ fmc_unlock(); fmc_page_erase(IAP_FLAG_ADDR); fmc_halfword_program(IAP_FLAG_ADDR,flag); fmc_lock();}

32位整字编程:

void fmc_program(void){ /* unlock the flash program/erase controller */ fmc_unlock();
address = FMC_WRITE_START_ADDR; /* program flash */ while(address < FMC_WRITE_END_ADDR){ fmc_word_program(address, data0); address += 4; fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR); } /* lock the main FMC after the program operation */ fmc_lock();}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1633

    浏览量

    147935
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10854

    浏览量

    211563
  • GD32
    +关注

    关注

    7

    文章

    403

    浏览量

    24325
收藏 人收藏

    评论

    相关推荐

    GD32H757Z海棠派开发板使用手册】第四讲 FMC-片内Flash擦写实验

    FMC即Flash控制器,其提供了片上Flash操作所需要的所有功能,在GD32H7XX系列MCU中,具有高达3840KB字节的片上闪存可用于存储指令或数据。FMC也提供了扇区
    的头像 发表于 04-19 10:09 1253次阅读
    【<b class='flag-5'>GD</b>32H757Z海棠派开发板使用手册】第四讲 FMC-片内<b class='flag-5'>Flash</b>擦写<b class='flag-5'>读</b>实验

    GD32 MCU 入门教程】GD32 MCU 常见外设介绍(12)FMC 模块介绍

    闪存控制器(FMC),提供了片上闪存需要的所有功能。FMC 也提供了页擦除,整片擦除,以及32 位整字或 16 位半字编程闪存等操作GD32 MCU 支持不同类型编程的具体说明如下
    的头像 发表于 08-21 09:56 1087次阅读
    <b class='flag-5'>GD32</b> MCU 入门教程】<b class='flag-5'>GD32</b> MCU 常见外设介绍(12)FMC 模块介绍

    GD32无法烧的原因?

    GD32无法烧
    发表于 07-26 07:09

    什么是GD32

    一、前言什么GD32GD32是国内开发的一款单片机,据说开发的人员是来自ST公司的,GD32也是以STM32作为模板做出来的。所以GD32和STM32有很多地方都是一样的,不过
    发表于 08-12 07:46

    「必看干货」浅谈GD32与STM32之间的区别

    延长上电时间 ,配置(2ms) 。4.GD32提高了相同工作频率下的代码执行速度,所以GD32的_NOP()时间比STM32更加短,所以不使用定时器做延时时要注意修改。5.GD32的flash
    发表于 09-26 14:28

    JFlash解除GD32保护的方法

    JFlash解除GD32保护如果用户添加了保护或者误操作等导致的下载不了,可以先进行解锁尝试,步骤如下:1、打开J-Flash V6.4
    发表于 11-04 09:10

    GD32操作FLASH时有哪些注意事项呢

    GD32操作FLASH时注意事项GD32操作其内部FLASH时,发现连续存储两个数据,并且连续
    发表于 01-26 07:38

    GD32替换STM32?这些坑你别踩...

    味着单片机代码运行的速度会更快,项目中如果需要进行刷屏,开方运算,电机控制等操作GD是一个不错的选择。3、供电外部供电:GD32外部供电范围是2.6~3.6V,STM32外部供电范围是2~3.6V。
    发表于 03-31 10:51

    分享在IAR环境下GD32flash下载算法的一些理解

    各个字段的地址分配,如.data, .bss段等,此处内容比较简单,大家开发时也都会涉及到,当有新增SDRAM,和外部flash时,可以修改此文件,以及定义字段等操作。总结此次就简单描述下GD32
    发表于 09-30 11:05

    GD32 MCU原理及固件库开发指南》 + 初感悟

    库开发能够避免每次操作寄存器时去查芯片的应用手册,这样能很好地提高开发效率。GD32 MCU原理固件库开发指南这本书它详细描述了基本所有外设的底层驱动程序和API接口,可以让我快速地明白各个API函数
    发表于 03-31 22:11

    Linux下flash操作擦除步骤

    的一段区域。 需要注意的是,在对NOR FLASH进行读写数据时,需要参考对应的datasheet,例如这里选用的NOR FLASH擦除
    发表于 06-30 09:49 1.5w次阅读
    Linux下<b class='flag-5'>flash</b><b class='flag-5'>操作</b><b class='flag-5'>读</b>、<b class='flag-5'>写</b>、<b class='flag-5'>擦除</b>步骤

    如何使用QSPI Flash控制器开发板上的 QSPI Flash进行操作

    学习内容 本文首先介绍Flash和QSPI Flash控制器的相关内容,然后使用 QSPI Flash 控制器,开发板上的 QSPI Flash 进行
    的头像 发表于 06-10 17:08 1.4w次阅读
    如何使用QSPI <b class='flag-5'>Flash</b>控制器开发板上的 QSPI <b class='flag-5'>Flash</b>进行<b class='flag-5'>写</b><b class='flag-5'>读</b><b class='flag-5'>操作</b>

    GD32操作FLASH时注意事项

    GD32操作FLASH时注意事项GD32操作其内部FLASH时,发现连续存储两个数据,并且连续
    发表于 12-02 10:36 14次下载
    <b class='flag-5'>GD32</b><b class='flag-5'>操作</b><b class='flag-5'>FLASH</b>时注意事项

    flash芯片时为什么需要先擦除

    flash芯片时为什么需要先擦除? 在讲解为什么需要先擦除Flash芯片之前,先来了解一下Flash
    的头像 发表于 10-29 17:24 4258次阅读

    Nor Flash编程和擦除操作的详细流程

    Nor Flash 中的编程和擦除操作涉及写入数据和擦除存储单元的特定步骤。
    的头像 发表于 12-05 15:19 1428次阅读