由于esp8266模块的超性价比,才11元就可以拿到,所以我们也选择了esp8266的模块。由于是消费类产品,产品的固件可能需要经常升级,而它又没有别的途径,只能通过wifi网络来搞定了。看了它的手册后,还好可以自己来升级固件。只需要把固件放在云服务器就可以了,然后客户通过一个按键操作就可以升级固件了。这里简单的说一下它的步骤:
1.需要将编译后生成的user1.bin和user2.bin加密生成的自己的固件user1.upd和user2.upd放在云服务器上;
2.我们的固件程序里通过调用system_upgrade_userbin_check()来检查目前运行的固件位置,如果是固件位置1则要去升级user2.upd;如果是固件位置2则要去升级user1.upd;
3.从云服务器下载完固件至flash的用户空间地址,比如起始地址为0x100000的空间;
4.下载完固件后,根据目前运行的固件位置,将下载的固件搬运到相应的固件空间(固件位置1的地址为0x01000,固件位置2的地址0x81000);
5.设置升级完成标志system_upgrade_flag_set(UPGRADE_FLAG_FINISH),并重启system_upgrade_reboot(),交给esp8266模块完成升级;
这里还要提及一点,就是要注意一下升级缓存空间的对齐,因为在调用spi_flash_write写时,如果没有对齐,则会报LoadStoreAlignmentCause错误。