固件烧录

概述

如果期望在移远的通信模组上运行 Python 脚本,则需要模组固件支持 Python 脚本运行环境。因此需要在模组中烧录 QuecPython 团队发布的支持 Python 脚本运行环境的固件。

烧录模式

给模组烧录固件之前,需要给模组一个触发条件,让其进入一段特殊的程序,这段程序用来接收上位机发送的固件数据,并将固件数据写入到模组的 flash 中。这种过程,我们称之为进入烧录模式。

不同系列的模组(点此查看模组型号与平台的对应关系),进入烧录模式的方法不尽相同。整体来说有三类:

将模组 boot 引脚接地

在烧录开始前,将模组 boot 引脚接地并保持住,而后重启模组直至模组枚举出烧录用的 USB 口,此时可释放 boot 引脚的接地电平。此时,模组便进入了烧录模式。

该方式适用于所有 ASR 系列、紫光展锐系列和上海移芯系列模组。

发送 AT+QDOWNLOAD 指令

在模组正常运行时,向模组发送 AT+QDOWNLOAD=1 指令,会向模组相关寄存器写入一个标志,模组会立即重启;模组重启后检测到该标志就会进入烧录模式。

该方式适用于所有 ASR 系列和紫光展锐系列模组。

通过串口烧录

在模组刚刚启动时,模组会通过串口做一个短时的烧录指令探测,如果探测到有上位机通过串口向模组发送烧录指令,模组将会进入烧录模式。

该方式适用于 Wi-Fi 模组,并且只能通过特定的串口进行烧录。

  • FC41D 与 FCM360W 均通过串口 0 进行烧录。

烧录原理简介

ASR 系列模组

进入烧录模式后,模组等待与上位机的烧录工具进行下载协议的握手。握手完成后,模组会从烧录工具接收专门用于烧录固件的程序——flasher,并将 flasher 拷贝到 RAM 中运行,用于接收固件数据并烧写进 flash 存储介质。

flasher 首先将分区表向固定位置写入,然后读取分区表中的分区信息,将代码镜像、NV 文件系统镜像 、用户文件系统镜像及其它必要镜像数据写入模组特定地址的 flash 分区中。

紫光展锐系列模组

进入烧录模式后,模组等待与上位机的烧录工具进行下载协议的握手。握手完成后,模组会从烧录工具接收专门用于烧录固件的程序——FDL,并将 FDL 拷贝到 RAM 中运行,用于接收固件数据并烧写进 flash 存储介质。

FDL 根据自身携带的 flash 分区信息,将代码镜像、NV 文件系统镜像 、用户文件系统镜像及其它必要镜像数据写入模组特定地址的 flash 分区中。

上海移芯系列模组

进入烧录模式后,模组等待与上位机的烧录工具进行下载协议的握手。握手完成后,模组从烧录工具获取镜像和对应的分区信息,逐个写入对应的 flash 分区中。

固件烧录工具

QPYcom

QPYcom 是 QuecPython 全栈式开发调试工具, 支持 REPL 交互、文件传输、固件合成与烧录等基础功能,同时也包含了差分包制作、分区调整等扩展功能。

QPYcom 将各系列模组基带处理器厂商提供的命令行烧录工作做了统一的图形化界面封装,用户在界面中加载固件后,QPYcom 可自动识别模组系列,并在后台调用对应的原厂烧录工具进行固件烧录。

点此查看 关于 QPYcom 的详细说明和使用教程。

Qflash

Qflash 是移远通信开发的专门用于固件烧录的工具,其实现原理与 QPYcom 的固件烧录功能类似。

但是它无法像 QPYcom 一样进行 QuecPython 开发的调试工作,建议 QuecPython 的开发者使用 QPYcom 作为烧录和调试工具。

QMulti_DL

QMulti_DL 移远通信开发的一款 1 拖 N 的固件烧录工具,适用于终端产品在产线上的批量烧录。

基带处理器厂商工具

基带处理器厂商也提供了对应的烧录工具,这一类工具除了单纯的固件烧录外,还具有修改/擦除系统参数、射频数据校准等功能,工具自由度较大;对于不熟悉模组底层机制的人员来说,随意使用容易造成模组工作异常,甚至必须返厂维修才能恢复正常。

此类工具不开放给普通开发者使用,仅限我司内部研发人员开发调试使用。

烧录流程

QPYcom 的固件烧录流程如下图所示,点此查看详细教程。

模组与其固件包后缀的对应关系如下表:

模组 固件包后缀
EC600N/EC800N/EC600M/EC800M/EG912N .bin/.zip
EC600U/EC200U/EC800G/EG912U .pac
EC600E/EC800E .binpkg
BC25 .lod
EC200A .blf
BG95 .mbn
FCM360W .bin
FC41D .bin

常见问题

  1. 为什么会出现“下载固件失败,请检查模块和固件包”的弹窗提示?

    大多是由于 USB 口接触不良导致。

  2. 为什么会出现“未检测到模块,请连接模块”的弹窗提示?

    模组未开机,未成功进入烧录模式或者是驱动未正确安装。

  3. 为什么会出现“检查固件 zip 包是否未解压,请解压后重试”的弹窗提示?

    N 系列或 M 系列固件未选择正确的固件包,请解压后找到正确固件包。

  4. 为什么会出现“请检查固件是否正确”的弹窗提示?

    E 系列固件,请检查固件包中 quec_download_config.ini 配置文件是否正确。

  5. 工厂生产适用哪个工具,一个电脑如何并行下载多个模块?

    使用 QMulti_DL 工具批量烧录,使用说明请参考该工具包中的用户指导。