创建板子
创建新板子最快捷的方法是基于一块硬件配置相近的板子修改,下面以板子em-lb525(即sf32lb52-devkit-lcd)为例,演示如何创建一块板子,新板子与em-lb525同样使用了SF32LB525芯片,外置了NOR Flash,因此选择em-lb525会是一个比较好的起点。
操作步骤如下:
在
boards
目录下创建文件夹testboard_525
,将em-lb525
下的文件拷贝到testboard_525
下在
boards
目录下创建文件夹testboard_525_base
,将sf32lb52-devkit-lcd
下的文件拷贝到testboard_525_base
下修改
testboard_525/SConscript
,把图中1和2的宏开关名字改为新板子,图中3引用的SConscript文件路径改为testboard_525_base
修改后的代码如下
修改
testboard_525/hcpu/Kconfig.board
和testboard_525/lcpu/Kconfig.board
中板子的宏开关,与上一个步骤中的名称保持一致,修改后的代码如下hcpu/Kconfig.boardconfig BSP_USING_BOARD_TESTBOARD_525 bool select SOC_SF32LB52X select BF0_HCPU default y rsource "../Kconfig.board"
lcpu/Kconfig.boardconfig BSP_USING_BOARD_TESTBOARD_525 bool select SOC_SF32LB52X select BF0_LCPU default y rsource "../Kconfig.board"
修改
testboad_525/Kconfig.board
引用testboard_525_base
下的Kconfig.board
source "$SIFLI_SDK/customer/boards/testboard_525_base/Kconfig.board"
至此,一块新的板子已经创建完成,可以切到
hello_world/rtt/project
执行命令scons --board=testboard_525
使用新板子编译了> scons --board=testboard_525 -j8 scons: Reading SConscript files ... Board: testboard_525_hcpu ======== Multi-Project Info -------- full_name main.bootloader parent main bsp_root D:\code\release_v2.3\release_v2.3.0_test\example\boot_loader\project\butterflmicro\ram_v2 build_dir build_testboard_525_hcpu/bootloader link_script D:/code/release_v2.3/release_v2.3.0_test/example/boot_loader/project/butterflmicro/ram_v2\link ptab D:/code/release_v2.3/release_v2.3.0_test/customer/boards/testboard_525\ptab.json embedded: False -------- full_name main parent bsp_root D:\code\release_v2.3\release_v2.3.0_test\example\get-started\hello_world\rtt\project build_dir build_testboard_525_hcpu/ link_script D:/code/release_v2.3/release_v2.3.0_test/drivers/cmsis/sf32lb52x/Templates/gcc/HCPU/link ptab D:/code/release_v2.3/release_v2.3.0_test/customer/boards/testboard_525\ptab.json -------- full_name main.ftab parent main bsp_root D:\code\release_v2.3\release_v2.3.0_test\example\flash_table\sf32lb52x_common_v2 build_dir build_testboard_525_hcpu/ftab link_script D:/code/release_v2.3/release_v2.3.0_test/drivers/cmsis/sf32lb52x/Templates/gcc/HCPU/link ptab D:/code/release_v2.3/release_v2.3.0_test/customer/boards/testboard_525\ptab.json embedded: False ========
板子的目录结构
板子的目录结构说明如下
| Kconfig.board // 板子的Kconfig配置文件
| ptab.json // memory分区表
| SConscript // 编译脚本
|
+---hcpu
| board.conf // 由menuconfig生成的HCPU最小配置文件
| custom_mem_map.h // 打开CUSTOM_MEM_MAP时使用,用于自定义memory规划
| Kconfig
| Kconfig.board // HCPU的Kconfig配置文件,可以source上级目录下的`Kconfig.board`
| rtconfig.py // 可以指定JLINK_DEVICE,生成下载脚本时使用
|
\---lcpu
board.conf // 由menuconfig生成的LCPU最小配置文件
custom_mem_map.h
Kconfig
Kconfig.board
rtconfig.py
| board.h
| bsp_board.h
| bsp_init.c // HAL_PreInit实现
| bsp_lcd_tp.c // IO相关的配置代码
| bsp_pinmux.c // IO相关的配置代码
| bsp_power.c // IO相关的配置代码
| Kconfig.board // 板子的Kconfig配置文件
|
\---script
SConscript
testboard_525_base
单独分离出去是为了提高代码的复用性,可能同一块板子有多种变体,比如搭载了不同的芯片,这样可以创建多块板子,都引用testboard_525_base
,避免重复修改。
如果不考虑板子有多种变体,也可以将testboard_525_base
里的文件合并到testboard_525
目录下,修改文件中的引用路径
修改板子配置
板子的配置包含以下几个:
硬件连接由
bsp_pinmux.c
、board.conf
和Kconfig.board
等文件定义,board.conf
存放可由menuconfig配置的选项,比如console使用的串口,修改方法为在board.conf
所在目录下执行menuconfig
,并按D以最小配置保存Kconfig.board
存放menuconfig不可见的选项,比如下面的代码定义了触控中断使用的管脚、背光使用的PWM设备编号等config ASIC bool default y config TOUCH_IRQ_PIN int default 26 config LCD_PWM_BACKLIGHT_INTERFACE_NAME string default "pwm3" config LCD_PWM_BACKLIGHT_CHANEL_NUM int default 4 config LCD_BACKLIGHT_CONTROL_PIN int default 1 config RGBLED_CONTROL_PIN int default 32
bsp_pinmux.c
等文件通过实现BSP_PIN_Init等函数,配置管脚的功能与上下拉属性(使用HAL_PIN_Set
接口)
memory分区表ptab.json
该文件可以描述所有memory的分区信息,包括NOR Flash、NAND Flash、PSRAM、片内SRAM、SD卡等。 编译时会由ptab.json生成ptab.h
到build目录下,ptab.h
中定义了一组以_START_ADDR
、_OFFSET
、_SIZE
为后缀的宏,代码中可以使用这些宏获取分区信息
更多信息可参考通用工程构建方法