微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > OTA升级问题!

OTA升级问题!

时间:12-23 整理:3721RD 点击:

1、在pc上用ota console显示升级100% complete,但是client却没有重启?

经过调试,client端到server端的zclOTA_SendUpgradeEndReq( &(pInMsg->msg->srcAddr), &req )请求没有被触发,或者触发了但是server端没有收到,导致后续的一系列过程(如ZCL_OTA_DL_COMPLETE_CALLBACK事件)中断;

zclOTA_ProcessImageData函数中有这样一个判断来置位zclOTA_ImageUpgradeStatus ,从而使client端发送zclOTA_SendUpgradeEndReq( &(pInMsg->msg->srcAddr), &req )请求道server端


    if ((++zclOTA_FileOffset) >= zclOTA_DownloadedImageSize)
    {
      zclOTA_ImageUpgradeStatus = OTA_STATUS_COMPLETE;

调试后发现zclOTA_FileOffset等于zclOTA_DownloadedImageSize-1,但是问题的根源没办法找到。

我修改    if ((++zclOTA_FileOffset) >= zclOTA_DownloadedImageSize-1),是可以升级了,但是我想这并不是合理的办法

2、使用的SampleSwitchOta例程,默认的是片外flash吗,如果要使用片内flash应该怎样修改呢?

3、通过1的方法勉强可以实现下载功能,但是速度上很慢,怎样进行优化呢,或者,有没有相关文档呢?

期待您的回复,非常感谢! 

跟了一下代码,确定例程默认使用的是片外扩展的flash

#define HAL_OTA_XNV_IS_INT         TRUE

从代码上看,修改上面的宏为TRUE就可以变为片内flash的OTA

不过,从下面来看

#define HAL_OTA_DL_MAX (0x40000 - ((HAL_NV_PAGE_CNT+HAL_OTA_BOOT_PG_CNT)*HAL_FLASH_PAGE_SIZE))
#define HAL_OTA_DL_SIZE (HAL_OTA_DL_MAX / 2)
#define HAL_OTA_DL_OSET (HAL_OTA_DL_MAX / 2)

当size大于120K时就会出错;从调试结果看,第一次写入flash操作, HalFlashWrite(oset / HAL_FLASH_WORD_SIZE, pBuf, len / HAL_FLASH_WORD_SIZE);就会导致在flash中的代码被修改而运行错误;

那么代码是从固定位置开始写数据,如果flash中本身存在的数据已经超出了这个固定位置,那么就会引起上面的错误;而非从flash剩余空间的起始位置开始写

不知道我这样理解是不是正确,如果正确的话,我提的问题2就解决了;问题1、3尚未解决

如果不是的话,希望您可以指出

在cc2530上做ota需要加上片外flash,否则code size不够用。CC2530是256K的flash,zstack运行OTA的话需要130+,所以不够。

要想加快传输速度的话可以在zcl_ota.h中改变如下宏定义:

#define OTA_MAX_MTU                                   32

改到合适的长度,不过具体的payload加上各种网络层及mac层header后不能超过128字节。

那可以采用镜像页请求方式吗?这种方式应该是可以大大增大传输效率的吧、但是我没有找到协议栈对镜像页方式的实现过程,还是需要自己实现呢?

谢谢!

需要自己实现。可以参考如下资料:

http://www.21ic.com/app/rf/201212/153129.htm

您好!

我修改pagereq后,下载期间OTA console显示的进度会出现几次停顿,停顿几秒后继续下载,这会是什么原因呢?

另外,我设置OTA_MAX_MTU大小为64,Response Spacing为10ms,镜像页大小为6400字节,如果不停顿的话,下载速度大概140K/45S,优化速率的话还有什么参数可以设置呢?

默认的波特率是38400,我修改为115200后OTA console不会显示了,,这个波特率是不可以修改的吗?

 hu nan你好,我也在做这个OTA,我不想再接外部flash,我看zstack的协议栈关于OTA这块的程序还是蛮大的,如果基于zstack来完成OTA,感觉不可行,请问你的程序最后是在cc2530片内flash内实现OTA的么,渴望您的回答   谢谢了 

你好  你的OTA 已经成功了么    我是基于zigbee协议ZStack-CC2530-2.5.1里的OTA做了一个ota实验,smartrf通过串口接上电脑,我手里有个节点,有2530及无线模块,再给这个节点加上外部存储器M25PE20,最后开启协议栈里的OTA上位机软件OTA console,组网后,节点加入网络,开始更新,数字一直跳转,可是等到100%完成后,显示的是Node oxbf7a---“download failed(150)”  ,按道理应该是Node oxbf7a---completed successfully,你出现过这个问题么,这里既然已经跳转到100%,应该是已经在更新,基本功能应该是有的,是不是校验的问题呢,就像你说的client没有重启?还是只是显示问题,这里显示100%到底是有没有更新成功呢?求解答。。。

请问  你在cc2530 上的OAT 可以正常使用吗, 我刚接触OTA 不是很懂, 球大神讲解, QQ 772011129, 谢谢

您好,可以告诉一下pagereq的实现的源码或者修改文档吗?目前正在做毕设。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top