sunduoze 发表于 2021-7-11 15:54

【仓库温湿度自动控制模拟系统】9. RSL10 FOTA app的适配

本帖最后由 sunduoze 于 2021-7-12 00:52 编辑

#### 展示



#### 准备工作
**目标**:将现有工程加工,做成FOTA的app工程
**环境**:Windows7SP1 + ON Semiconductor IDE_V3.3.0.16 + RSL10-002GEVB(板载Jlink) + RSL10-SENSE-DB-GEVK + RSL10-COIN-GEVB(TBD)
**依赖包**(PACK):
> ARM.CMSIS.5.5.1.pack
> ARM.CMSIS-FreeRTOS.9.0.0.pack
> ONSemiconductor.RSL10.3.5.285.pack
> ONSemiconductor.RSL10Mesh.1.6.79.pack
> ONSemiconductor.BDK.1.17.3.pack

**前期回顾**:

...
鸽子飞了~~~~

【仓库温湿度自动控制模拟系统】3. RSL10 BLE Mesh 组网初体验
(-----)
...

【keil环境RS10-002GEVB板实现Blinky; 彩蛋:Segger RTT&UART printf】
(https://bbs.eeworld.com.cn/thread-1162784-1-1.html)
【开箱照】
(https://bbs.eeworld.com.cn/thread-1162784-1-1.html)

### 正题

参考文章:***RSL10_firmware_over_the_air_users_guide.pdf***
***RSL10_bootloader_guide.pdf***


> path:"..\ONSemiconductor\RSL10\3.5.285\documentation"

### Step1. 使用RSL10-002GEVB,跑通FOTA



先上一张map图,整个蓝牙固件可以由bootloader + fota + app 三大部分组成,
其中,若想实现手机APP给板子升级app(或者fota+app),那必须存在bootloader+fota这两层。 那我们就一步步实现从0到1.

1.找到bootloader(自己根据自己的安装路径寻找)
> path:"D:\ON Semiconductor\PACK\ONSemiconductor\BDK\1.17.3\Device\RSL10\bootloader_image\rsl10-evk"

这里附上RSL10-002GEVB的BootLoader
2.将bootloader.hex 使用JFlash Lite 工具烧录

3.按下复位键并观察到LED(DIO6)常亮,说明没有找到fota & 应用,这时需要通过uart在bootloader的基础上下载fota & app。

4.打开onsemi IDE,找到如下例程,加载并编译


5.查看RSL10-002GEVB板虚拟串口号

6.拷贝 updater python script工程
如下路径的版本新一点,优先用新版本

> "D:\ON Semiconductor\PACK\ONSemiconductor\RSL10\3.5.285\source\samples\rslx\bootloader\scripts"
7.*在pycharm中新建python工程(其余方法也可以,此处不赘述),并导入上一步骤的文件到工程路径,安装依赖pyserial

8.升级fota到板子
> input: "python updater.py COM10 fota.fota"


在此附上pycharm python工程
9.打开安卓手机APP:RSL10 FOTA并搜索,可以发现名为:Peripheral_HRP_FOTA的device

10.点击Peripheral_HRP_FOTA,后按照图中1-2-3进行操作(其中fota文件需要提前传到安卓手机路径)


至此,这部分内容已经大功告成!

### Step2. 使用RSL10-SENSE-DB-GEVK,跑通FOTA
</br>
#### Q & A
**Q:**RSL10-SENSE-DB-GEVK板尚未预留现成的uart口(虽然可以bootloader可以复用i2c接口为uart),如何实现fota的加载呢?
**A:**可以直接用j-link烧录至少包含bootloader & fota的烧录文件,那就美滋滋啦~

**Q:**去哪找到包含bootloader & fota的烧录文件呢?
**A:**将bootloader 与 fota(或者fota+app)合并就万事大吉喽。

**具体操作:(注意:这里还是先用**RSL10-002GEVB板**和上文附件验证)
1.打开J-Flash并新建工程,并选择RSL10 device

2.打开bootloader.hex(or bin, 地址:0x100000),

3.选择File->Merge data file, 打开fota.fota.bin(注意:此处就是将上文的.fota修改扩展名为.bin)并填入地址位置 102000(地址为:0x102000)


4.然后选择File->Save data file as ....我这里选hex(这个就是至少合并了bootloader & fota的hex啦)
5.至此,使用JFlash Lite 工具烧录刚才生成的hex,即可直接跳到手机APP给蓝牙板升级的步骤啦!

---

言归正传
1.加载例程:Custom Service Firmware with Sleep & FOTA,加载后的工程名:sense_ics_firmware_sleep_fota,编译后生成*sense_ics_firmware_sleep_fota.fota*
2.找到bootloader for Sense board 的bin or hex文件(自己根据自己的安装路径寻找)
> path:"D:\ON Semiconductor\PACK\ONSemiconductor\BDK\1.17.3\Device\RSL10\bootloader_image\rsl10-sense-gevk"

3.按照Step1.中方法合并文件,将合并的hex 使用JFlash Lite 工具烧录
4.按住sense板PB1同时按下reset键,即可进入fota模式,打开手机RSL10 fota APP后可以找到ON FOTA RSL10设备,键入后即可进行正常升级

至此Sense板的fota也大功告成

### Step3. 将自己建立的工程变成fota工程

1. 将工程RTEconfig 文件中的BLE Stack and Kernel取消勾选,勾选Fota

HAL库又要依赖BLE stack,头大,onsemi各种文件强耦合,深度相互依赖,开发起来完全摸不着头脑~


2.拷贝以下路径三个文件(自己按照自己的安装路径和版本灵活匹配)到工程RTE -> Device -> RSL10中
```
D:\ON Semiconductor\PACK\ONSemiconductor\RSL10\3.5.285\lib\Release\fota.bin
D:\ON Semiconductor\PACK\ONSemiconductor\RSL10\3.5.285\lib\Release\libfota.a
D:\ON Semiconductor\PACK\ONSemiconductor\RSL10\3.5.285\source\firmware\fota\tools\mkfotaimg.py
```

附上3个文件step2.zip:

3.替换如下路径2鸽文件到工程RTE -> Device -> RSL10中(存储段配置文件,类似keil下的*.sct文件和启动文件)

```
D:\ON Semiconductor\PACK\ONSemiconductor\RSL10\3.5.285\source\firmware\fota\app\sections.ld
D:\ON Semiconductor\PACK\ONSemiconductor\RSL10\3.5.285\source\firmware\fota\RTE\Device\RSL10\startup_rsl10.S
```

附上2个文件step3.zip:

4.添加如下代码到main.c中用于将fota的版本标识(实际通过__attribute__ ((section(".rodata.boot.version")))放置到map的某段)
```
#include "sys_fota.h"

#define VER_ID "Debug0"
#define VER_MAJOR 1
#define VER_MINOR 0
#define VER_REVISION 0
SYS_FOTA_VERSION(VER_ID, VER_MAJOR, VER_MINOR, VER_REVISION);
```

5.在应用的代码中可以通过事件触发如下代码即可实现fota模式的跳转:

```
Sys_Fota_StartDfu(1); //1:应用需要包含BLE stack 0:应用不包含协议栈
```

6.打开Project -> Properties -> C/C++ Build -> Settings -> Build Steps -> Post-build中填入以下代码来合并fota与app(这部分类似keil下魔法棒菜单 -> user -> after build里的功能):
```
${cross_prefix}objcopy -O binary "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" && "${ProjDirPath}/RTE/Device/RSL10/mkfotaimg.py" -o "${BuildArtifactFileBaseName}.fota" "${ProjDirPath}/RTE/Device/RSL10/fota.bin" "${BuildArtifactFileBaseName}.bin"
```
7.编译工程后发现报`DRAM' overflowed 错误
```
d:/program files (x86)/on semiconductor/ide_v3.3.0.16/arm_tools/bin/../lib/gcc/arm-none-eabi/8.3.1/../../../../arm-none-eabi/bin/ld.exe: step7.elf section `.bss' will not fit in region `DRAM'
d:/program files (x86)/on semiconductor/ide_v3.3.0.16/arm_tools/bin/../lib/gcc/arm-none-eabi/8.3.1/../../../../arm-none-eabi/bin/ld.exe: region `DRAM' overflowed by 1568 bytes
collect2.exe: error: ld returned 1 exit status
make: *** Error 1
"make -j8 all" terminated with exit code 2. Build might be incomplete.
```
8.打开3.中copy进来的sections.ld存储段配置文件,修改成如下配置(由于未使用dsp,所以DRAM_DSP段的配置为0,72K空间都用于DRAM)
```
MEMORY
{
ROM(r) : ORIGIN = 0x00000000, LENGTH = 4K
FLASH (xrw) : ORIGIN = 0x00100000, LENGTH = 380K
PRAM (xrw) : ORIGIN = 0x00200000, LENGTH = 32K

DRAM (xrw) : ORIGIN = 0x20000000, LENGTH = 72K   /* modify 24K -> 72K    */
DRAM_DSP (xrw) : ORIGIN = 0x20006000, LENGTH = 0K/* DRAM + DRAM_DSP = 72K*/
DRAM_BB (xrw) : ORIGIN = 0x20012000, LENGTH = 16K
}
```
9.至此编译完成,可以通过手机给蓝牙板升级,但是发现其中应用中RTT无法使用,同时也有一部分内容出现问题,有空查,今天先到这,肝不动啦~

出这篇帖子初衷是群里的群友们有问到相关问题,简单一两句话不怎么好讲清楚,刚好自己的设计也可以增加这部分功能,于是乎。。。。。。。

soso 发表于 2021-7-12 09:36

<p>辛苦了,确实要少熬夜。多谢分享。</p>
页: [1]
查看完整版本: 【仓库温湿度自动控制模拟系统】9. RSL10 FOTA app的适配