一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

app如何通過多種固件下載器實(shí)現(xiàn)OTA升級

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 2020-06-24 16:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言:前邊講過stm32通用bootloader的實(shí)現(xiàn)方法,沒有看過的,可以參考這一篇文章:STM32通用Bootloader——FOTA,這次將在上篇bootloader的基礎(chǔ)上,介紹app如何通過多種固件下載器實(shí)現(xiàn)OTA升級。

此項(xiàng)目硬件使用的是STM32F429開發(fā)板,代碼全部使用RT-Thread Studio搭積木的方式實(shí)現(xiàn),僅僅改動了幾行代碼,開發(fā)效率非常高。此項(xiàng)目的地址:https://gitee.com/Aladdin-Wang/RT-FOTA-STM32L431.git

使用到的軟件包和組件:

在這里插入圖片描述

1.準(zhǔn)備工作

1.1 新建工程


由于此項(xiàng)目使用的esp8266需要一個串口,我使用的是uart2,所以需要還需要配置uart2:


增加uart接收緩沖區(qū)大?。?/p>

1.2 打開fal和at device軟件包

配置fal軟件包


配置sfud組件


配置SPI

配置fal_cfg.h

1#ifndef_FAL_CFG_H_ 2#define_FAL_CFG_H_ 3 4#include 5#include 6 7#defineFLASH_SIZE_GRANULARITY_16K(4*16*1024) 8#defineFLASH_SIZE_GRANULARITY_64K(64*1024) 9#defineFLASH_SIZE_GRANULARITY_128K(7*128*1024) 10 11#defineSTM32_FLASH_START_ADRESS_16KSTM32_FLASH_START_ADRESS 12#defineSTM32_FLASH_START_ADRESS_64K(STM32_FLASH_START_ADRESS_16K+FLASH_SIZE_GRANULARITY_16K) 13#defineSTM32_FLASH_START_ADRESS_128K(STM32_FLASH_START_ADRESS_64K+FLASH_SIZE_GRANULARITY_64K) 14/*=====================FlashdeviceConfiguration=========================*/ 15externconststructfal_flash_devstm32_onchip_flash_16k; 16externconststructfal_flash_devstm32_onchip_flash_64k; 17externconststructfal_flash_devstm32_onchip_flash_128k; 18externstructfal_flash_devnor_flash0; 19 20/*flashdevicetable*/ 21#defineFAL_FLASH_DEV_TABLE 22{ 23&stm32_onchip_flash_16k, 24&stm32_onchip_flash_64k, 25&stm32_onchip_flash_128k, 26&nor_flash0, 27} 28/*======================PartitionConfiguration==========================*/ 29#ifdefFAL_PART_HAS_TABLE_CFG 30/*partitiontable*/ 31#defineFAL_PART_TABLE 32{ 33{FAL_PART_MAGIC_WROD,"bootloader","onchip_flash_16k",0,FLASH_SIZE_GRANULARITY_16K,0}, 34{FAL_PART_MAGIC_WROD,"param","onchip_flash_64k",0,FLASH_SIZE_GRANULARITY_64K,0}, 35{FAL_PART_MAGIC_WROD,"app","onchip_flash_128k",0,FLASH_SIZE_GRANULARITY_128K,0}, 36{FAL_PART_MAGIC_WROD,"ef","W25Q128",0,1024*1024,0}, 37{FAL_PART_MAGIC_WROD,"download","W25Q128",1024*1024,512*1024,0}, 38{FAL_PART_MAGIC_WROD,"factory","W25Q128",(1024+512)*1024,512*1024,0}, 39} 40#endif/*FAL_PART_HAS_TABLE_CFG*/ 41 42#endif/*_FAL_CFG_H_*/

初始化spi flash和fal軟件包

1#include 2#include"spi_flash.h" 3#include"spi_flash_sfud.h" 4#include"drv_spi.h" 5 6#ifdefined(RT_USING_SFUD) 7staticintrt_hw_spi_flash_init(void) 8{ 9__HAL_RCC_GPIOF_CLK_ENABLE(); 10rt_hw_spi_device_attach("spi5","spi50",GPIOF,GPIO_PIN_6); 11 12if(RT_NULL==rt_sfud_flash_probe("W25Q128","spi50")) 13{ 14return-RT_ERROR; 15} 16 17returnRT_EOK; 18} 19INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init); 20#endif1intfs_init(void) 2{ 3/*partitioninitialized*/ 4fal_init(); 5return0; 6} 7INIT_ENV_EXPORT(fs_init);

配置at device軟件包

1.3 配置中斷重定向

1/** 2*Functionota_app_vtor_reconfig 3*DescriptionSetVectorTablebaselocationtothestartaddrofapp(RT_APP_PART_ADDR). 4*/ 5staticintota_app_vtor_reconfig(void) 6{ 7#defineNVIC_VTOR_MASK0x3FFFFF80 8/*SettheVectorTablebaselocationbyuserapplicationfirmwaredefinition*/ 9SCB->VTOR=0x8020000&NVIC_VTOR_MASK; 10 11return0; 12} 13INIT_BOARD_EXPORT(ota_app_vtor_reconfig);


燒錄bootloader:
bootloader的制作方法請參考官方的教程https://www.rt-thread.org/document/site/application-note/system/rtboot/an0028-rtboot/或者STM32通用Bootloader——FOTA

2.阿里云物聯(lián)網(wǎng)平臺OTA

注冊 LinkPlatform 平臺


創(chuàng)建產(chǎn)品


產(chǎn)品詳情:


添加設(shè)備


添加自定義Topic


配置ali iotkit軟件包
將剛才新建的阿里云設(shè)備信息填寫到配置信息里:


將軟件包的示例mqtt-example.c和ota_mqtt-example.c拷貝到applications目錄備用


配置mbedtls軟件包


更改ota_mqtt-example.c中的部分代碼:

1staticint_ota_mqtt_client(void) 2{ 3#defineOTA_BUF_LEN(16385) 4#defineDEFAULT_DOWNLOAD_PART"download" 5intrc=0,ota_over=0; 6void*pclient=NULL,*h_ota=NULL; 7iotx_conn_info_ptpconn_info; 8iotx_mqtt_param_tmqtt_params; 9 10//FILE*fp; 11staticcharbuf_ota[OTA_BUF_LEN]; 12conststructfal_partition*dl_part=RT_NULL; 13 14//if(NULL==(fp=fopen("ota.bin","wb+"))){ 15//EXAMPLE_TRACE("openfilefailed"); 16//gotodo_exit; 17//} 18 19/**port; 36mqtt_params.host=pconn_info->host_name; 37mqtt_params.client_id=pconn_info->client_id; 38mqtt_params.username=pconn_info->username; 39mqtt_params.password=pconn_info->password; 40mqtt_params.pub_key=pconn_info->pub_key; 41 42mqtt_params.request_timeout_ms=2000; 43mqtt_params.clean_session=0; 44mqtt_params.keepalive_interval_ms=60000; 45mqtt_params.read_buf_size=OTA_MQTT_MSGLEN; 46mqtt_params.write_buf_size=OTA_MQTT_MSGLEN; 47 48mqtt_params.handle_event.h_fp=event_handle; 49mqtt_params.handle_event.pcontext=NULL; 50 51/*ConstructaMQTTclientwithspecifyparameter*/ 52pclient=IOT_MQTT_Construct(&mqtt_params); 53if(NULL==pclient){ 54EXAMPLE_TRACE("MQTTconstructfailed"); 55rc=-1; 56gotodo_exit; 57} 58h_ota=IOT_OTA_Init(g_product_key,g_device_name,pclient); 59if(NULL==h_ota){ 60rc=-1; 61EXAMPLE_TRACE("initializeOTAfailed"); 62gotodo_exit; 63} 64 65 66do{ 67uint32_tfirmware_valid; 68 69EXAMPLE_TRACE("waitotaupgradecommand...."); 70 71/*handletheMQTTpacketreceivedfromTCPorSSLconnection*/ 72IOT_MQTT_Yield(pclient,200); 73 74if(IOT_OTA_IsFetching(h_ota)){ 75uint32_tlast_percent=0,percent=0; 76charmd5sum[33]; 77charversion[128]={0}; 78uint32_tlen,size_downloaded,size_file; 79IOT_OTA_Ioctl(h_ota,IOT_OTAG_FILE_SIZE,&size_file,4); 80/*Getdownloadpartitioninformationanderasedownloadpartitiondata*/ 81if((dl_part=fal_partition_find(DEFAULT_DOWNLOAD_PART))==RT_NULL) 82{ 83LOG_E("Firmwaredownloadfailed!Partition(%s)finderror!","download"); 84rc=-1; 85gotodo_exit; 86} 87 88LOG_I("Starteraseflash(%s)partition!",dl_part->name); 89 90if(fal_partition_erase(dl_part,0,size_file)name); 93rc=-1; 94gotodo_exit; 95} 96LOG_I("Eraseflash(%s)partitionsuccess!",dl_part->name); 97 98rt_uint32_tcontent_pos=0,content_write_sz; 99 100do{ 101 102len=IOT_OTA_FetchYield(h_ota,buf_ota,OTA_BUF_LEN,1); 103if(len>0){ 104content_write_sz=fal_partition_write(dl_part,content_pos,(uint8_t*)buf_ota,len); 105if(content_write_sz!=len) 106{ 107LOG_I("WriteOTAdatatofilefailed"); 108 109IOT_OTA_ReportProgress(h_ota,IOT_OTAP_BURN_FAILED,RT_NULL); 110 111gotodo_exit; 112} 113else 114{ 115content_pos=content_pos+len; 116LOG_I("receive%dbytes,totalrecieve:%dbytes",content_pos,size_file); 117} 118}else{ 119IOT_OTA_ReportProgress(h_ota,IOT_OTAP_FETCH_FAILED,NULL); 120EXAMPLE_TRACE("otafetchfail"); 121} 122 123/*getOTAinformation*/ 124IOT_OTA_Ioctl(h_ota,IOT_OTAG_FETCHED_SIZE,&size_downloaded,4); 125IOT_OTA_Ioctl(h_ota,IOT_OTAG_FILE_SIZE,&size_file,4); 126 127last_percent=percent; 128percent=(size_downloaded*100)/size_file; 129if(percent-last_percent>0){ 130IOT_OTA_ReportProgress(h_ota,percent,NULL); 131} 132IOT_MQTT_Yield(pclient,100); 133}while(!IOT_OTA_IsFetchFinish(h_ota)); 134 135IOT_OTA_Ioctl(h_ota,IOT_OTAG_MD5SUM,md5sum,33); 136IOT_OTA_Ioctl(h_ota,IOT_OTAG_VERSION,version,128); 137IOT_OTA_Ioctl(h_ota,IOT_OTAG_CHECK_FIRMWARE,&firmware_valid,4); 138if(0==firmware_valid){ 139EXAMPLE_TRACE("Thefirmwareisinvalid"); 140}else{ 141EXAMPLE_TRACE("Thefirmwareisvalid"); 142IOT_OTA_ReportVersion(h_ota,version); 143 144LOG_I("Downloadfirmwaretoflashsuccess."); 145LOG_I("Systemnowwillrestart..."); 146 147HAL_SleepMs(1000); 148 149/*Resetthedevice,Startnewfirmware*/ 150externvoidrt_hw_cpu_reset(void); 151rt_hw_cpu_reset(); 152} 153 154ota_over=1; 155} 156HAL_SleepMs(2000); 157}while(!ota_over); 158 159HAL_SleepMs(1000); 160 161do_exit: 162 163if(NULL!=h_ota){ 164IOT_OTA_Deinit(h_ota); 165} 166 167if(NULL!=pclient){ 168IOT_MQTT_Destroy(&pclient); 169} 170 171returnrc; 172}

編譯工程,將bin文件上傳到阿里云:

阿里云不支持rbl格式的文件,直接將rt_ota_packaging_tool生成的rbl文件后綴改為bin,上傳即可。


最后使用ali_ota_sample命令升級:

3.HTTP OTA和Ymodem OTA

配置ota_downloader軟件包


如果暫時沒有自己的服務(wù)器,可以使用MyWebServer進(jìn)行測試:


配置完MyWebServer,可以打開瀏覽器輸入IP地址查看:

使用http_ota命令進(jìn)行http_ota升級:


使用ymodem_ota命令進(jìn)行ymodem_ota升級:

4.不使用APP進(jìn)行升級

rt-fota集成了ymodem_ota,上電短按恢復(fù)出廠設(shè)置按鈕即可進(jìn)入rt-fota命令行模式,通過ymodem_ota命令即可進(jìn)行升級:

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • OTA
    OTA
    +關(guān)注

    關(guān)注

    7

    文章

    611

    瀏覽量

    36532
  • 阿里云
    +關(guān)注

    關(guān)注

    3

    文章

    1009

    瀏覽量

    44118
  • 物聯(lián)網(wǎng)平臺

    關(guān)注

    7

    文章

    101

    瀏覽量

    21315

原文標(biāo)題:零代碼玩轉(zhuǎn)OTA升級

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    詳解藍(lán)牙空中升級(OTA)原理與步驟

    如何實(shí)現(xiàn)Bluetooth LE OTA?什么叫DFU?如何通過UART實(shí)現(xiàn)固件升級?又如何
    的頭像 發(fā)表于 07-04 09:56 ?398次閱讀
    詳解藍(lán)牙空中<b class='flag-5'>升級</b>(<b class='flag-5'>OTA</b>)原理與步驟

    瑞薩電子MCU無感OTA升級功能介紹

    在工業(yè)控制、電機(jī)驅(qū)動乃至物聯(lián)網(wǎng)邊緣節(jié)點(diǎn)中,固件在線升級OTA)已成為產(chǎn)品生命周期管理的標(biāo)配。然而傳統(tǒng)OTA往往伴隨停機(jī)、風(fēng)險與低效。瑞薩電子MCU中的Dual?Bank閃存架構(gòu)為工程
    的頭像 發(fā)表于 05-15 14:36 ?679次閱讀
    瑞薩電子MCU無感<b class='flag-5'>OTA</b><b class='flag-5'>升級</b>功能介紹

    有沒有大神使用cubeMX生成初始代碼開發(fā)實(shí)現(xiàn)通過USB(HID)進(jìn)行OTA升級功能的?

    求助,有沒有大神使用cubeMX生成初始代碼開發(fā)實(shí)現(xiàn)通過USB(HID)進(jìn)行OTA升級功能的
    發(fā)表于 04-22 13:35

    RK3568開發(fā)板OTA升級

    OTA(Over-The-Air)升級作為一種無損失的系統(tǒng)升級方式,能夠遠(yuǎn)程將新功能部署到產(chǎn)品上,極大地提高了設(shè)備的可維護(hù)性和可擴(kuò)展性。除了通過網(wǎng)絡(luò)直接
    的頭像 發(fā)表于 04-21 14:32 ?726次閱讀
    RK3568開發(fā)板<b class='flag-5'>OTA</b><b class='flag-5'>升級</b>

    如何使用IFX ePower BootStrapLoader工具通過lin通信升級固件?

    如何使用 IFX ePower BootStrapLoader 工具通過 lin 通信升級我的固件
    發(fā)表于 04-18 06:56

    一文解鎖OTA遠(yuǎn)程升級方案!基于RK3562全國產(chǎn)平臺

    在設(shè)備維護(hù)成本高、用戶體驗(yàn)難提升的雙重難題下,OTA(Over-the-Air)空間下載技術(shù)的出現(xiàn),無疑成為破解困境的“金鑰匙”,它是一種通過無線網(wǎng)絡(luò)實(shí)現(xiàn)設(shè)備遠(yuǎn)程
    的頭像 發(fā)表于 04-07 10:15 ?391次閱讀
    一文解鎖<b class='flag-5'>OTA</b>遠(yuǎn)程<b class='flag-5'>升級</b>方案!基于RK3562全國產(chǎn)平臺

    淺談車規(guī)MCU (MGEQ1C064) OTA升級

    upgrade)即空中下載技術(shù),簡單來說,是通過外部方式(有線或無線)對產(chǎn)品進(jìn)行更新,而不是傳統(tǒng)的編程刷入固件的方式。 隨著智能網(wǎng)聯(lián)汽車技術(shù)的飛速發(fā)展,
    發(fā)表于 03-04 12:52

    OTA軟件升級管理系統(tǒng)

    OTA(Over-the-Air Technology,空中下載技術(shù))是通過空中下載的方式對車輛中的軟件進(jìn)行遠(yuǎn)程升級。經(jīng)緯恒潤
    的頭像 發(fā)表于 01-13 09:39 ?725次閱讀
    <b class='flag-5'>OTA</b>軟件<b class='flag-5'>升級</b>管理系統(tǒng)

    OTA升級】無需數(shù)據(jù)線,一條命令即可完成固件升級!

    OTA無線升級過程視頻演示:OTA介紹OTA(Over-The-Air,空中升級)是一種通過無線
    的頭像 發(fā)表于 12-11 01:00 ?3740次閱讀
    【<b class='flag-5'>OTA</b><b class='flag-5'>升級</b>】無需數(shù)據(jù)線,一條命令即可完成<b class='flag-5'>固件</b><b class='flag-5'>升級</b>!

    OTA無線更新技術(shù):一鍵升級系統(tǒng),隨時暢享FLIR最新技術(shù)!

    站在FLIR技術(shù)前沿,享受最新功能帶來的便捷與高效! 1先進(jìn)的OTA技術(shù) OTA(Over-the-Air)技術(shù)能讓您的FLIR熱像儀無線接收最新功能和固件更新。只需連接Wi-Fi,熱像儀就能自動查找并安裝新功能、安全補(bǔ)丁和
    的頭像 發(fā)表于 12-03 15:34 ?692次閱讀
    <b class='flag-5'>OTA</b>無線更新技術(shù):一鍵<b class='flag-5'>升級</b>系統(tǒng),隨時暢享FLIR最新技術(shù)!

    物聯(lián)網(wǎng)中的Fota是什么,如何使用HTTP來給設(shè)備升級

    一 概述 FOTA(Firmware Over-The-Air)移動終端的空中下載軟件升級,指通過云端升級技術(shù),為具有連網(wǎng)功能的設(shè)備提供固件
    的頭像 發(fā)表于 09-25 14:35 ?1611次閱讀
    物聯(lián)網(wǎng)中的Fota是什么,如何使用HTTP來給設(shè)備<b class='flag-5'>升級</b>

    【xG24 Matter開發(fā)套件試用體驗(yàn)】BLE OTA調(diào)試

    是Device Firmware Upgrade,可以通過藍(lán)牙無線升級芯片固件。 先在程序中加入版本打印,分別編譯一個V1.0和V1.1版本的程序,用來測試驗(yàn)證ota
    發(fā)表于 08-29 18:26

    S3N8R16工程代碼里面只要調(diào)用了wifi、藍(lán)牙、mqtt等相關(guān)接口,編譯出來的固件拿去ota升級升級不了,為什么?

    碰到個很奇怪的現(xiàn)象,我的工程代碼里面只要調(diào)用了wifi、藍(lán)牙、mqtt等相關(guān)接口,編譯出來的固件拿去ota升級升級不了,沒有調(diào)用就能正常升級
    發(fā)表于 07-19 07:31

    在增強(qiáng)模式下引導(dǎo)加載程序時,OTA升級失敗了,為什么?

    我注意到,當(dāng)我在增強(qiáng)模式下重新啟動以在 0x81000 時手動啟動 user2 固件,然后運(yùn)行 OTA 升級升級 user1,它看起來像開始升級
    發(fā)表于 07-18 07:12

    請問使用ymodem_ota時如何更換串口?

    現(xiàn)在使用串口1可以正常使用ymodem_ota進(jìn)行固件升級,但是現(xiàn)在項(xiàng)目需要使用串口1來進(jìn)行其他作用,求怎么把串口1更改為串口2進(jìn)行ota升級
    發(fā)表于 07-15 06:09