GD32E505 Flash 操作


GD32E505 Flash:

  1. 设备唯一ID(UNIQUE ID ,96bit,只能按字32位访问),基地址:0x1FFF_F7E8

  2. 闪存的前512K字节空间内,CPU执行指令需要0~4个等待时间。

  3. 闪存页大小为8KB,支持32位字/16位半字编程,页擦除和整片擦除。

  4. 2K字节 OTP块(一次性编程),用于存储用户数据。

  5. 16字节的选项字节,根据用户需求配置,当系统复位时,选项字节被加载到选项字节控制寄存器。

  6. GD32E505_CL闪存基地址和构成:

    闪存 名称 地址范围 大小
    主闪存 Page0 0x0800_0000~0x0800_1FFF 8KB
    主闪存 Page1 0x0800_2000~0x0800_3FFF 8KB
    主闪存 ….. ….. 8KB
    主闪存 Page63 0x0807_E000~0x0807_FFFF 8KB
    信息块 CL 引导Bootloader 0x1FFF_B000~0x1FFF_F7FF 18KB
    选项字节 选项字节 0x1FFF_F800~0x1FFF_F80F 16B
    一次性编程 OTP 0x1FFF_7000~0x1FFF_77FF 2KB
  7. 选项字节说明 : 每次系统复位后,选项字节被重载到FMC_OBSTAT和FMC_WP寄存器后,选项字节生效。选项字节的补字节具体为选项字节取反。当选项字被重载时,如果选项字节的补字节和选项字节补匹配,FMC_OBSTAT的OBERR位将被置1,选项字节被强制设置为0xFF。若选项字节和其补字节同为0xFF,则OBERR位补置位。

    地址 名称 说明
    0x1FFF_F800 SPC 选项字节安全保护值,0xA5未保护,除0xA5和0xCC外的任何值:保护级别低,0xCC:保护级别高
    0x1FFF_F801 SPC_N SPC补字节
    0x1FFF_F802 USER [7:6] : BOR_TH ,BOR复位阈值
    [5:3] : 保留
    [2] : nRST_STDBY,0:设置待机模式时产生复位而不是进入待机模式。1:设置待机模式时进入待机模式而不产生复位。
    [1] : nRST_DPSLP,0:设置深度睡眠模式时产生复位而不进入深度睡眠模式。1:设置深度睡眠模式时进入深度睡眠模式而不产生复位。
    [0] : nWDG_HW, 0:硬件是能独立看门狗功能。1:软件使能独立看门狗功能。
    0x1FFF_F803 USER_N SPC补字节
    0x1FFF_F804 DATA[7:0] 用户定义数据7到0位
    0x1FFF_F805 DATA_N[7:0] DATA补字节的7到0位
    0x1FFF_F806 DATA[15:8] 用户定义数据15到8位
    0x1FFF_F807 DATA_N[15:8] DATA补字节的15到8位
    0x1FFF_F808 WP[7:0] 页擦除/编程保护值的7到0位
    [0] : 保护生效
    [1] : 未保护
    0x1FFF_F809 WP_N[7:0] WP补字节的7到0位
    0x1FFF_F80A WP[15:8] 页擦除/编程保护值的15到8位
    0x1FFF_F80B WP_N[15:8] WP补字节的15到8位
    0x1FFF_F80C WP[23:16] 页擦除/编程保护值的23到16位
    0x1FFF_F80D WP_N[23:16] WP补字节的23到16位
    0x1FFF_F80E WP[31:24] 页擦除/编程保护值的31到24位
    0x1FFF_F80F WP_N[31:24] WP补字节的31到24位
  8. 安全防护:
    未保护状态:当将SPC字节和它的补字节设置为0x5AA5,系统复位后闪存将处于非安全保护状态,主存储器和选项字节可以被所有操作模式访问。
    保护等级低:当设置SPC字节为任何除0xA5或0xCC外的值,系统复位以后,低安全保护状态生效。需要注意的是,若修改过程中,MCU的调试模块依然和外部JTAG/SWD设备相连,需要用上电复位代替系统复位以使得修改后的保护状态生效。在低安全保护状态下,主存储闪存块仅能被用户代码访问且前8KB的闪存自动处于页擦除/编程保护状态下。在调试模式下,或从SRAM中启动时,以及从boot loader区启动时,这些模式下对主存储块的操作都被禁止。如果在这些模式下读主存储块,将产生总线错误。如果在这些模式下,对主存储块进行编程或擦除操作,FMC_STAT寄存器的WPERR位将被置1。但这些模式下都可以对选项字节进行操作,从而可以通过该方式失能安全保护功能。如果将SPC字节和它的补字节设置为0x5AA5,安全保护功能将失效,并自动触发一次整片擦除操作。
    保护等级高:当设置SPC字节为0xCC,激活高安全保护等级。当编程选择该保护等级时,调试模式,从SRAM中启动,或者从boot loader启动都被禁止。主存储闪存块可由用户代码的所有操作进行访问。SPC字节禁止再次编程。所以,如果高保护等级被激活,将不能再降回到低保护等级或无保护等级。

    空芯片默认该值为0xFF?所以无法烧写程序??蛋疼的设计!!

例程分析

Examples/FMC中有三个例程;

  1. Erase_Program: 提供了fmc_erase_pages和fmc_program的操作例程。
  2. Security_protection: 设置Security和解unSecurity。
  3. Write_Protection: 设置写保护,参考意义不大。

基于以上这三个例程,基本上对flash的操作就不是事了。


文章作者: xArm
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xArm !
评论