ESP8266 : AOS_OTA_BANK_DUAL
MK3060 : AOS_OTA_BANK_SINGLE
① 下载代码并选择OTA demo程序和开发板
② 登录云端账号获取四元组并开通固件升级服务
③ 根据需要是否开启安全升级功能,如开启获取云端公钥
④ 编译生成不同版本固件,一个低版本,一个高版本
⑤ 将低版本的固件烧录到对应的目标板子,运行demo程序OTA_APP pk dn ds ps
⑥ 待设备上线后将高版本的固件上传到云端
[email protected] : for ota update. 用于OTA升级。 [email protected] : for direct burning into flash memory. 用于flash烧写。 [email protected] : for ota update. 用于OTA升级。 [email protected] : for direct burning into flash memory. 用于flash烧写。
⑦ 云端推送固件,设备端接收固件,并做完整性校验
⑧ 设备端完成固件校验,进入系统升级
⑨ 系统重启后,上报新版本信息到云端
启动LOG
Hello OTA. ota_service_init [010598]<E> SYSINFO_APP_VERSION app-1.5.2-20190328.1742 ota_hal_get_version app-1.5.2-20190328.1742 [010600]<I> .................................................... [010600]<I> ProductKey : a1vuRZ5qR2q [010600]<I> DeviceName : SensorII [010600]<I> DeviceID : a1vuRZ5qR2q.SensorII [010602]<I> .................................................... [010602]<I> Partn erID Buf : ,partner_id=example.demo.partner-id [010604]<I> ModuleID Buf : ,module_id=example.demo.module-id [010604]<I> Guider URL : [010604]<I> Guider SecMode : 2 (TLS + Direct) [010604]<I> Guider Timestamp : 2524608000000 [010604]<I> .................................# ................... [010606]<I> ----------------------------------------- [010608]<I> Host : a1vuRZ5qR2q.iot-as-mqtt.cn-shanghai.aliyuncs.com [010608]<I> Port : 1883 [010608]<I> ClientID : a1vuRZ5qR2q.SensorII|securemode=2,timestamp=2524608000000,signmethod=hmacsha256,gw=0,ext=0,partner_id=example.demo.partner-id,module_id=example.demo.module-id,a=aos-r-2.1.0| [010610]<I> TLS PubKey : 0x7bb45 ('-----BEGIN CERTI ...') [010610]<I> ----------------------------------------- [010612]<I> MQTT init success! [010612]<I> Loading the CA root certificate ... [010616]<I> ok (0 skipped) [010616]<I> Connecting to /a1vuRZ5qR2q.iot-as-mqtt.cn-shanghai.aliyuncs.com/1883... [010660]<I> ok [010660]<I> . Setting up the SSL/TLS structure... [010660]<I> ok [010662]<I> Performing the SSL/TLS handshake... [011114]<I> ok [011114]<I> . Verifying peer X.509 certificate.. [011114]<I> certificate verification result: 0x00 [011194]<I> mqtt connect success! [011198]<E> the network interface info set failed or not set, writen len is 0 [011202]<I> Public name:/ota/device/inform/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"version":"app-1.5.2-20190328.1742"}} [011204]<I> upgrade:/ota/device/upgrade/a1vuRZ5qR2q/SensorII [011206]<I> mqtt subscribe packet sent,topic = /ota/device/upgrade/a1vuRZ5qR2q/SensorII! [011308]<I> ota init success, ver:app-1.5.2-20190328.1742 type:0 [071308]<I> send MQTT ping... [071346]<I> receive ping response! [131308]<I> send MQTT ping... [131346]<I> receive ping response! [191308]<I> send MQTT ping... [191344]<I> receive ping response!
升级LOG
# # [236910]<I> mqtt cb evt:12 {"code":"1000","data":{"size":445830,"sign":"bd3493aca7eb8ba106755861c54509e8","version":"app-2.0.0-20190328.1744","url":"https://iotx-ota.oss-cn-shanghai.aliyuncs.com/ota/9094af2055e93ccbe1e58fd9ad3a3276/cjtsgfb0200003374x6a3xl6o.bin?Expires=1553852902&OSSAccessKeyId=cS8uRRy54RszYWna&Signature=KiCGHiQqKG2Ny6arW16jM2OQnk8%3D","signMethod":"Md5","md5":"bd3493aca7eb8ba106755861c54509e8"},"id":1553766502568,"message":"success"} [237410]<I> ota init off:0x00000000 part:3 len:445830 crc:0x0000 [237412]<I> ota init board ALI_AOS_MK3060 success! [237412]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "0","desc":""}} D: 41 HAL_TCP_Establish() | establish tcp connection with server(host=iotx-ota.oss-cn-shanghai.aliyuncs.com port=80) D: 80 HAL_TCP_Establish() | success to establish tcp, fd=4 [237460]<I> send GET /ota/9094af2055e93ccbe1e58fd9ad3a3276/cjtsgfb0200003374x6a3xl6o.bin?Expires=1553852902&OSSAccessKeyId=cS8uRRy54RszYWna&Signature=KiCGHiQqKG2Ny6arW16jM2OQnk8%3D HTTP/1.1 Accept:*/* User-Agent: Mozilla/5.0 Cache-Control: no-cache Connection: close Host:iotx-ota.oss-cn-shanghai.aliyuncs.com:80 [237464]<I> 304 bytes send. [237834]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "10","desc":""}} [237838]<I> s:45093 512 per:10 [237998]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "15","desc":""}} [238000]<I> s:67109 512 per:15 [238164]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "20","desc":""}} [238166]<I> s:89637 512 per:20 [238314]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "25","desc":""}} [238318]<I> s:111653 512 per:25 [238474]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "30","desc":""}} [238476]<I> s:134181 512 per:30 [238628]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "35","desc":""}} [238630]<I> s:156197 512 per:35 [238798]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "40","desc":""}} [238802]<I> s:178725 512 per:40 [238986]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "45","desc":""}} [238990]<I> s:200741 512 per:45 [239142]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "50","desc":""}} [239144]<I> s:223269 512 per:50 [239282]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "55","desc":""}} [239284]<I> s:245285 512 per:55 [239450]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "60","desc":""}} [239452]<I> s:267813 512 per:60 [239600]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "65","desc":""}} [239602]<I> s:289829 512 per:65 [239774]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "70","desc":""}} [239776]<I> s:312357 512 per:70 [239926]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "75","desc":""}} [239930]<I> s:334373 512 per:75 [240106]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "80","desc":""}} [240108]<I> s:356901 512 per:80 [240264]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "85","desc":""}} [240266]<I> s:379429 512 per:85 [240428]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "90","desc":""}} [240430]<I> s:401445 512 per:90 [240570]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "95","desc":""}} [240572]<I> s:423973 512 per:95 E: 208 HAL_TCP_Read() | connection is closed [240720]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "100","desc":""}} [240724]<I> s:445830 353 per:100 [240724]<I> download finish ret:0. [240726]<I> md5 src=BD3493ACA7EB8BA106755861C54509E8 dst=BD3493ACA7EB8BA106755861C54509E8 [240726]<I> bin s:445830 off:445802 [240726]<I> magic:0xefefefef size:445802 md5:528008882EB85EC42791666ABECFE910 crc16:0xffff [240928]<I> md5 src=528008882EB85EC42791666ABECFE910 dst=528008882EB85EC42791666ABECFE910 [240930]<I> OTA md5 ret:0 [240930]<I> AOS_OTA_BANK_SINGLE [240934]<I> OTA finish dst:0x00000000 src:0x00000000 len:0x00000000, crc:0x523f.
烧写完成启动LOG
[240934]<E> upgrade over err:0 [240934]<I> Public name:/ota/device/progress/a1vuRZ5qR2q/SensorII msg:{"id":0,"params":{"step": "100","desc":""}} uart0 init success 254: swap offset 0x0, index 0 170: swap offset 0x0 170: swap offset 0x10000 170: swap offset 0x20000 170: swap offset 0x30000 170: swap offset 0x40000 170: swap offset 0x50000 170: swap offset 0x60000 170: swap offset 0x70000 170: swap offset 0x80000 170: swap offset 0x90000 170: swap offset 0xa0000 170: swap offset 0xb0000 170: swap offset 0xc0000 170: swap offset 0xd0000 184: update succ! uart0 init success Press key 'w' into 2nd boot cmd, Waiting 100ms ... Bootup flag 0x0, num 0x0 flash txpwr table:0x7 dif g and n20 ID in flash:2 read txpwr tab from flash success DPLL Unlock enter low level! mac fc:ee:e6:17:56:e3 leave low level! app_init finished start-----------hal Welcome to AliOS Things
int32_t hal_flash_write(hal_partition_t pno, uint32_t* poff, const void* buf ,uint32_t buf_size) { uint32_t start_addr, len, left_off; int32_t ret = 0; uint8_t *buffer = NULL; hal_logic_partition_t *partition_info; partition_info = hal_flash_get_info( pno ); start_addr = partition_info->partition_start_addr + *poff; left_off = start_addr % FLASH_ALIGN; len = ((buf_size + left_off) + ~FLASH_ALIGN_MASK) & FLASH_ALIGN_MASK; if (len > buf_size || left_off > 0) { buffer = (uint8_t *)aos_malloc(len); if (!buffer) return -1; memset(buffer, 0xff, len); #ifdef ESP8266FLASHBUG //BUG : 4字节对齐 if(left_off>0){ vPortETSIntrLock(); spi_flash_read(start_addr - left_off, buffer, 4); vPortETSIntrUnlock(); } #endif memcpy(buffer + left_off, buf, buf_size); vPortETSIntrLock(); ret = spi_flash_write(start_addr - left_off, (uint32_t *)buffer, len); vPortETSIntrUnlock(); aos_free(buffer); } else { vPortETSIntrLock(); ret = spi_flash_write(start_addr, (uint32_t *)buf, len); vPortETSIntrUnlock(); } *poff += buf_size; return ret; }