分区修改规范

物理地址与逻辑地址的关系介绍

为确保存储在flash中数据的准确性,每32个字节会增加2个字节crc校验位(crc检验由硬件自动完成。对比关系见下图1:(左侧为逻辑地址,右侧为物理地址,红色字体为crc校验)

logic

图1物理地址与逻辑地址的对比

分区修改的组成

修改分区涉及到四个部分:

重要

  • 分区表规划

  • 打包脚本的配置文件修改

  • bootloader的分区表修改

案例

以bk7238为例,当用户在SDK基础上加入代码后,出现以下编译错误时见图2,该如何操作?

build_fail_1

图2 编译报错图示

out_bin_1

图3 编译输出的固件

有两个解决方案:

重要

  • 方案一:查看beken7238_crc.bin 大小超出的APP 分区很小,可关闭一些不需要的功能,减小code size;如果超出的code size很大,则只能实行方案二。

  • 方案二:如果超出的code size很大,则需要重新修改分区表,

分区表制作步骤如下:

  • 1.app分区表制作:

    如flash物理总长度为2M,需在beken378/func/user_driver/BkDriverFlash.c 设定各个分区的partition_start_addr(物理地址)和partition_length(物理长度);

bk_partition

图4 分区表(partition)图示

  • 2.打包脚本配置:

    将tools/beken_packager/beken_packager_wrapper 中的start_addr和size根据图4分区表中各分区大小修改即可,(其中start_addr = partition_start_addr, size = partition_length;

bk_package

图5 打包脚本配置图示

  • 3.使用tools/rt_partition_tool/rt_partition_tool.exe 工具修改插入新的bootloader的分区表见 图6简要步骤如下:

    • 打开rt_partition_tool.exe工具

    • 加载tools/beken_packager/bootloader_bk7238_uart1_v1.0.14.bin

    • 修改对应分区表,注意这里offset 和length 都是逻辑地址,也就是不带CRC的

    • 文件/保存分区表到bootloader

bk_partition_tool

图6 rt_partition_tool图示

分区功能介绍

各分区功能介绍如表格所示

partition name

start address

length

functional description

bootloader

0x00000000

0xf000

Store bootloader

app

0x11000

0x121000

Store application image

ota

0x132000

0xAE000

store updating image

RF_Firmware

0x1E1000

0x1000

Store calibration parameter

NEI_info

0x1E2000

0x1000

Store wifi mac address and fast connection parameter