|
按照官方给的OTA升级方法一直失败,数据包发送到2%就卡住了,经检查是数据包中包含了结束标志(FF FC FF FF)。
打开ota.bin查看二进制发现数据前面有不少结束标志(FF FC FF FF),解决方法就是发送时特定字节(FF FC FF FF)的第一个FF用00代替并记下该字节索引。
替换完成再把数据和索引一起发给屏幕,lua会根据索引值恢复数据。
发送端C语言:
u32_t n = 0;
for (u32_t i = 0; i <= (size - 4); )
{
if (sLCDUpdatePacket.pucPacket[i + 0] == 0xFF && sLCDUpdatePacket.pucPacket[i + 1] == 0xFC &&
sLCDUpdatePacket.pucPacket[i + 2] == 0xFF && sLCDUpdatePacket.pucPacket[i + 3] == 0xFF)
{
sLCDUpdatePacket.pucPacket[i + 0] = 0x00;
sLCDUpdatePacket.usRepIndex[n++] = i + 1; // 记下索引,索引从1开始
i = i + 4;
}
else
{
i++;
}
}
接收端lua语言:
for i = 0, 49 do
local repIndex= recvByteBuf[offset + (i * 2) + 6] | (recvByteBuf[offset + (i * 2) + 7] << 8)
if (repIndex > 0) then
recvByteBuf[offset + 106 + repIndex - 1] = 0xff
end
end
ota_packet(sn, size, recvByteBuf, offset + 106)
|
|