概述
RTOS设备如何快速实现OTA升级
第一章快速接入OTA平台
文章目录
- 前言
- 一、集成前准备
- 1.1 RTOS示例包下载
- 1.2 RTOS示例包介绍
- 1.3 文件目录介绍
- 二、详细移植过程
- 2.1 文件拷贝
- 2.2 APP移植
- 2.3 头文件添加
- 2.4 main函数添加
- 2.5 其他函数添加
- 2.6 关键宏定义配置
- 2.7 编译SDK
前言
将设备快速接入OTA平台后,第二步需要专注于设备端,如何集成OTA升级所需的SDK,使设备具备OTA升级能力。
本系列文章将使用STM32F7开发板和乐鑫ESP8266的Wi-Fi模块来演示整个OTA升级流程包含SDK的移植和验证。
一、集成前准备
1.1 RTOS示例包下载
集成前需要至艾拉比文档中心下载RTOS示例包,下载完后,查看RTOS接入指南,大致了解详情。
1.2 RTOS示例包介绍
RTOS SDK主要是实现设备的注册、版本检测、升级包下载、升级结果上报等功能,完成设备端OTA能力的搭建。下载好zip包后,打开,文件主要如下所示:
1.3 文件目录介绍
SDK文件目录 | 结构说明 |
---|---|
sdk/Abup | 艾拉比代码主目录 |
sdk/Abup/AT_DEIVCE | 通信模块适配文件目录 |
sdk/Abup/Inc | 头文件目录 |
sdk/Abup/Lib | 库文件目录 |
sdk/Abup/Src | 接入云平台相关功能文件目录 |
sdk/Abup/doc | 移植说明帮助文档 |
sdk/STM32/STM32F7/AbupDrivers | 与芯片相关的Flash驱动文件 |
sdk/STM32F7691-Discovery/Abup | 项目配信息文件 |
二、详细移植过程
2.1 文件拷贝
打开下载的zip包,解压缩后,将压缩包中Abup相关的文件拷贝到对应工程目录下,拷贝整个文件夹。
打开STM32——STM32F7复制其中的AbupDrivers文件夹
2.2 APP移植
打开KEIL工程,在KEIL工程新增如下几个目录。
目录创建完之后,将zip包中对应的src文件全部添加到KEIL项目新增的几个目录下面。
2.3 头文件添加
文件添加完成后,接下来添加对应的头文件路径。将以下几个头文件目录加入项目工程的头文件目录。
…AbupInc
…AbupInc
…AbupIncApp
…AbupAT_DEVICE
…STM32STM32F7AbupDriversInc
2.4 main函数添加
打开main.c添加程序的入口。首先在main函数中添加 AbupStartTask 调用,如下图所示:
代码如下(示例):
int main(void)
{
…
//ABUP UC任务入口 带操作系统的客户创建个任务把此app作为一个任务调用
AbupStartTask(NULL);
/* Cannot link diskio driver */
}
2.5 其他函数添加
代码如下(示例):Ticks函数
//Ticks函数
void Abup_IncTick(void)
{
abup_tick += abup_timer_dec_offset();
#ifdef ABUP_TIMERS
AbupRtcTimer();
#endif
#if !defined(ABUP_BOOTLOADER)&&!defined(ABUP_RTTHREAD)&&!defined(ABUP_FREERTOS)
AbupUartRecved();
#endif
}
代码如下(示例):结束数据处理函数
//结束数据处理函数
void abup_uart_received_data(void* ptr)
{
abup_uarts_struct* uarts = (abup_uarts_struct*)ptr;
abup_uart_ptr_t uart;
if(&abup_uart[ABUP_UART_DEBUG] == uarts->uart)
{
uart.buf = uarts->uart->rx;
uart.size = uarts->uart->rxsize;
abup_atp_debug_parse_cmd(&uart);
}
else if(&abup_uart[ABUP_UART_MODULE] == uarts->uart)
{
uart.buf = uarts->uart->rx;
uart.size = uarts->uart->rxsize;
if(abup_app_msg_cb != NULL)
{
abup_custom_received_data(&uart);
}
}
abup_memset(uarts->uart->rx,0,uarts->uart->rxlen);
uarts->uart->rxsize = 0;
}
代码如下(示例):零件初始化 初始化零件编号
//零件初始化 初始化零件编号
void abup_init_parts_info(abup_5_0_struct* parts_info)
{
abup_int j;
for(j=0; j < ABUP_PARTS_NUM; j++)
{
parts_info->parts[j].dstPkg.url = http_5_0_data_url[j<<1];
parts_info->parts[j].srcPkg.url = http_5_0_data_url[(j<<1) + 1];
if(abup_strlen(parts_info->parts[j].partNumber) == 0 )
{
if(j ==0)
{
abup_snprintf(parts_info->parts[j].partNumber,ABUP_PART_NNUBER_LEN,"%x",ABUP_PART_NNUBER);
abup_snprintf(parts_info->parts[j].partHsn,ABUP_PART_HSN_LEN,"%x",ABUP_PART_SVER);
abup_memcpy(parts_info->parts[j].partSVer,"1.0",abup_strlen("1.0"));
abup_memcpy(parts_info->parts[j].productDate,"2020-02-01",abup_strlen("2020-02-01"));
}
else if(j==1)
{
……
}
}
}
}
2.6 关键宏定义配置
abup_config.h 以下是FLASH配置,设备的相关信息的说明,根据实际项目信息填写。
宏名称 | 值定义 | 说明 |
---|---|---|
ABUP_DEFAULT_SECTOR_SIZE | 0x00040000 | 单个sector大小,根据实际配置 |
ABUP_FLASH_BASE_ADDR | 0x08000000 | FLASH基础地址,根据实际配置 |
ABUP_FLASH_BASE_END | 0x08200000 | FLASH结束地址,根据实际配置 |
ABUP_APP_SIZE | 0x00040000 | APP大小,根据实际配置 |
ABUP_UPDATE_ADDR | 0x08040000 | 升级包数据存储的起始地址,包括“升级包 +升级过程信息+备份数据” |
ABUP_UPDATE_SIZE | 0x001C0000 | 分配给存储升级包数据用的 flash 字节大小 |
ADUPS_FOTA_SERVICE_PRODUCT_ID | “1659940503” | PRODUCT_ID根据后台服务器配置填写 |
ADUPS_FOTA_SERVICE_PRODUCT_SEC | “e75d98169c9242f5a9316b30f6d05f52” | PRODUCT_SEC根据后台服务器配置填写 |
ABUP_FIRMWARE_VERSION | “1.0” | 固件版本号 |
ABUP_DEFAULT_SEGMENT_SIZE_INDEX | ABUP_SEGMENT_SIZE_4K_INDEX | 下载中单条数据传输最大数据长度 |
ABUP_FILE | 升级包存储为文件系统时必须定义,FLASH时不定义 | |
ABUP_PARTS_NUM | 3 | 支持升级零件数 |
其中需要填写的Product ID、Product secret为在艾拉比物联网OTA平台创建时生成的。
每个零件的零件编号也必须在config.h里面进行一一配置,和平台添加的零件编号、零件版本保持一致。
2.7 编译SDK
配置好产品和零件信息后,进行编译,编译通过后,设备端的SDK移植就完成了。后续需要升级,需要在艾拉比物联网OTA平台进行升级任务的配置,详情请查看part3部分。
最后
以上就是和谐人生为你收集整理的RTOS设备如何快速实现OTA升级--设备如何集成SDK前言一、集成前准备二、详细移植过程的全部内容,希望文章能够帮你解决RTOS设备如何快速实现OTA升级--设备如何集成SDK前言一、集成前准备二、详细移植过程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复