新唐MCU技术
直播中

刘丰标

8年用户 1163经验值
私信 关注
[问答]

请问如何在 IAR Embedded Workbench for ARM 开发环境中启用可配置数据闪存并设置大小?

如何在 IAR Embedded Workbench for ARM 开发环境中启用可配置数据闪存并设置大小?

回帖(2)

古贤睦

2025-8-20 16:56:38
在NuMicro®系列中,如果数据闪存大小是可配置的,则其大小将与APROM共享。要配置数据闪存,请按照以下步骤作:

1. 选择 Nu-Link ICP 编程工具;
2、为ICP工具选择目标芯片;
3. 点击“继续”按钮;

4. 点击“设置”按钮,打开筹码选项表单;
5. 启用“数据闪存”;
6. 设置数据闪存大小;
7. 根据配置值启用“配置”进行编程。
举报

郑成枝

2025-8-21 18:27:10

在 IAR Embedded Workbench for ARM 中启用可配置数据闪存(如模拟 EEPROM)并设置大小,需通过修改链接器配置文件(.icf)工程配置实现。以下是详细步骤:




步骤 1:修改链接器配置文件 (.icf)




  1. 定位 .icf 文件  



    • 在工程目录中找到后缀为 .icf 的文件(如 flash.icf)。

    • 若不存在,可通过 IAR 菜单创建:右键工程 > Options > Linker > Config > 勾选 Override default 并指定新文件名。




  2. 定义数据闪存区域

    .icf 文件中添加以下代码(以 128KB 主闪存 + 8KB 数据闪存 为例):


    // 定义主闪存区域(程序存储)
    define symbol __ICFEDIT_region_FLASH_start__ = 0x08000000;
    define symbol __ICFEDIT_region_FLASH_end__   = 0x0801FFFF; // 128KB

    // 定义数据闪存区域(模拟EEPROM)
    define symbol __ICFEDIT_region_DATA_FLASH_start__ = 0x08020000;
    define symbol __ICFEDIT_region_DATA_FLASH_end__   = 0x08021FFF; // 8KB

    // 内存区域声明
    define memory mem with size = 4G;
    define region FLASH_region    = mem:[from __ICFEDIT_region_FLASH_start__    to __ICFEDIT_region_FLASH_end__];
    define region DATA_FLASH_region = mem:[from __ICFEDIT_region_DATA_FLASH_start__ to __ICFEDIT_region_DATA_FLASH_end__];

    // 将 .data_flash 段分配到数据闪存区域
    place at start of DATA_FLASH_region { readonly section .data_flash };


    • 调整大小:修改 _end__ 地址值(如 0x08021FFF = 8KB)。

    • 地址对齐:确保区域不重叠且符合芯片手册的扇区划分。






步骤 2:在代码中使用数据闪存


声明变量并分配到 .data_flash 段:


#include 

// 分配到自定义的数据闪存段
#pragma location = ".data_flash"
const uint8_t configData[4096] = {0}; // 4KB 配置数据


  • 关键点:  

    • 使用 #pragma location__section 指定段名(需与 .icf 中一致)。  

    • 变量必须声明为 const(闪存只读)。  





步骤 3:配置工程选项




  1. 检查芯片型号

    右键工程 > Options > General Options > Target > 选择正确的 ARM 芯片型号。




  2. 配置链接器  



    • Options > Linker > Config:确保使用自定义的 .icf 文件。  

    • Options > Linker > Extra Options:添加 --config_def _DATA_FLASH_SIZE=0x2000(定义宏传递大小)。




  3. 编程算法调整(可选)

    若需烧写数据闪存:  



    • Options > Debugger > Download > 勾选 Use flash loader。  

    • 确保算法支持数据闪存地址(参考芯片手册修改 .board 文件)。






步骤 4:验证配置



  1. 编译后查看 .map 文件

    在输出目录打开 .map 文件,检查变量地址是否在 DATA_FLASH_region 范围内:
    .data_flash     0x08020000    0x1000  [configData]

  2. 调试器验证

    连接开发板,通过 IAR Debugger 查看内存(View > Memory),输入地址 0x08020000 确认数据。




注意事项



  • 地址冲突:确保数据闪存区域不占用程序/中断向量表空间。

  • 擦写操作:运行时修改数据闪存需调用芯片的 HAL 库函数(如 HAL_FLASH_Program())。

  • 数据持久性:掉电后数据保留,但擦写次数有限(通常 10K 次)。


通过以上步骤,即可在 IAR 中为 ARM 芯片自定义数据闪存区域并存储非易失数据。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分