【平台实例】RTOS设备如何快速实现OTA升级2--设备如何集成SDK

RTOS设备如何快速实现OTA升级
第一章快速接入OTA平台



前言

将设备快速接入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 头文件添加

文件添加完成后,接下来添加对应的头文件路径。将以下几个头文件目录加入项目工程的头文件目录。
…\Abup\Inc
…\Abup\Inc
…\Abup\Inc\App
…\Abup\AT_DEVICE
…\STM32\STM32F7\AbupDrivers\Inc

在这里插入图片描述

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_SIZE0x00040000单个sector大小,根据实际配置
ABUP_FLASH_BASE_ADDR0x08000000FLASH基础地址,根据实际配置
ABUP_FLASH_BASE_END0x08200000FLASH结束地址,根据实际配置
ABUP_APP_SIZE0x00040000APP大小,根据实际配置
ABUP_UPDATE_ADDR0x08040000升级包数据存储的起始地址,包括“升级包 +升级过程信息+备份数据”
ABUP_UPDATE_SIZE0x001C0000分配给存储升级包数据用的 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_INDEXABUP_SEGMENT_SIZE_4K_INDEX下载中单条数据传输最大数据长度
ABUP_FILE升级包存储为文件系统时必须定义,FLASH时不定义
ABUP_PARTS_NUM3支持升级零件数

其中需要填写的Product ID、Product secret为在艾拉比物联网OTA平台创建时生成的。
在这里插入图片描述
每个零件的零件编号也必须在config.h里面进行一一配置,和平台添加的零件编号、零件版本保持一致。
在这里插入图片描述

2.7 编译SDK

配置好产品和零件信息后,进行编译,编译通过后,设备端的SDK移植就完成了。后续需要升级,需要在艾拉比物联网OTA平台进行升级任务的配置,详情请查看part3部分。

若对我们的方案感兴趣,想要更加深入了解,可直接访问艾拉比官网,联系我们;或者直接注册,免费试用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值