最近的一个项目中,有通过嵌入式设备对使用联发科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的应答(0x5F)未被收到,则需要重复发送此命令(0x5F),每次重新发送之间的标称时间间隔为50毫秒。

2. Download Agent(DA)写入流程

  • DA_BASE_ADDR
    对于MT3329后的型号,包括MT3333,DA的地址起始于3072 (0x00000C00)
    即:DA_BASE_ADDR (0x00 0x00 0x0C 0x00)
  • DA_SIZE_NUM_WORD
    DA的字节长度是 5946 (0x0000 173A) (23784比特)
    即:DA_SIZE_NUM_WORD (0x00 0x00 0x17 0x3A)
  • DA数据格式
    DA数据以5个16位无符号整数(2字节)的数据包形式发送。 这意味着如果它发生了以字节为单位的DA数据大小不是偶数,即将会有一个独立字节发送DA文件的结尾,此时必须用填充0x00的方式形成一个2字节的值值作为高字节,以满足协议要求。但并不要求数据必须以上述规定的5个整数(2字节)发送。该协议允许剩余的整数(整数的数量可以小于5)在发送DA文件的结尾。
  • DA_CHECKSUM
    一个简单的异或算法被应用到发送给DA数据文件的所有字节来获得生成的16位校验和值。 根据这个要求,在上面的流程图中,这个校验和不适用于DA_BASE_ADDR命令和DA_SIZE_NUM_WORD命令。
    注:在此阶段完成之前,对模块断电或升级流程意外终止、数据错误,对模块彻底断电、重启后即可恢复正常。有时,模块发来的应答为0x00,此时可认为模块工作异常,也需要重启才能恢复。注意,主机设备的法拉电容可以为模块维持较长时间供电,故需要对主机断电一分钟左右才能保证GNSS模块彻底断电。

3. 启动Download Agent(DA)

3.1 程序跳转到DA


DA_BASE_ADDR 与上一流程设置的相同(0x00 0x00 0x0C 0x00)

3.2 DA信息报告

当DA被下载并运行,它会返回20字节的数据,包含以下信息:

  1. SYNC_CHAR (1byte)
  2. DA_VERSION (2bytes)
  3. FLASH_DEVICE_ID (1byte)
  4. FLASH_SIZE (4bytes)
  5. FLASH_HW_ID (8bytes)
  6. EXT_SRAM_SIZE (4bytes)
  • SYNC_CHAR (1byte)
    当DA被运行,它会返回SYNC_CHAR,如果返回的不是这个值,可能下载的是错误的DA。
  • DA_VERSION (2bytes)
    在SYNC_CHAR后,DA会返回DA的版本号,包含两个字节,一个是主版本,一个是镜像版本。主机将检查是否支持这个版本的DA。
  • FLASH_DEVICE_ID (1byte)
    报告DA版本后,DA会自动检测目标上的闪存类型。 如果DA支持这个闪存,那么闪存设备ID将返回到主机。 如果DA不支持这个Flash,它将会返回0xFF来指示未知的Flash类型。
  • FLASH_SIZE (4bytes)
    四个字节的闪存大小,例如:128Mbits(16Mbytes)闪存将是0x01000000字节;DA将发送
    0x01,0x00,0x00和0x00。
  • FLASH_HW_ID (8bytes)
  • FLASH_MANUFACTURE_CODE:
    两个字节的闪存制造代码。 (用户应该参考每个闪存的数据表。)
  • FLASH_DEVICE_CODE:
    两个字节的闪存设备代码。 (用户应该参考每个闪存的数据表。)
  • FLASH_EXT_DEVICE_CODE1:
    两个字节闪存扩展设备代码1。 (用户应该参考每个闪存的数据表。)
  • FLASH_EXT_DEVICE_CODE2:
    两个字节闪存扩展设备代码2。 (用户应该参考每个闪存的数据表。)
  • EXT_SRAM_SIZE (4bytes)
    四个字节的外部SRAM大小,例如:64Mbits(8Mbytes)的外部SRAM将为0x00800000
    字节; DA将发送0x00,0x80,0x00和0x00。

3.3 设置存储区域

该命令用于通知DA每个块的总内存块数量和范围。该内存块信息指示要下载的BIN文件数量以及每个文件的范围BIN文件。
如果任何内存块超过闪存大小,DA将立即返回NACK(0xA5)来指示DA_MEM_CMD命令失败。
如果所有的下载内存块都有效,DA将返回ACK(0x5A)和UNCHANGED_BLOCK_COUNT通知主机端有多少不变的块应该被恢复

  • MEM_BLOCK_COUNT (N):
    要下载的ROM文件的数量和内存块的数量相同由模块分配。 如果ROM文件的编号是1,那么N = 1。
  • BLOCK_1:BEGIN_ADDRESS:
    内存中ROM文件的起始地址,用于块1。
  • BLOCK_1:END_ADDRESS:
    内存中ROM文件的结束地址,用于块1。
  • 根据协议要求,ROM文件以固定长度的包发送的256字节(加上2字节的额外校验和)。 当没有足够的数据字节被发送,比如文件末尾的最后一个数据包(其余字节<256)应填将数据包其余的部分填充零。
    由于以上要求,内存块的END_ADDRSS必须包含额外的填充字节大小
    示例:如果ROM文件大小为500324字节,则预期长度为156个字节
    填充字节被附加到最后一个数据包中ROM文件的其余字节。END_ADDRSS应为总大小 -1。

4. 下载BIN(ROM)数据

4.1 写入BIN

此命令用于将BIN文件的所有数据写入目标端闪存。注意,在此阶段断电或程序异常终止,将导致模块损坏(连接串口后无法收、发任何指令)

  • 每个数据包是固定的长度; 即PACKET_LENGTH加上两个字节的校验和。
  • 如果DA成功接收到此数据包,它将返回CONT_CHAR(0x69)通知主机继续发送下一个数据包。
  • 如前文所述:命令CMD_SetMemBlock中,最后的数据包通常不足够PACKET_LENGTH,代码将填充0x00作为填充,直到到达PACKET_LENGTH。最后,DA将从闪存执行所有BIN文件的校验和,并与来自UART的校验和。 如果两个校验和都相同,则DA将返回ACK(0x5A)
    意味着它们被成功写入闪存,否则返回NACK(0xA5)来表示错误。


PACKET_LENGTH = 256
DA_WRITE_CMD (0xD5 0x00 0x00 0x01 0x00)

4.2 结束升级


此命令用于通过DA关闭解锁RTC电源键实现断电。固件更新程序完成,GNSS模块将自动重启。
PC端升级软件此时还依次发送了如下指令:

PMTK811:退出MP测试模式
PMTK810:进入MP测试模式
PMTK811:退出MP测试模式
PMTK104:完全冷启动

此时模块重启,能够正常返回GPS数据,但在模块断电重启之前,无法接收包括PMTK605版本查询指令在内的命令,故升级结束后无法立即返回新的版本号。

联发科MT33xx GNSS模块固件升级流程相关推荐

  1. SIM7600模块固件升级(模块自身升级)

    SIM7600模块固件升级(模块自身升级) 本文博客链接:https://editor.csdn.net/md/?articleId=107102723 作者:zsj ,转载请注明. 之前选购了一款4 ...

  2. 基于 移远 BC26 移柯BL620的NB模块调试流程

    NB模块连接网络顺序 移柯NBL260模块 NB卡: 联通   默认波特率 115200 //UDP 链接方式: AT //判断模组是否上电开机成功 AT+CIMI //读取 IMSI, 判断 SIM ...

  3. 移植移远4G模块EC20过程记录3-EC20模块固件升级以适配QMI拨号

    目录 EC20模块固件升级步骤 1.交叉编译升级工具QFirehose 2.将工具QFirehose和待升级的固件EC20CEHDLGR06A09M1G.zip拷贝到板子上 3.在板上解压固件压缩包 ...

  4. Android GNSS 模块分析(四)HAL 层

    紧接着上一篇(Android GNSS 模块分析(三)JNI 层),继续来分析下 Android GNSS HAL 层的功能,本篇准备先介绍下 HIDL 层的封装.至于后面的 HAL 层的功能,由于使 ...

  5. Android GNSS 模块分析(五)NMEA 协议

    紧接着上一篇<Android GNSS 模块分析(四)HAL 层>,本篇简述下导航硬件设备与卫星导航系统之间的通信协议. NMEA 协议 简介: NMEA(National Marine ...

  6. 创新微MinewSemi厘米级定位精度的GNSS 模块—MS32SN4

    近日,中国无线连接解决方案提供商MinewSemi推出了其GNSS模块系列-MS32SN4.MinewSemi表示,这些嵌入式模块为产品提供了一种易于使用.具有成本效益的解决方案,支持物联网(IoT) ...

  7. nRF 51822 nRF52832固件升级流程

    一般芯片启动都是先启动协议栈,然后在协议栈中判断相应的地址是否存在bootloader,一旦bootloader存在就会先运行bootloader, 在bootloader运行的过程中,判断相应存储位 ...

  8. GNSS模块“电力通信”的应用

    随着科学技术的突飞猛进,北斗卫星导航系统(GNSS)也不断更新换代,技术日渐成熟,短短二十年间达到全球覆盖.GNSS模块全球导航卫星系统的四大供应商其一的北斗卫星导航系统(BDS),提供的不受天气影响 ...

  9. 什么是GNSS模块,有哪些特点

    GNSS模块是基于GNSS卫星定位导航系统的一体式数字接收器,通过接收来自卫星传输的信号通过计算来提供实时位置时间等数据.搭载了GNSS模块的设备,可以完成诸多的应用,诸如导航,定位等.GNSS模块可 ...

最新文章

  1. 20140725 快速排序时间复杂度 sTL入门
  2. java 签名 apk mac_java 方法签名
  3. 敏捷之旅杭州站演讲PPT(敏捷开发在淘女郎)
  4. 【mybatis】 “if“ 相关联的 “test“ 属性值不能包含 ‘<‘ 字符
  5. [转] c++的多态(一个接口,多种实现)
  6. numpy的基本使用3
  7. React开发(174):ant design按钮确认删除
  8. Qt工作笔记-UDP多线程数据处理及发送(简单实例)
  9. Win7-其中的文件夹或文件已在另一个程序中打开
  10. 关于C语言可变参数函数的一些研究和总结
  11. 把图片url 伪静态 php,thinkphp5系列之URL伪静态(生成优雅的URL)
  12. 关于拉扎维 模拟CMOS集成电路设计 复习 CHAR 2
  13. 六安技师学院计算机网络技术,安徽六安技师学院2021年招生简章
  14. JDK1.8的Lambda表达式使用(一)
  15. 学习记录之星瞳检测交通标志1
  16. 3dmax文件打不开了,怎么办
  17. 2021-05-30 vue-Element ui 省市级三级联动
  18. 二叉树的构造(前序+中序)---(后序 + 中序)
  19. mysql数据完整性实验报告,数据库原理实验报告(Mysql)
  20. C++的time_t 和 struct tm 类型【s

热门文章

  1. 2022-09-16 蒟蒻の模拟赛之Summary
  2. Shaolin(map+iterator) HDU - 4585
  3. 使用GOOGLE API做了个简繁英互译小工具
  4. AlBaath Collegiate Programming Contest (2015) 总结
  5. 使用计算机的成本包括哪些,课题经费预算其他费用包括哪些
  6. Mac 技术篇-搜狗输入法英文首字母自动大小写设置,mac系统首字母自动大小写设置
  7. 图形图像基础 之 png介绍
  8. ROS运行时出现Couldn‘t find executable错误
  9. 过压过流保护芯片,IC芯片电路图
  10. 老农的计算机学习笔记(一)计算机的诞生及其基础