关于安卓OAD更新问题
YAN,您好
我们现在使用安卓app + cc2640与ANCS蓝牙协议进行OAD固件更新。
发现使用IOS每次发8个字节更新速度根块,并且升级成功(时间:60s)。但是使用安卓的时候如果每次发1个字节虽然特别慢但也能更新成功(时间:15分钟)。
可是安卓每次发送8个字节虽然会快却跟新到一半就失败了,返回错误码0xffff,这是为什么呢?主要发现(oadBlkNum 不等于 blkNum)了。。。
// Check that this is the expected block number.
if (oadBlkNum == blkNum)
{
// Calculate address to write as (start of OAD range) + (offset into range)
uint32_t addr = imageAddress + (oadBlkNum * OAD_BLOCK_SIZE);
// If address starts a new page, erase that page first.
if ((addr % HAL_FLASH_PAGE_SIZE) == 0)
{
OADTarget_eraseFlash(addr / HAL_FLASH_PAGE_SIZE);
}
// Write a 16 byte block to Flash.
OADTarget_writeFlash(imagePage, (blkNum * OAD_BLOCK_SIZE), pValue+2, OAD_BLOCK_SIZE);
// Increment received block count.
oadBlkNum++;
}
升级的速度快慢和连接参数是有关的。可以抓包看一下iOS设备和Anroid设备的OAD时候的连接参数更新是否有成功,不稳定有可能是数据发送时序不匹配。可以调整一下连接参数试看看