LE5010_OTA

LE5010_OAT

SDK版本:LS_SDK-release-v1.1

在线文档地址:https://ls-doc.readthedocs.io/zh_CN/latest/src/sdk/arch/flash_layout.html

OTA分类

  • 前台OTA

    OTA功能以独立的程序映像烧录在芯片Flash特定地址,独立于应用程序映像。在实施OTA升级前,需要跳出应用,重启执行OTA功能。在OTA过程中,不能完成原有应用功能,只有OTA状态呈现,因此称作 前台OTA

  • 后台OTA

    OTA功能与应用编译在同一程序映像中。实施OTA升级时,原有应用功能依然可以运行,因此称作 后台OTA

  • 双区OTA

    可用于应用程序存储的Flash空间一分为二。一部分存储当前运行的应用固件,另一部分存新固件。当新固件全部收到之后,重启,将老固件擦除,新固件搬移到老固件所在的位置。这种方式固件存储区一份为二,因此称作 双区OTA 。这种方式的好处在于,若新固件接收过程中出现异常,老固件可以重新运行。

  • 单区OTA

    当应用程序固件较大,可用于应用程序存储的Flash空间无法容纳两份应用程序固件的时候。固件升级只能通过 单区OTA 的方式进行。在固件升级前,先进入OTA模式,擦除原有固件,接收新固件,若接收失败,则继续维持OTA状态,必须重新接收新固件。

综合上述4个概念,可行的OTA方式有:前台单区OTA前台双区OTA后台双区OTA。这三种方式我们均支持。

关键概念

Flash可用空间

Flash会存放信息页,Bootloader,协议栈,持久数据和OTA功能映像等内容,在这些区域之外,Flash剩下的大片连续区域称作 Flash可用空间

固件大小最大值

开发者需要对应用程序当前版本和后续一切新版本的程序映像大小最大值有一个估计。双区OTA的条件是 Flash可用空间大小 > 2 * 固件大小最大值

应用程序映像地址、新固件下载地址

在单区OTA中:新固件下载地址 == 应用程序映像地址

在双区OTA中:新固件下载地址 > 应用程序映像地址 + 应用程序大小 并且 新固件不能超出Flash可用空间范围

OTA功能程序映像地址(仅针对前台OTA)

前台OTA的OTA功能程序存放地址和执行地址均不同于用户应用程序。OTA功能程序既不能覆盖Flash其他区域信息,又要确保尽可能留出更大的Flash可用空间,因此在编写和链接的时候,要特别注意程序大小及链接地址。

固件签名

对用于升级的固件有安全性要求的场景下,可以使用固件签名。启用固件签名功能后,SBL会检查签名是否合法,如果不合法,则拒绝升级,以此保障新固件的来源可靠。

固件签名采用ECDSA算法。

  1. 利用 tools/signing/key_gen.py 生成一对密钥,包含公钥、私钥。
  2. SBL中,定义宏 FW_ECC_VERIFY 为1,并公钥拷贝到 sbl/pub_key.c 文件中,编译生成带有验证签名功能的SBL。
  3. 新固件生成后,利用 tools/signing/signing.py 生成固件签名文件。手机OTA升级时,除了选择固件文件之外,还要选择此签名文件。

LE5010 FLASH 分区

le5010 flash 大小为512k

BLE Application

RegionAddress Range (512KB)Size
OTA Settings0x1807F000 - 0x1807FFFF4KB
TinyFS Data Storage0x1807C000 - 0x1807EFFF12KB
FOTA(单ota模式可选)0x18070000 - 0x1807C00044KB
App0x18034000 - 0x18070000240KB
BLE Host & Controller Protocol Stack0x18002000 - 0x18033FFF200KB
Info Page & Second Bootloader0x18000000 - 0x18001FFF8KB

MESH Application

RegionAddress Range (512KB)Size
OTA Settings0x1807F000 - 0x1807FFFF4KB
TinyFS Data Storage0x1807C000 - 0x1807EFFF12KB
FOTA(单ota模式可选)0x18070000 - 0x1807C00044KB
App0x18056000 - 0x18070000104KB
BLE MESH Protocol Stack0x18033XXX - 0x18055FFF136KB
BLE Host & Controller Protocol Stack0x18002000 - 0x18033XXX200KB
Info Page & Second Bootloader0x18000000 - 0x18001FFF8KB

OTA 镜像的起始地址设置

根据 Flash 布局图可以看出,应用程序,包括 OTA 镜像可以使用的空间是在 APP 区0x018034000 - - 0x1807BFFF 这一段 288KB 的空间内;
OTA 固件存放的地址分两种情况:
1.应用程序小于 144KB (也就是 APP 区的一半)时, 可以做 OTA 双区升级,此时OTA 镜像的起始地址根据实际需要确定;例如 App 应用程序占用 100KB 的空 间,那么 OTA 镜像地址就要偏移 100KB 的大小,那 OTA 的起始地址就是0x18034000+0x19000=0x1804D000;

2.应用程序大于 144KB (也就是 APP 区的一半) 时。 不能做双区升级,只能通过单区升级的方式进行 OTA。也就是 Flash 单独有个区域放了一个只做升级的固件(fota),这个固件只做 OTA 升级,它占用的 Flash 空间很小,大约 40KB,当要做 OTA 升级时,先从应用程序跳转到 FOTA, 然后通过这个程序做 OTA 升级,升级的地址为 APP 的起始地址 :0x18034000;

after_build.bat脚本

..\..\..\..\..\tools\le501x\after_build.bat @L ..\..\..\..\.. 402866176 soc\arm_cm\le501x\bin\fw.hex
..\..\..\..\..\tools\le501x\after_build.bat @L ..\..\..\..\.. 403005440 soc\arm_cm\le501x\bin\fw.hex

402866176	0x18034000
403005440	0x18056000
..\..\tools\le501x\after_build.bat @L ..\.. 403005440 soc\arm_cm\le501x\bin\fw_with_sig_mesh.hex
echo %1	= sig_mesh_provee
echo %2 = ..\..
echo %3 = 403005440
echo %4 = soc\arm_cm\le501x\bin\fw_with_sig_mesh.hex
%2\tools\srec_cat.exe -o .\UVBuild\info_sbl.hex -I 
%2\soc\arm_cm\le501x\bin\bram.bin -Bin -of 0x18000300 -crc32-l-e -max-a 
%2\soc\arm_cm\le501x\bin\bram.bin -Bin -of 0x18000300 
%2\tools\le501x\info.bin -Bin -of 0x18000000 
-gen 0x1800001c 0x18000020 -const-l-e 0x18000300 4 
-gen 0x18000020 0x18000024 -const-l-e -l %2\soc\arm_cm\le501x\bin\bram.bin -Bin 4 
-gen 0x18000024 0x18000028 -const-l-e %3 4 
-gen 0x1800002c 0x18000030 -const-l-e 0x1807c000 4 
-gen 0x18000030 0x18000036 -rep-d 0xff 0xff 0xff 0xff 0xff 0xff 

fromelf --bin --output=.\UVBuild\%1.ota.bin .\UVBuild\%1.axf
fromelf --i32 --output=.\UVBuild\%1.hex .\UVBuild\%1.axf
if "%4" NEQ "" (
%2\tools\srec_cat.exe -Output .\UVBuild\%1_production.hex -Intel .\UVBuild\info_sbl.hex -Intel .\UVBuild\%1.hex -Intel %2\%4 -Intel
) else (
%2\tools\srec_cat.exe -Output .\UVBuild\%1_production.hex -Intel .\UVBuild\info_sbl.hex -Intel .\UVBuild\%1.hex -Intel
)
fromelf -c -a -d -e -v -o .\UVBuild\%1.asm .\UVBuild\%1.axf

如何添加 OTA 服务

以 Profile 的形式添加

代码参考 SDK 中的 ble_ uart server 例程,这个例程默认是没有添加 OTA Profile的,将 UART SERVER WITH _OTA 宏配置为1,会将OTA Profile添加进去。以OTA Profiel的形式添加的时候是看不到具体的数据处理流程的,只有 OTA 开始、结束和更新进度的事件回调,看不到具体的 OTA 数据。

OTA Profile 相关的接口:

ota profile 添加的接口: dev_manager_prf_fota_server_add。

ota profile 相关的事件回调处理函数注册(这个注册的函数会处理 OTA 开始,结束和进行中的事件):prf_fota_server_callback_init。

以Service 的形式添加

代码参考 SDK 中的 ble_ fota _server 例程,这个就是整个 OTA 服务的处理流程,OTA APP 下发的命令和数据在这里处理,包括将收到的数据写入对应的 Flash 地址;

如何生成 OTA 的 的 bin 文件

每个例程编译之后会默认生成一个和工程同名的 .ota.bin 文件,这个就是用来做OTA 升级的 bin 文件;

如何进入前台ota

在自己的应用中增加对应的命令进入OTA

		//进入ota
		ota_boot_addr_set(0x18070000);
		platform_reset(0);

APP相关参数设置

双ota区域的app设置

1.set ota address:OTA 固件拷贝到 flash 的目的地址,这个地址可以改,app可用空间是 288K,0x18058000 是 144K 的地址,也就是一半的空间地址。
2.fw copy src address:OTA 固件拷贝的源地址,也就是固件拷贝到 flash 的地址
3.fw copy dst address:OTA 固件拷贝的目的地址:也就是要覆盖原来的 app 应用程序地址
4.fw copy size:OTA 固件拷贝的大小,根据 OTA bin 文件的大小设置(可以通过看 Bin 文件的大小或者应用程序 Hex 文件的最后数据的地址)。
5.boot address:启动地址,也就是 app 应用程序的启动地址。

注意:需要勾选 need reboot 和 setting erase req ;

前台fota和单ota app设置

1.set ota address:OTA 固件拷贝到 flash 的目的地址,0x18034000

2.boot address:启动地址,也就是 app 应用程序的启动地址。0x18034000

注意:需要勾选 need reboot 和 setting erase req ;

烧录前台fota的方法可以使用j-flash 合并之后直接烧录,也可以单个烧录

使用固件合并工具Hex文件合并.exe

srec_cat ble_uart_server_production.hex -Intel fota.hex -Intel -o MergedHexFile.hex -Intel
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值