机智云代码移植_机智云OTA移植 (STM32F030)

这篇博客介绍了如何在STM32F030上移植并实现机智云的OTA更新功能。主要内容包括处理更新数据块、MD5校验以及更新标志的设置。在数据接收后,程序会将数据写入备份区,并进行MD5校验。如果最后一个数据块的MD5匹配失败,更新将失败;反之,则标记更新成功并重启MCU进行新的固件应用。
摘要由CSDN通过智能技术生成

/**

* @brief Pro_W2D_UpdateDataHandle

* update Piece Handle , Judge Last Piece

* @param[in] indata : Piece Data

* @param[in] dataLen : Piece Length

* @param[in] formatType : Piece Data Format

* @param[out]

* @return 0,Handle Success

* -1,Input Param Illegal

* -2,Last Piece , MD5 Check Faild

**/int8_t Pro_W2D_UpdateDataHandle(uint8_t*inData , uint32_t dataLen , otaDataType formatType)

{

uint16_t piecenum= 0;

uint16_t piececount= 0;

uint32_t tempWFlashAddr= 0;

updataPieceData_TypeDef pieceData;

uint8_t md5_calc[SSL_MAX_LEN];//MD5 Calculate Fact

if(NULL ==inData)

{return -1;

}

memcpy((uint8_t*)&pieceData, inData, dataLen);

piecenum=exchangeBytes(pieceData.piecenum);

piececount=exchangeBytes(pieceData.piececount);

GIZWITS_LOG("******piecenum = %d , piececount = %d, pieceSize = %d******** \r\n",piecenum,piececount,dataLen - 4);

GIZWITS_LOG("\r\n write data to bkt\r\n");

ef_write_data_to_bak(pieceData.piececontent,dataLen- 4,&cur_size,romUpdate.updateFileSize);

GIZWITS_LOG("\r\n write data ok cur_size =%d -- %d \r\n",cur_size,romUpdate.updateFileSize);//tempWFlashAddr = SYS_APP_BAK_SAVE_ADDR_BASE + (piecenum-1) * PIECE_MAX_LEN;//wFlashData((uint8_t *)pieceData.piececontent , dataLen - 4, tempWFlashAddr);

GAgent_MD5Update(&romUpdate.ctx, (uint8_t *)pieceData.piececontent, dataLen - 4);/*updata package data ,ack*/

if(piecenum ==piececount)

{

memset(md5_calc,0,SSL_MAX_LEN);

GAgent_MD5Final(&romUpdate.ctx, md5_calc);

GIZWITS_LOG("MD5 Calculate Success , Will Check The MD5 ..\n");if(0 !=memcmp(romUpdate.update_param.ssl_data, md5_calc, SSL_MAX_LEN))

{

GIZWITS_LOG("Md5_Cacl Check Faild ,MCU OTA Faild\r\n");

#ifdef PROTOCOL_DEBUG

GIZWITS_LOG("Calc MD5:");for(uint16_t i=0; i

{

GIZWITS_LOG("%02x", md5_calc[i]);

}

GIZWITS_LOG("\r\n");#endif#ifdef PROTOCOL_DEBUG

GIZWITS_LOG("SSL MD5:");for(uint16_t i=0; i

{

GIZWITS_LOG("%02x", romUpdate.update_param.ssl_data[i]);

}

GIZWITS_LOG("\r\n");#endifmemset((uint8_t*)&romUpdate.update_param,0,sizeof(updateParamSave_t));return -2;

}else{/*OTA成功*/GIZWITS_LOG("MD5 Check Success ,Storage ROM Success , Write Update Flag\n");//flash_erase(sizeof(updateParamSave_t) , UPDATE_PARAM_SAVE_ADDR_BASE);

romUpdate.update_param.rom_statue= 0xEEEE;*((unsigned char*)(0x200000ff)) = 0xAA; /*传升级标志*/

*((size_t*)(0x200000f0)) = romUpdate.updateFileSize; /*传升级长度*/

//wFlashData((uint8_t *)&romUpdate.update_param, sizeof(updateParamSave_t), UPDATE_PARAM_SAVE_ADDR_BASE);//romUpdate.update_param.rom_statue = 0x1234;//printf("\n\romUpdate.update_param.rom_statue = %04X \r\n\n",romUpdate.update_param.rom_statue);//memset((uint8_t *)&romUpdate, 0 , sizeof(romUpdate));//rFlashData((uint8_t *)&romUpdate, sizeof(romUpdate), UPDATE_PARAM_SAVE_ADDR_BASE);//printf("\n\romUpdate.update_param.rom_statue = %04X \r\n\n",romUpdate.update_param.rom_statue);

GIZWITS_LOG("System Will Restart... \n");/****************************MCU RESTART****************************/mcuRestart();/******************************************************************************/

//last package , updata ok//MD5 checkout :Failed clear updata,Success , write flash ,begin updata

}

}return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值