GD32F303闪存flash

GD32f303 FLASH

在这里插入图片描述

芯片RAM总容量FLASH大小启动文件
GD32F303RCT6GD32F30x_HD48K(256K)属于高密度产品(256K~512K)startup_gd32f30x_hd.s
GD32F303RET6GD32F30x_HD64K(256K+256K)属于高密度产品(256K~512K)startup_gd32f30x_hd.s
GD32f303RGT6GD32F30x_XD96K(256K+768K)0 ~ 127、256 ~ 448页属于超高密度产品(大于512K)startup_gd32f30x_xd.s
GD32F305xx GD32F307xxGD32F30x_CL属于互联性产品startup_gd32f30x_cl.s
  • 对于GD32F30x_CL和GD32F30x_XD,使用了两片闪存,前512KB容量在第一片闪存(bank0)中,后续的容量在第二片闪存(bank1)中;
  • 在闪存的前256K字节空间内,CPU执行指令零等待,在此范围外,CPU读取指令存在较长延时;
  • 对于主存储闪存容量不多于512KB的GD32F30x_CL和GD32F30x_HD,只使用了bank0。
  • 对于GD32F30x_CL和- GD32F30x_HD,GD32F30x_XD,bank0的闪存页大小为2KB,bank1的闪存页大小为4KB;

FLASH读写操作

视频链接

将图片数据与字库存放在指定flash地址

使用芯片GD32f303RGT6

在这里插入图片描述
FLASH地址分布
在这里插入图片描述

针对GD32这种,后面有1片慢速FLASH的情况,都把静态资源放到blank1上。

使用分散加载

方法1(定义时指定地址)

将LVGL图片image_comp_map(存储符号的图像)数组定义到0X8040000上

const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMAGE_COMP uint8_t image_comp_map[] __attribute__((at(0X8040000))) = {
}

将LVGL图片image_language_map(存储符号的图像)数组定义到0X8042000上

const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMAGE_LANGUAGE uint8_t image_language_map[] __attribute__((at(0X8042000))) = {
}

将LVGL图片image_laser_map(存储符号的图像)数组定义到0X8044000上

const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMAGE_LASER uint8_t image_laser_map[] __attribute__((at(0X8044000))) = {
}

将LVGL图片image_rotate_map(存储符号的图像)数组定义到0X8046000上

const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMAGE_ROTATE uint8_t image_rotate_map[] __attribute__((at(0X8046000))) = {
}

将LVGL图片image_touch_map(存储符号的图像)数组定义到0X8048000上

const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMAGE_TOUCH uint8_t image_touch_map[] __attribute__((at(0X8048000))) = {
}

将LVGL字库(存储符号的图像)数组定义到0X804A000上

static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] __attribute__((at(0X8040000))) = {
  /* U+20 " " */
    0x0,

    /* U+2b "+" */
    0x0, 0x1, 0xe5, 0x0, 0x0, 0x0, 0x1e, 0x50,
    0x0, 0x0, 0x1, 0xe5, 0x0, 0x7, 0xaa, 0xbf,
    0xca, 0xa7, 0x7a, 0xab, 0xfc, 0xaa, 0x70, 0x0,
    0x1e, 0x50, 0x0, 0x0, 0x1, 0xe5, 0x0, 0x0,
    0x0, 0x1e, 0x50, 0x0,

    /* U+2d "-" */
    0x7a, 0xaa, 0xaa, 0xaa, 0x77, 0xaa, 0xaa, 0xaa,
    0xa7,
};

查看map文件,字库数组(全局变量区)与图片数组(静态局部变量)均存放在了指定地址
在这里插入图片描述
在这里插入图片描述

方法2(使用分散加载文件)

在这里插入图片描述

LR_IROM1 0x08000000 0x00040000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00040000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   .ANY (+XO)
  }
  RW_IRAM1 0x20000000 0x00018000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

LR_IROM2 0x08040000 0x000c0000   {              ;load region size_region
  ER_IROM2 0x08040000 0x000c0000 {              ;load address = execution address
    lcd.O (LCD_Clear) 						
    ili9320.O(ili9320_Initializtion)        ; ili9320.O 表示函数所在的文件生成的.O 文件
    ili9320.O(ili9320_Clear)                ;ili9320_Clear 表示需要分散加载的目标,名字可以随,
  }                                           ;为了方便区分,我们都按照原本的函数名或者是数组名命名。
} 

给函数添加 section 申明,在函数定义之外添加如下代码。

void LCD_Clear(void) __attribute__((section ("LCD_Clear")));
void ili9320_Initializtion(void) __attribute__((section ("ili9320_Initializtion")));
void ili9320_Clear(void) __attribute__((section ("ili9320_Clear")));
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GD32F303是一款微控制器芯片,它可以通过利用芯片随机数外设或其他能产生随机数的机制来获取随机数。每次上电后,系统会获取一个随机数,并将其传递给外部的硬件加密IC,通过预先约定的算法进行结果计算。等待外部IC接收到随机数并计算结果后,将结果传回系统。如果系统的计算结果和外部IC的计算结果相同,则说明外部的加密IC存在。这样可以增加系统的安全性。 由于GD32F303内部包含FMC外设,该外设提供了安全保护功能,可以阻止非法读取闪存。这一功能可以有效保护软件和固件免受非法用户操作的侵害。 此外,mcu厂商在设计芯片时通常会在芯片中增加特定的非易失性存储,用于存储一些特定的配置信息,比如加密配置。用户可以通过外部工具或在程序的特定地址写入使能存储保护的值,以启用芯片的加密功能。这些配置在芯片完成上电时序后才会生效,从而增强了芯片的安全性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [GD32f303 flash加密](https://blog.csdn.net/qq_46211259/article/details/127290033)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值