创建新工程及board

如果不需要创建新的板子,可直接跳转至创建新的工程

1. 新board创建

1.1 新board定义

当新开发板的硬件外设与旧板差异较大时,需定义独立的board目录,用于体现新板的硬件特性(如引脚配置、电源控制等)。

1.2 新board创建步骤

新board创建需完成目录建立Kconfig配置两部分,确保能在menuconfig中选择并编译。

1.2.1 建立board目录

1.2.1.1 目录文件组成

完整的board目录需包含以下核心文件,各文件作用如下:

文件名

功能描述

bsp_int.c

板子初始化逻辑(如外设初始化)

bsp_pinmux.c

引脚复用(pinmux)配置

bsp_power.c

板子开机时的电源控制逻辑

Kconfig

板子特有的menuconfig配置项

Sconscript

板子编译脚本(指定编译文件与依赖)

目录结构示例:

../../_images/board_0.png
1.2.1.2 目录创建实操

建议基于SDK中已有的同芯片board目录修改(减少重复工作量),以创建eh-lb523_nor_new为例:

  1. 进入SDK的board目录(通常路径为sdk\boards);

  2. 复制同芯片的参考board目录(如eh-lb523_nor),重命名为eh-lb523_nor_new

  3. 根据新板硬件特性,修改上述核心文件(如bsp_pinmux.c调整引脚配置、bsp_power.c适配电源电路)。

最终目录效果:

../../_images/board_1.png

1.3 kconfig 修改

sdk\customer\boards目录下Kconfig,用于配置board选项;

../../_images/board_2.png

参考下图修改,新建board的宏:

../../_images/board_3.png

配置包含新建的“eh-lb523_nor_new”目录下的Kconfig:

../../_images/board_4.png

2. 新工程创建

新工程是指适配新的板子或软件上的特殊修改而创建单独的工程;
Solution2.0的工程分为3类:watch, mod,odometer等3类。

2.1 工程的组成

  • 一个完整的工程包括:

子工程

作用

hcpu

大核(HCPU)

lcpu

小核(LCPU)

ota_manager

OTA 升级

simulator

PC simulator

ftab

Flash 分区表管理

bootloader

引导加载逻辑

  • 子工程组织如下图:

../../_images/project_mind.png

一般sct/flash_map文件是需要根据工程进行修改的。其他工程一般都是使用默认文件。

2.2 工程创建

创建工程的大致步骤如下:

2.2.1 创建工程文件夹

  • 工程目录位于:solution\examples

  • 目录examples根据工程类型区分3个目录:

    • watch:一般指智能手表类型的工程;

    • odometer: 一般指码表类型的工程;

    • mod:一般指模组类型的工程;

示例:创建watch(智能手表)工程eh-lb523_nor_new

  • 进入目录solution\examples\watch\project

  • 创建目录eh-lb523_nor_new

  • 从同类型参考工程(如eh-lb523_nor)复制以下内容到新目录:

    • 子工程目录:hcpu,lcpu,ota_manager, simulater, __application_private__

    • 工程配置文件:PrjCfg.ini

../../_images/project_folder.png

2.2.2 修改CompilerBurnUser.ini

修改工具配置文件CompilerBurnUser.ini,使新工程能在 Butterfli 界面中被选择,步骤如下:

  1. 找到配置文件

该文件位于solution\tools\SiFli_develop\Butterfli\configure。修改的目的是为了Butterfli 界面中能加载出该新工程。

../../_images/butterfli_configure_user.png
  1. 配置工程分组(GROUP_TYPE)

../../_images/butterfli_configure_user_1.png
  • GROUP_NUM 表示工程总数;如果增加了新工程,GROUP_NUM 需要加1;

  • eh-lb523_nor_new 的工程类型为watch,对应的GROUP_TYPE_0;

  1. 新增工程编译配置(COMPILE_SET)

  • 找到TYPE_0开头的COMPILE_SET,如果没有空闲,可以手动添加;
    下图中在TYPE_0_COMPILE_SET_8添加配置信息,如下图;

../../_images/butterfli_configure_user_2.png

小心

路径需要和前面创建的目录“eh-lb523_nor_new”对应

  • 打开butterfli,可以watch下面看到设备类型为eh-lb523_nor_new的工程;

../../_images/butterfli_configure_user_3.png
  • 配置完成后,重启 Butterfli,新工程会显示在工程列表中(初始可能部分选项空白,需后续配置PrjCfg.ini);

../../_images/butterfli_configure_user_4.png

2.2.3 配置PrjCfg.ini文件

该文件位于solution\examples\watch\project\eh-lb523_nor_new。目的是配置工程相关的专有选项,用于Butterfli工具界面装入。

  • 工程和配置文件PrjCfg.ini对应关系

    示例1: eh_lb523_nor工程和配置文件PrjCfg.ini对应关系,如下图:

    ../../_images/project_PrjCfg.png

    :52x(单核) 只涉及HCPU。

    示例2: em_lb566_nor工程和配置文件PrjCfg.ini对应关系,如下图:

    ../../_images/project_PrjCfg_dualcore.png

    :56x/55x/58x 涉及到HCPU和LCPU配置;

  • PrjCfg.ini配置

    PrjCfg.ini是工程核心配置文件,对应 Butterfli 界面的选项,需根据芯片类型(52x/56x/58x)调整路径,关键配置项如下:

    1. FLASHCFG_PATH(flash_map的路径)

    FLASHCFG_PATH=solution\framework\__template__\config\hcpu\flash_map\flash_map_52x_nor(16MB).xlsx
    

    flashmap文件,用于分配存储资源,一般会根据板子进行修改。(后面的章节有介绍)

    1. FTABLE_PRJ(ftab_map的路径)

    52x :sdk\example\flash_table\sf32lb52x; 
    56x :sdk\example\flash_table\sf32lb56x;
    58x :sdk\example\flash_table\sf32lb58x;
    
    1. BTHOST_PRJ(BT host的路径)

    sdk\middleware\bluetooth_host\project\bluetooth_host;
    
    1. BOOTLOADER_PRJ(bootloader的路径)

    52x :sdk\example\boot_loader\project\butterflmicro\ram; 
    56x :sdk\example\boot_loader\project\sf32lb56x;
    
    1. LGENERAL_PRJ(general lcpu的路径,仅52x;其他芯片都有单独的lcpu工程)

    52x :sdk\example\ble\lcpu_general\project\eh-6500; 
    
    1. HCPU_SCT(HCPU SCT的路径)

    52x :solution\framework\__template__\config\hcpu\linker_script\link_flash_52x.sct; 
    56x :solution\framework\__template__\config\hcpu\linker_script\link_flash_56x.sct;
    58x :solution\framework\__template__\config\hcpu\linker_script\link_flash_58x.sct;
    55x :solution\framework\__template__\config\hcpu\linker_script\link_flash_55x.sct;
    
    1. LCPU_SCT(LCPU SCT的路径)

    56x :solution\framework\__template__\config\hcpu\linker_script\link_ldpu_56x_xip.sct;
    58x :solution\framework\__template__\config\hcpu\linker_script\link_ldpu_58x_xip.sct;
    
    1. OTAM_SCT(ota manager SCT的路径)

    solution\framework\__template__\config\ota_manager\linker_script\link_dfu.sct
    
    1. HCPU_MSP(HCPU MSP的路径)

    52x :solution\framework\__template__\config\hcpu\msp_config\msp_config_52x.c;
    56x :solution\framework\__template__\config\hcpu\msp_config\msp_config_56x.c;
    58x :solution\framework\__template__\config\hcpu\msp_config\msp_config_58x.c;
    55x :solution\framework\__template__\config\hcpu\msp_config\msp_config_55x.c;
    
  • PrjCfg.ini配置完成

    关闭Butterfli后,再打开,就能看到空白的选项都已填充完成;

    ../../_images/butterfli_configure_user_5.png

    注意:52x不需要配置LCPU的sct和msp文件;

2.3 Flash 分区表(flashmap)制作

Flash 分区表(xlsx 文件)用于分配存储资源,编译时会自动生成flash_map.c,需重点配置以下分页:

2.3.1 分页 1:FLASH_Config

配置使用的 Flash/PSRAM 参数(如大小、对齐方式),示例:

../../_images/flashmap0.png

2.3.2 分页 2:FLASH_Map

配置 Flash 分区的类型、地址、大小等,核心分区类型说明:

分区类型

功能描述

特点

BIN

生成独立 bin 文件(需烧录),用于存储代码 / 资源

需按 Flash 驱动要求对齐

RSV

预留分区(不生成 bin),用于运行时访问(如 NVM 数据)

对齐方式同BIN

FS

挂载到文件系统(无独立分区),以文件形式存储(如配置文件)

无需对齐

分区分布示例:

../../_images/flashmap1.png

配置项说明:

  • XIP(Execute In Place):标注代码运行地址(是否在 Flash/PSRAM 中运行):

    • 运行在 NorFlash:XIP 地址 = Flash 分区地址,示例:

      ../../_images/flashmap1_xip0.png
    • 运行在 PSRAM:XIP 地址 = PSRAM 基地址(如 0x60000000),示例:

      ../../_images/flashmap1_xip1.png
  • PARTITION_MACRO:为分区定义宏(便于代码调用),如HCPU_FLASH_CODE会生成以下宏:

../../_images/flashmap1_macro.png

2.4 选择合适的board

在 menuconfig 中选择适配的芯片和新 board,步骤如下:

  1. 打开 Butterfli,进入新工程的 menuconfig;

  2. 选择芯片型号(如SF32LB523):

../../_images/board_6.png
  1. 选择新创建的 board(如eh-lb523_nor_new)

../../_images/board_5.png

3. 工程编译

完成上述配置后,即可在 Butterfli 中编译新工程,生成可烧录的 bin 文件。