首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >M-Arch(番外7)GD32L233评测-FLASH读写

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

作者头像
滚神大人
发布于 2022-03-22 04:07:47
发布于 2022-03-22 04:07:47
70500
代码可运行
举报
文章被收录于专栏:趣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
9050
M-Arch(雅特力M4)【AT-START-F425测评】No.05 FLASH
今儿这个是flash的读写测试,AT32F425R8T7-7拥有64K的flash空间。
滚神大人
2022/06/09
6650
M-Arch(雅特力M4)【AT-START-F425测评】No.05 FLASH
M-Arch(番外5)GD32L233评测-CRC(附 史上解释CRC最清楚的文章)
跟GD32F450相比,它可以支持计算7/8/16/32位的CRC校验码,而不仅仅是32位的校验码。
滚神大人
2022/03/22
1.1K0
M-Arch(番外5)GD32L233评测-CRC(附 史上解释CRC最清楚的文章)
【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
4.1K0
【GD32L233C-START】6、flash读写——使用内部flash存储数据
M-Arch(番外8)GD32L233评测-ADC和DMA(官方没有例程哦)
ADC即模拟数字转换器,ADC的精度一般用位来表示,位数越多,表示相同模拟量范围内的采样点数越多,那么相应的精度就越高。
滚神大人
2022/04/18
1.1K0
M-Arch(番外8)GD32L233评测-ADC和DMA(官方没有例程哦)
M-Arch(番外4)GD32L233评测-系统资源主要频率获取和打印
白高兴了一番,详细查了datasheet,竟然不支持SLCD,白瞎了我买的一块68的裸屏,后面还得折腾一块LCD驱动。
滚神大人
2022/03/22
5780
M-Arch(番外4)GD32L233评测-系统资源主要频率获取和打印
M-Arch(番外9)GD32L233评测-DAC波形发生器(三角波,方波,正弦波,任意波)
前面我们讲过了ADC是把模拟量转成数字量,那么DAC就是反过来,即把数字量转成模拟量。
滚神大人
2022/04/18
7060
M-Arch(番外9)GD32L233评测-DAC波形发生器(三角波,方波,正弦波,任意波)
M-Arch(番外6)GD32L233评测-随机数(附 软件随机数生成算法)
先来啰嗦的说一下随机数的概念,真随机数指通过物理现象来产生的随机数,比如噪声,核裂变等,伪随机数是通过软件算法可重复生成的随机数。
滚神大人
2022/03/22
5350
M-Arch(番外6)GD32L233评测-随机数(附 软件随机数生成算法)
利用MDK的FLM文件制作通用flash驱动
在进行Flash操作时,一般我们需要设计一套Flash抽象层,至少要包括flash的init,read、write、erase这些操作。但每更换一个单片机或者flash器件就要额外去编写flash驱动去适配init,read、write、erase。尽管有会者不难的属性加持,但适配所有的单片机或者flash器件,工作量也可想而知。
AIoT-KK
2023/03/01
2.9K1
利用MDK的FLM文件制作通用flash驱动
M-Arch(番外2)GD32L233评测-开发环境搭建(基本框架+freeRTOS+编译通过)
官方特别提示了要用KEIL5,KEIL5工程的后缀是uvprojx,KEIL4工程的后缀是uvproj
滚神大人
2022/03/22
7670
M-Arch(番外2)GD32L233评测-开发环境搭建(基本框架+freeRTOS+编译通过)
【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
STM32Cube-18 | 使用QSPI读写SPI Flash(W25Q64)
本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件QSPI外设与 SPI Flash 通信(W25Q64)。
Mculover666
2020/07/16
5K0
STM32Cube-18 | 使用QSPI读写SPI Flash(W25Q64)
IAP升级要点总结
(1)程序分两部分,BOOT和APP分别编写; (2)flash空间划分(flash空间足够大的情况下,可以分成APP1和APP2进行备份升级);
ManInRoad
2022/02/09
1.2K0
IAP升级要点总结
M-Arch(2)第一个示例:串口和CRC
先把背景交代一下,上一篇讲了下基本的设计意图和框架,实际上整体框架已经有了,这篇先把整个框架再描述下,再来实现我们的第一个例子。
滚神大人
2021/09/10
4610
M-Arch(番外14)GD32L233评测-驱动段码LCD
结果后来细看,发现CCT6不支持,裸屏不能浪费了,又买了一块天微的TM1621D驱动,自己折腾了一块SLCD板,板子其实比较简单,打板如下:
滚神大人
2022/06/09
6490
M-Arch(番外14)GD32L233评测-驱动段码LCD
M-Arch(番外10)GD32L233评测-SPI驱动DS1302
串行外设接口(Serial Peripheral Interface,缩写为SPI)提供了基于SPI协议的数据发送和接收功能,可以工作于主机或从机模式。SPI接口支持具有硬件CRC计算和校验的全双工和单工模式。有些SPI口还支持SPI四线主机模式。
滚神大人
2022/06/09
1.1K0
M-Arch(番外10)GD32L233评测-SPI驱动DS1302
STM32CubeMX学习–(5)SPI读写W25Q128
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/129269.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/29
1.6K0
STM32CubeMX学习–(5)SPI读写W25Q128
STM32F7QSPI学习笔记——读写N25Q128
QUADSPI 是一种专用的通信接口,连接单、双或四(条数据线)SPI Flash 存储介质。该接口可以在以下三种模式下工作:
知否知否应是绿肥红瘦
2025/02/19
1K0
STM32F7QSPI学习笔记——读写N25Q128
【STM32H7教程】第71章 STM32H7的内部Flash应用之模拟EEPROM
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第71章       STM32H7的内部Flash应用之模拟EEPR
Simon223
2020/03/11
2.4K0
【STM32笔记】使用STM32内部Flash额外的空间来存储数据
STM32 芯片内部的 FLASH 存储器,主要用于存储我们代码。如果内部FLASH存储完我们的代码还有剩余的空间,那么这些剩余的空间我们就可以利用起来,存储一些需要掉电保存的数据。
正念君
2019/11/27
8.4K0
推荐阅读
相关推荐
M-Arch(4)第三个示例:Flash读写操作
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档