最近的一个项目中,有通过嵌入式设备对使用联发科MT33xx GNSS模块升级固件的需求。供应商只提供了一个PC端升级工具,并表示出于保密考虑,不会提供升级流程相关文档。但将已出售的嵌入式设备中的GNSS模块一一取出,使用PC升级显然是不现实的,必须使用嵌入式设备直接对其内置的模块进行固件升级。
幸而在Google上搜到了一个使用同款芯片的GNSS解决方案供应商的文档(Telit_Jupiter_MT_GNSS_Host_Flash_Application_Note_r2),对升级流程有详尽的描述。后经证实,对照该文档,确实可以成功对模块进行固件升级。
既然是网络上可以找到的公开资料,就无需多避讳,这里把总结出的升级流程分享一下。
GNSS模块的型号和版本号可通过电脑连接模块,在9600波特率下发送$PMTK605 *31\r\n
指令查看。查询指令的应答类似$PMTK705,AXN_5.10_3333_17021500,354C
。其中“354C”即本流程升级的固件版本。
下文中以“主机”代指用于升级GNSS模块的嵌入式设备,“模块”代指MT33xx系列GNSS模块。
1. 升级启动流程
这是发送给GNSS模块以开始升级流程的第一个流程。在这个命令中,主机将按顺序设置串口通信的波特率,并在每个波特率下发送NMEA_START_CMD ($PMTK180)。然后模块将在指定的或者最高的波特率(即115200)开始升级流程。(实测在默认的9600和最高的115200波特率上各发送一次PMTK180即可)
该序列通过与GNSS模块以字节交换方式的发送多个预定值,以确保通信建立并在GNSS上设置并进入升级模式。
- 设置波特率:
设置波特率是指设置主机的波特率,并以此发送NMEA_START_CMD到GNSS模块。在串口通信的波特率(默认9600)中,115200是推荐值。 - BOOT_ROM_START_CMD1(0xA0):
如果BOOT_ROM_START_CMD1的应答(