小米wifi esp8266模组OTA总结

编程入门 行业动态 更新时间:2024-10-09 23:21:51

小米wifi esp8266<a href=https://www.elefans.com/category/jswz/34/1753082.html style=模组OTA总结"/>

小米wifi esp8266模组OTA总结

OTA从学Xmodem到IAP到执行完成花费了我很多时间,下面总结几条注意事项
点击付费源码

1.串口的接收方式(不要用中断)

原本小米wifi通讯的时候,我用的就是串口中断去接收字符的,所以OTA的时候也打算沿用中断接收,后来就是坑啊,告诉小伙伴们千万别用串口中断接收去做OTA,因为传输慢的要死,小米用的Xmodem协议和标准的Xmodem稍微有变动,它不像标准Xmodem同一帧不会重复发送,小米的Xmodem的同一帧,只要不回复ACK会每隔一秒继续发本帧。直到重复发送25次后,停止发送。这时候用中断接收会出现字节错位的现象,是能完成OTA的,但是时间需要约0.5s每帧,太慢了。
模组升级,大小600KB的时间大概15~20s左右,如果网络状态很糟糕的时候可能会到1分钟。
MCU升级,受串口的速度和xmodem 协议的影响,MCU 平均下载速度大概在每秒2~4K Bytes

2.开始发送NAK或者’C’传输时不能有其他字符发送给模组

文档上说:“第一个NAK或C用于确定校验方式,第二个NAK或C开始传输数据。因此超时时间不宜过长“,就是在此时,要发送其他无关的字符。不然会现Xmodem错误。

  if(checkType==CHECK_CRC)      //0x01 CRC校验{crc = 1;g_CheckType='C';}else if(checkType==CHECK_SUM) //0x02 SUM校验{crc = 0;g_CheckType=NAK;}//这条是为了在接收Xmodem屏蔽中断接收usart_interrupt_disable(USART0, USART_INT_RBNE);port_outbyte(g_CheckType);port_outbyte(g_CheckType);

3.bin文件的存储

由于xmodem是128个数据字节一传,我采用的方法:每超出2048个字节就earse2048字节的空间出来,然后每传过来128个字节就放到数组里,直到满2048个字节在进行存储

//这是满2048的情况下
if(((packetno)%16 == 0)&&(Count_ALLBYTE >128))//满2048
{OTA_128whole_flag = 0;											FLASH_Program(Ota_Write_Address+page_num,FMC_PAGE_SIZE,OTA_flash);										page_num += FMC_PAGE_SIZE;
}//如果EOT了,不满2048的情况下就把剩下的存入进flash里
//OTA_flash[2048]是局部数组变量case EOT: //数据包结束if(OTA_128whole_flag == 1){OTA_128whole_flag = 0;FLASH_Program(Ota_Write_Address+page_num,(Count_ALLBYTE%2048),OTA_flash);page_num = 0;memset(OTA_flash,0,sizeof(OTA_flash));	}
我在写代码的时候也参考了这位博主的[文章]()
希望此文对你有帮助!

更多推荐

小米wifi esp8266模组OTA总结

本文发布于:2024-02-27 09:11:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1705985.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:模组   小米   wifi   OTA

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!