Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >M-Arch(番外7)GD32L233评测-FLASH读写

M-Arch(番外7)GD32L233评测-FLASH读写

作者头像
滚神大人
发布于 2022-03-22 04:07:47
发布于 2022-03-22 04:07:47
67400
代码可运行
举报
文章被收录于专栏:趣Python趣Python
运行总次数:0
代码可运行

前言

今儿这个是flash的读写测试。

闪存结构

闪存控制器(FMC),提供了片上闪存需要的所有功能。一般而言,MCU的Flash包括4个部分:

  • 主存储区(Main memory),其特点是可读可写,存放的是程序;如果空间足够,也可以用来存放数据(参数,记录等)。
  • 系统存储区(System memory),有的翻译叫存储块,实际上就是Boot Loader,只读。
  • 一次性存储区OTP(One Time Program),其特点是只能由1写为0,不能由0写为1,可以用来存储保护性或防伪性内容。
  • 选项字节(Option bytes),存放的是系统的一些配置数据,上电时加载到寄存器中。

Flash读写的流程和注意事项在芯片手册中写的清清白白,就不赘述了;如果大家感兴趣,可以对着厂家给的API接口比对着看,理解会更好一点。

GD32L233 Flash结构

GD32F450 Flash结构

在flash分区的专用名称中,记住下面这个公式可以很好的理解分区:

页(Page)< 扇区(Sector) < 块(Block,bank)< 芯片(Chip)

一般容量小的就是分页,容量大就分块+扇区。

FMC测试

FMC的操作实际上比较简单,厂家给的API都很成熟,需要注意的几个点:

  1. FMC不能“自杀”,即不能由程序自己写自己,所以FMC只能写非程序区的Flash。
  2. FMC操作上需要先unlock,操作完之后记得lock。

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static void fmc_test(void)
{
#ifdef FMC_TEST
    #define FMC_TEST_DATA_COUNT 5
    static uint8_t fmc_test_flag = 0;
    uint32_t index = 0;
#if defined(GD32)
    uint32_t addr =  0x08100000;
    uint32_t sector = CTL_SECTOR_NUMBER_12;
#endif
#if defined(GD32M0)    
    uint32_t addr =  0x0803E000;
    uint32_t sector = addr;
    #define fmc_sector_erase fmc_page_erase
#endif
#ifdef STM32
    uint32_t addr =  0x08040000;
    uint32_t sector = addr;
#endif
    uint32_t *pdata = (uint32_t *)addr;
    int32_t fmc_state;

    if (fmc_test_flag)
    {
        return;
    }
    fmc_test_flag = 1;

    /* 1. before erase */
    printf("before erase,\tdata = ");
    for (index = 0; index < FMC_TEST_DATA_COUNT; index++)
    {
        printf("0x%X ", pdata[index]);
    }
    printf("\r\n");

    /* 2. after erase */
    fmc_unlock();
    fmc_state = fmc_sector_erase(sector);
    fmc_lock();
    printf("after erase[%d]\tdata = ", fmc_state);
    for (index = 0; index < FMC_TEST_DATA_COUNT; index++)
    {
        printf("0x%X ", pdata[index]);
    }
    printf("\r\n");

    /* 2. after program */
    fmc_unlock();
    for (index = 0; index < FMC_TEST_DATA_COUNT; index++)
    {
        fmc_state = fmc_word_program(addr, index+9);
        addr += 4;
        printf("programing [0x%0X] state = [%d]\r\n", addr, fmc_state);
    }
    fmc_lock();
    printf("after program,\tdata = ");
    for (index = 0; index < FMC_TEST_DATA_COUNT; index++)
    {
        printf("0x%X ", pdata[index]);
    }
    printf("\r\n");

#endif
}

测试结果(GD32L233,正常状态返回值是0):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
before erase, data = 0x9 0xA 0xB 0xC 0xD 
after erase[0] data = 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 
programing [0x803E004] state = [0]
programing [0x803E008] state = [0]
programing [0x803E00C] state = [0]
programing [0x803E010] state = [0]
programing [0x803E014] state = [0]
after program, data = 0x9 0xA 0xB 0xC 0xD 

OTP和OB展示

通过Keil的调试功能可以查看Flash地址的数据,当然也可以直接在程序中读取。

GD32L233 OB数据:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 趣Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
M-Arch(4)第三个示例:Flash读写操作
本文我们将回顾下FMC的知识,并给出Flash读写的接口设计和示例,这在设计升级程序时十分重要。
滚神大人
2021/09/10
8900
【GD32L233C-START】6、flash读写——使用内部flash存储数据
1、关于GD32 Flash GD32 flash官方称为FMC。 2、关于GD32L233CCT6 flash 本次使用的GD32L233CCT6 flash大小为256k; 可以看出,分为64页,从0-63页,每页大小为4kb; 手册上说,支持32位整字和16位半字编程,但是库函数只有整字编程。 3、代码实现 #define FLASH_PAGE_SIZE 0x1000 //4k void FlashWrite(uint16_t len,uint8_t *da
ManInRoad
2022/04/04
3.9K0
【GD32L233C-START】6、flash读写——使用内部flash存储数据
M-Arch(雅特力M4)【AT-START-F425测评】No.05 FLASH
今儿这个是flash的读写测试,AT32F425R8T7-7拥有64K的flash空间。
滚神大人
2022/06/09
6370
M-Arch(雅特力M4)【AT-START-F425测评】No.05 FLASH
M-Arch(番外2)GD32L233评测-开发环境搭建(基本框架+freeRTOS+编译通过)
官方特别提示了要用KEIL5,KEIL5工程的后缀是uvprojx,KEIL4工程的后缀是uvproj
滚神大人
2022/03/22
7180
M-Arch(番外2)GD32L233评测-开发环境搭建(基本框架+freeRTOS+编译通过)
【GD32L233C-START】12、IAP程序升级——基于YMODEM协议
关于IAP程序升级的要点和YMODEM协议,可以查看串口YMODEM实现IAP程序升级(附完整工程);本文在GD32L233CCT6上实现串口YMODEM升级。
ManInRoad
2022/04/04
2.5K0
【GD32L233C-START】12、IAP程序升级——基于YMODEM协议
M-Arch(番外8)GD32L233评测-ADC和DMA(官方没有例程哦)
ADC即模拟数字转换器,ADC的精度一般用位来表示,位数越多,表示相同模拟量范围内的采样点数越多,那么相应的精度就越高。
滚神大人
2022/04/18
1.1K0
M-Arch(番外8)GD32L233评测-ADC和DMA(官方没有例程哦)
M-Arch(番外5)GD32L233评测-CRC(附 史上解释CRC最清楚的文章)
跟GD32F450相比,它可以支持计算7/8/16/32位的CRC校验码,而不仅仅是32位的校验码。
滚神大人
2022/03/22
1.1K0
M-Arch(番外5)GD32L233评测-CRC(附 史上解释CRC最清楚的文章)
【STM32H7教程】第70章 STM32H7的内部Flash基础知识和HAL库API
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第70章       STM32H7的内部Flash基础知识和HAL库
Simon223
2020/03/11
2K0
STM32高级开发——使用DFU方案
素材来源:https://blog.csdn.net/zhengyangliu123/article/details/78788815
李肖遥
2022/12/22
1.7K0
STM32高级开发——使用DFU方案
第4期 | SFUD,一款串行(SPI)Flash通用驱动库
本专栏由Mculover666创建,主要内容为寻找嵌入式领域内的优质开源项目,一是帮助开发者使用开源项目实现更多的功能,二是通过这些开源项目,学习大佬的代码及背后的实现思想,提升自己的代码水平,和其它专栏相比,本专栏的优势在于:
Mculover666
2020/07/16
1.9K0
第4期 | SFUD,一款串行(SPI)Flash通用驱动库
【STM32H7教程】第71章 STM32H7的内部Flash应用之模拟EEPROM
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第71章       STM32H7的内部Flash应用之模拟EEPR
Simon223
2020/03/11
2.3K0
从零编写STM32H7的MDK SPI FLASH下载算法
当我们要下载编译好的镜像到Flash时,首先要做的一步就是选择合适的Flash下载算法,而这个算法本身就是一个FLM文件:
AIoT-KK
2023/03/01
1.5K0
从零编写STM32H7的MDK SPI FLASH下载算法
利用MDK的FLM文件制作通用flash驱动
在进行Flash操作时,一般我们需要设计一套Flash抽象层,至少要包括flash的init,read、write、erase这些操作。但每更换一个单片机或者flash器件就要额外去编写flash驱动去适配init,read、write、erase。尽管有会者不难的属性加持,但适配所有的单片机或者flash器件,工作量也可想而知。
AIoT-KK
2023/03/01
2.7K1
利用MDK的FLM文件制作通用flash驱动
M-Arch(8)第七个示例:串口和DMA
由于之前我们已经使用了串口1(STM中是USART1,GD中是USART0),本文中以串口2作为示例(STM中是USART2,GD中是USART1)。
滚神大人
2022/03/22
6670
M-Arch(8)第七个示例:串口和DMA
M-Arch(番外6)GD32L233评测-随机数(附 软件随机数生成算法)
先来啰嗦的说一下随机数的概念,真随机数指通过物理现象来产生的随机数,比如噪声,核裂变等,伪随机数是通过软件算法可重复生成的随机数。
滚神大人
2022/03/22
5110
M-Arch(番外6)GD32L233评测-随机数(附 软件随机数生成算法)
IAP升级要点总结
(1)程序分两部分,BOOT和APP分别编写; (2)flash空间划分(flash空间足够大的情况下,可以分成APP1和APP2进行备份升级);
ManInRoad
2022/02/09
1.2K0
IAP升级要点总结
M-Arch(番外4)GD32L233评测-系统资源主要频率获取和打印
白高兴了一番,详细查了datasheet,竟然不支持SLCD,白瞎了我买的一块68的裸屏,后面还得折腾一块LCD驱动。
滚神大人
2022/03/22
5400
M-Arch(番外4)GD32L233评测-系统资源主要频率获取和打印
STM32CubeMX学习–(5)SPI读写W25Q128
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/129269.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/29
1.4K0
STM32CubeMX学习–(5)SPI读写W25Q128
M-Arch(5)第四个示例:ADC&DMA
本文我们将总结下ADC和DMA的基本使用方法,并给出示例,从中我们可以看到GD和STM在设计上的差别。
滚神大人
2021/10/08
6120
【STM32笔记】使用STM32内部Flash额外的空间来存储数据
STM32 芯片内部的 FLASH 存储器,主要用于存储我们代码。如果内部FLASH存储完我们的代码还有剩余的空间,那么这些剩余的空间我们就可以利用起来,存储一些需要掉电保存的数据。
正念君
2019/11/27
8K0
推荐阅读
相关推荐
M-Arch(4)第三个示例:Flash读写操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档