OTA升级问题!
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的实现的源码或者修改文档吗?目前正在做毕设。