文章目录


前言

准备


一、存储信息

1、存储信息寄存器

这个寄存器可以获取 片上FLASH存储器容量片上SRAM容量

2、系统架构示意图

可见Flash的操作可以通过FMC控制器尽心操作,提供字、半字、字节闪存操作,可以扇区擦除、块擦除和部分系列(GD32F470xx, GD32F427xx and GD32F425xx )还提供页擦除(4KB)

3、存储器映射

这个F4系列最大3072KB,我们用的芯片只有 512K

4、存储扇区基地址和大小

可以看出,不同的扇区大小还不一样,有16K、64K、128K不同大小的扇区

二、解锁

1、解锁FMC_CTL、FMC_OBCTLx

复位之后 如果要操作FMC前要解锁 FMC_CTL这个控制寄存器、若果要操作选项字节需解锁FMC_OBCTLx 选项字节控制寄存器,都是先后往对应的KEY解锁寄存器写入两个对应的序列,上锁是把对应 的 LK bit 置1

FMC_CTL解锁上锁例程

/*!\brief    unlock the main FMC operation\param[in]  none\param[out] none\retval     none
*/
void fmc_unlock(void)
{if((RESET != (FMC_CTL & FMC_CTL_LK))) {/* write the FMC key */FMC_KEY = UNLOCK_KEY0;FMC_KEY = UNLOCK_KEY1;}
}/*!\brief    lock the main FMC operation\param[in]  none\param[out] none\retval     none
*/
void fmc_lock(void)
{/* set the LK bit*/FMC_CTL |= FMC_CTL_LK;
}

2、解锁 也擦除配置寄存器 FMC_PECFG

当需要执行页擦除操作时需要 往 FMC_PEKEY 寄存器写入 0xA9B8C7D6来解锁FMC_PECFG寄存器

三、读操作

可以直接寻址访问

void fmc_read_8bit_data(uint32_t address, uint16_t length, int8_t* data_8)
{uint8_t i;   for(i=0; i<length; i++){/*直接寻址访问*/data_8[i] = *(__IO int8_t*)address;address++;}
}

四、主flash编程操作

1、操作流程

a、确保FMC_CTL寄存器不处于锁定状态;
b、等待FMC_STAT寄存器的BUSY位变为0来确保没有闪存操作在进行,否则等待该操作完成;
c、按照需求设置PSZ位域,并置位FMC_CTL寄存器的PG位;
d、DBUS写一个32位整字/16位半字/8位字节(必须与FMC_CTL寄存器中的PSZ位匹配)到
        目的绝对地址(0x08XX XXXX);
e、通过检查FMC_STAT寄存器的BUSY位是否清0,来确定写操作执行完毕;
f、如果需要,使用DBUS读操作验证是否编程成功。

2、8位字节编程例程

/* 单字节编程 */
fmc_state_enum fmc_byte_program(uint32_t address, uint8_t data)
{fmc_state_enum fmc_state = FMC_READY;/* 等待BUSY忙碌标志清零、FMC就绪、FMC没有故障 */fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);if(FMC_READY == fmc_state) {/* 复位编程大小位有 32位整字/16位半字/8位字节*/FMC_CTL &= ~FMC_CTL_PSZ;/* 选择新的编程大小位位 8位字节*/     FMC_CTL |= CTL_PSZ_BYTE;/* 置位 FMC_CTL_PG ,PG位必须在32位整字/16位半字/8位字节编程开始前进行置位*/             FMC_CTL |= FMC_CTL_PG;/* 开始编程,往对应的地址存入数据*/      REG8(address) = data;/* 等待BUSY忙碌标志清零,操作完成 */fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);/* 清零PG位 */FMC_CTL &= ~FMC_CTL_PG;}/* 返回 FMC 状态 */return fmc_state;
}

3、页擦除(GD32F425、GD32F427、GD32F470支持)

1、流程

2、程序解析

/* 页擦除 */
fmc_state_enum fmc_page_erase(uint32_t page_addr)
{fmc_state_enum fmc_state = FMC_READY;/* 等待BUSY忙碌标志清零、FMC就绪、FMC没有故障 */fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);if(FMC_READY == fmc_state) {/* 解锁 FMC_PECFG */FMC_PEKEY = UNLOCK_PE_KEY;/* PE_EN置位使能页擦除、 page_addr要擦除的页地址*/FMC_PECFG = FMC_PE_EN | page_addr;/* 选择擦除扇区号 */        FMC_CTL &= ~FMC_CTL_SN;/* 主存储块扇区擦除命令置位 */      FMC_CTL |= FMC_CTL_SER;/* 发送擦除命令位 */       FMC_CTL |= FMC_CTL_START;/* 等待BUSY忙碌标志清零,操作完成 */fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);/* PE_EN 停止页擦除 */        FMC_PECFG &= ~FMC_PE_EN;/* 主存储块扇区擦除命令清零 */             FMC_CTL &= ~FMC_CTL_SER;}return fmc_state;
}

FMC还提供 扇区擦除、块擦除,这里不详细说明了。


总结

【GD32学习】五、片内Flash读写实验-闪存控制器FMC相关推荐

  1. GD32片内flash读写数据

    GD32现在越来越火,应用也越来越广泛.我们在开发项目的时候,总会有需要掉电存储一些配置信息的时候,但是使用外挂flash.或者EEPROM,或多或少都会占用一些外围接口或增加一定的成本.于是,直接将 ...

  2. Xilinx ZYNQ 7000学习笔记三(qspi flash读写操作)

    参考文献:Zynq-7000 SoC Technical Reference Manual (UG585)-ch12 Quad-SPI Flash Controller 一.nor Flash介绍 z ...

  3. STM32工作笔记0068---SPI同步通信Flash读写实验

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 复习一下

  4. STM32F103基于片内flash的数据读取与音乐播放

    目录 一.前言 二.题目要求 三.什么是片内flash 四.闪存的编程和擦除 五.基于flash的数据读取 1.工程创建 2.修改代码 3.烧录 4.调试 六.基于flash的提示音播放 1.生成正弦 ...

  5. STM32学习笔记:FLASH读写之一

    因为关于STM32的Flash相关的知识点比较多,所以该内容的学习我们分为以下4个部分 1.RAM和ROM的一些基本概念 -- STM32学习笔记:FLASH读写之一 2.STM32的Flash寄存器 ...

  6. 单片机入门学习五 STM32单片机学习二 跑马灯程序衍生出的stm32编程基础

    上篇文章 单片机入门学习四 STM32单片机学习一 跑马灯程序和创建工程 仅介绍了入门程序及其编译运行过程,下面开始对stm32的一些基础知识做一个记录. 1.stm32f103zet6(上篇问题3 ...

  7. ZYNQ-QSPI Flash读写操作

    学习内容 本文首先介绍Flash和QSPI Flash控制器的相关内容,然后使用 QSPI Flash 控制器,开发板上的 QSPI Flash 进行写. 读操作.通过对比读出的数据是否等于写入的数据 ...

  8. 两种闪存:NAND Flash与NOR Flash对比

    1 NOR Flash与NAND Flash基本概念 闪存主要有两种阵列结构,一种是NOR Flash,另一种是NAND Flash,NOR闪存是由Intel公司开发的,是一种随机访问设备,具有专用的 ...

  9. linux 区分flash和u盘,闪存盘和u盘的区别

    U盘,全称USB闪存盘,英文名"USB flash disk". 它是一种使用USB接口的无需物理驱动器的微型高容量移动存储产品,通过USB接口与电脑连接,实现即插即用.但U盘和闪 ...

  10. 【FLASH】写MSP430片内flash|FLASH 读写等操作 学习

    [FLASH 操作]FLASH 读写等操作 学习 近似型号中文资料: IC型号:N25Q128 http://www.soiseek.cn/NUMONYX/N25Q128/2.htm 官方文档:F54 ...

最新文章

  1. python 非_Python函数的非固定参数
  2. JsonUtils fasterxml jackson
  3. c语言中指针的类型,学习C语言中的指针类型
  4. 神策数据独家丨100% 还原小仙炖 618 私域个性化服务实践
  5. RequestToViewNameTranslator
  6. python装饰器补充
  7. HDU - 6955 Xor sum tire树 + 贪心
  8. MATLAB上的GPU加速计算——学习笔记
  9. 说说 C 语言中的变量与算术表达式
  10. leadshop开源商城系统
  11. 开源自研新基建,内核实践云数据,当此方为嘉年华 - 2020嘉年华大会侧记
  12. 【转】struct epoll_event
  13. spring扫描bean总结
  14. 用Python画一个时钟---简易版
  15. 50个知名的开源网站
  16. PHP中fileinfo的作用以及怎么开启fileinfo
  17. 微信录制视频转圈效果如何实现?
  18. 【数据分析实战】杭州2019年链家在售房源数据分析
  19. 家用无线路由器哪个品牌好?程序员分享值得推荐的无线路由器
  20. YOLOV4-模型集成-pytorch

热门文章

  1. BBS.peidy.com版本
  2. pdf.js上传有盖章文件盖章不显示
  3. win10+ubuntu双系统下,完美卸载ubuntu
  4. 微信提醒对方账号异常应该怎么办
  5. 以太网的CSMA/CD协议
  6. 免费的查询IP归属地接口分享
  7. 如何配置一台电脑。(一次解决电脑基础知识和如何选择合适电脑)
  8. 有关winRAR32相关问题
  9. 电脑上编辑文件打字时页面乱跳解决方法
  10. 【cpu温度过高的原因】