一般的基于网络应用中,基本是用网络芯片 和MCU 的组合。
网络芯片现在流行的趋势 可以用做简单的MCU 使用,都会开放出几个IO口,并设置一下,上手很容易。缺点是有的应用 还是需要MCU的,并不能完全替代。譬如说在
对时序要求严格的应用中。
MCU 的升级 ,BOOTLOAD 现在也很普遍,不论是HEX 还是 BIN . 在现实中应用中,发现一个产品出厂后,再去升级,需要一定的往返费用。让现场的人升级,技术
门槛也不低。不见得每个人都是电子行业的。
网络模块+ MCU 的组合完美的解决这一切。
网络模块 用AIR202 , MCU 用STM32 . STM32的芯片资料好找,网上铺天盖地,价格也很便宜。
AIR202 可以空中升级自身的程序。
STM32 也可以通过AIR202 来升级。升级的步骤如下:
上电后, AIR202 通过串口2 询问 MCU的企业ID 和版本号 {“ID":"?"}
格式是JSON 格式。 每10秒发送一次, 一共发送4次, 如果没有回复,则LED 报警处理,并连接ONENET ,把错误上报。
MCU 如果接收到,则回复 {”CompanyID":"1234","Version":"01"}
air202 接收到回复,则GET 服务器, 下载文件,判断企业号和版本号 是否符合要求, 如果不符合要求,通知MCU 不升级
如果符合要求, 通知MCU {”CompanyID":"1234","Version":"02","Upgrade":"1"} ,MCU 开始准备升级。
然后AIR202 开始拉服务器上的BIN文件, 每次拉1K或者2K 字节, 通过串口发送给MCU, data = "{\"FileBlockCount\":\""..blockCount.."\","..data.."}"
MCU 接收后,烧写一个BLOCK . STM32 的FLASH有大容量和中小容量 之分,中小容量一个BLOCK 是1K , 因此我每次拉下来1K ,写入FLASH 中。
如果写完,就把Block +1, 串口发给AIR, { "FileBlockCount ":"xx"} . 如果校验的不对, 回复原来的BLOCK值,要求AIR重新下载。
AIR接收到后, 根据Block值,再次拉下BIN文件,循环往复 ,一直把数据下载完。
最后AIR发送 {"Upgrade":"0"} , MCU 进入APP 程序。
STM32的iap程序 在原子网站 就可以得到, 稍微一改就可以。
所有的技术都是现成的,组合起来花了点时间。
以后要是产品需要升级,只需要把程序丢到网站就可以了。
curton 2019-4-23 15:41
ihb_sina 2019-3-28 18:05