首页 / 资讯中心 / 文章详情

MMDVM固件编译与刷写全流程:从交叉编译到串口校准

MMDVM固件编译与刷写全流程:从交叉编译到串口校准 ★ FEATURED ARTICLE
简介MMDVM固件源代码是一套面向业余无线电与嵌入式开发的多模式数字语音调制解调器实现覆盖D-Star、DMR、System Fusion、P25、NXDN、POCSAG和FM等主流模式适用于Arduino Due、STM32F1/F4/F7以及Teensy 3.1/3.2/3.5/3.6等ARM Cortex-M平台要求主频高于70MHz并具备ADC/DAC为不同硬件移植提供了统一的软件框架。压缩包共137个文件以68个头文件和50个C源文件为核心辅以链接脚本、Makefile、配置文件、Arduino工程文件及Python脚本整体仅216KB目录结构紧凑便于快速定位协议栈、IO驱动和串口通信等模块。针对Arduino、STM32和Teensy平台项目分别提供了相应的构建配置说明开发者可依据BUILD.txt、ARM GCC与Teensyduino工具链自行编译。该软件遵循GPL v2许可仅限业余及教育用途严禁商业使用。目前已有2435人学习下载适合希望深入理解多模式数字语音协议、研究固件移植或开展业余无线电实验的开发者参考通过阅读源码和实际编译可掌握D-Star/DMR等模式的帧处理流程、调制解调器驱动架构以及跨平台工程组织方式为二次开发提供扎实基础。1. MMDVM固件到底管什么为什么同样的板子有人通联顺畅你反复翻车MMDVM多模式数字语音调制解调器这块板子决定它能不能用的不是射频芯片而是烧在单片机里的固件。同一条数字语音链路固件版本不同、偏置没校准DMR和C4FM的接收质量能差出一大截。很多人把断线归咎于天线馈线实际打开串口看自检日志问题往往出在固件与板子时钟源不匹配。固件解决的是多模调制解调这件事把主机程序下发的数据变成射频前端能发射的波形也把收到的信号还原成主机能解析的数据。适合两类人手里有板子、想自己刷固件却不敢动手的新手刷完遇到握手失败、偏频、发射无响应正在找排查思路的熟手。下面从固件在链路里的位置讲起拆到刷写命令和踩坑经验一步步带你把这块板子调好。2. 固件在数字语音链路里的角色刷写前先分清主控、射频前端与固件的边界2.1 一条数字语音通联链路里MMDVM固件负责哪一段整条链路从上层到底层依次是主机程序做协议解析和网络互联→ 串口 → MMDVM板上的单片机 → 射频前端 → 天线。主机程序负责DMR、P25、NXDN这些协议里的上层逻辑MMDVM固件处理的则是物理层的调制解调发射时把主机送来的低速数据流按对应模式的调制方式编码成基带波形再交给射频芯片上变频接收时把射频芯片解调下来的基带信号采样、判决还原成数据回传主机。所以固件是横在“数字数据”和“模拟射频”中间的那一层它直接决定波形质量。数字语音对调制精度的要求比模拟FM高得多DMR的4FSK调制如果频偏不准确中继设备解调时会误码、丢帧表现就是通联时声音断断续续甚至直接掉话。天线可以改善信号强度但改不了固件生成的波形波形不对信号再强也解不出来。理解这一点就不会在刷完固件后拿天线去排查问题了。MMDVM这块板子不是所有数字模式都用同一套射频链路。不同模式采用不同的调制方式DMR和P25是4FSKC4FM是4电平FMD-STAR是GMSK。固件初始化时会把每种模式的调制参数、滤波器系数逐一加载。这也是为什么固件版本变化后必须重新校准的原因——不同版本对波形参数的处理可能不同旧参数沿用下来会导致某一种模式可用、另一种模式通话质量明显变差。2.2 为什么不用卖家固件要自己编译固件市面上的MMDVM板子在出厂时通常会烧好一版固件但这一版往往是面向“大多数板子”的通用配置。你在实际使用中会遇到几类情况板上的温补晶振TCXO实际频率与固件里标称值不一致板子用的单片机型号和固件默认型号不同OLED屏、GPS模块这些外设的引脚占用有差异。遇到这类问题改写配置重新编译通常比刷另一个二进制更直接。自己编译固件最大的好处是版本可控、配置可见。你清楚当前这版固件编译时用的是哪个分支、哪些宏定义出问题可以退回上一版也可以对比代码差异来定位。另一个实际收益是省去来回找适配固件的成本同一个固件源码改一下板型配置就适配另一块板子不用再向卖家要一个不一定更新的固件文件。自己编译也不是完全没有门槛。最典型的坑是编译工具链不兼容MMDVM固件的目标平台是ARM Cortex-M系列单片机必须用arm-none-eabi体系的交叉编译器用普通桌面版gcc会直接在启动文件和链接阶段报错。还有一部分用户在修改配置后出现运行异常比如开机自检正常但无法入网这类问题大多是配置里改错了参数而不是编译器有问题。先跑通默认配置再逐步裁剪是更稳妥的做法。2.3 搭建交叉编译环境工具链安装与源码目录布局编译固件的第一步是准备一套干净的编译环境。我一般在常见的Linux发行版上这样装# 安装ARM交叉编译工具链和构建工具 sudo apt update sudo apt install -y gcc-arm-none-eabi make git # 拉取固件源码把地址替换为你关注的维护分支 git clone 固件源码仓库地址 cd 固件源码目录 # 列出所有可用版本标签确认你要编译的版本 git tag -l工具链部分最重要的是gcc-arm-none-eabi这个包它提供arm-none-eabi-gcc、arm-none-eabi-ld、arm-none-eabi-size等命令。arm-none-eabi表示目标是没有操作系统的ARM裸机平台eabi后缀指嵌入式应用二进制接口这与MMDVM固件跑在裸机单片机上的场景完全对应。make负责按Makefile里的规则组织编译git用来切换源码版本这三个工具缺一不可。源码目录打开后重点看三个位置顶层Makefile、平台配置文件常见命名是Config.h或类似头文件、源文件目录。Makefile里定义了单片机型号、编译选项、输出文件名平台配置头文件里定义了板型、串口引脚、晶振频率、OLED型号等硬件参数。第一次编译时不要急于改配置先用默认配置编一次确认工具链无误再去改自己的板型参数。2.4 一次完整编译三条命令、产物与版本校验默认配置编译的流程很短核心命令如下# 清理上次编译残留避免增量编译把旧配置带进产物 make clean # 按Makefile默认目标编译出固件 make # 查看编译产物确认固件文件生成时间和体积 ls -la build/make clean这一步很多人会跳过但换配置后不清理的后果很隐蔽Makefile按时间戳判断是否需要重新编译你改了头文件理论上会触发重编可如果文件系统时间戳异常、或有些旧对象文件依赖关系没写好产物里可能混着上一版配置。刷进去之后表现就是“我明明改了配置却没有生效”。所以每次改配置后先clean再make比手动删中间文件更省事。如果板子型号与默认配置不同需要在Makefile或配置头文件里找到单片机型号和板型定义改成板子丝印上标注的实际型号。编译结束后用arm-none-eabi-size查看固件体积确认占用空间没有异常溢出再记录产物的文件名和生成时间方便刷写时区分版本。产物文件名以实际Makefile输出为准常见是mmdvm_firmware.hex我后续命令里就用这个名字代替。编译过程中出现的warning值得扫一眼。常见两类一是某个外设被宏定义开关但没有对应初始化代码二是晶振频率相关的数值类型转换。这类警告不一定导致固件跑不起来但往往提示配置项之间不匹配。出现error时重点看第一个报错位置绝大多数是选错了编译器版本或者Makefile变量名拼错解决方式是把工具链重装为统一版本再编译。3. 串口刷写MMDVM固件全流程stm32flash与单板电脑GPIO两种方案3.1 刷写前确认板子进入引导模式BOOT跳线与串口电平给MMDVM板刷固件第一步不是接串口线而是确认单片机处于什么启动状态。单片机在上电时会根据BOOT0和BOOT1引脚的电平决定是从主Flash启动还是从系统存储器里的引导程序启动。刷写固件必须从系统存储器启动因为它内置了串口下载程序也就是常说的ISP模式。常见板子的BOOT0引脚会引出一个跳线或焊盘默认是断开状态对应从主Flash启动刷写时需要把BOOT0接到高电平再给板子复位一次这样单片机才会进入引导模式。BOOT1在绝大多数MMDVM板上保持低电平即可。下表是两组引脚的启动组合BOOT0BOOT1启动位置0任意主Flash正常运行固件10系统存储器进入串口引导模式用于刷写表格里的组合要结合具体板子看个别板子没有引出BOOT1只需要处理BOOT0。需要注意的是MMDVM板的串口是3.3V TTL电平不能直接插电脑的RS232串口否则会烧引脚。USB转串口模块要选3.3V输出的接线时地线必须共地TX接RX、RX接TX接反了的表现是刷写工具一直握手失败。还有一个容易被忽略的点刷写时板子的供电要可靠。USB转串口模块同时给板子供电时如果模块的稳压能力一般刷写过程中电压跌落会导致写入失败。我一般用独立的3.3V电源给板子供电USB转串口模块只接信号线这样排查问题时少一个变量。3.2 方案AUSB转串口用stm32flash一次刷写USB转串口是最直接的刷写方式适用于手头有现成模块的情况。先把BOOT0跳线拉高并复位板子然后用ls查看串口设备名# 安装刷写工具 sudo apt install -y stm32flash # 确认USB转串口被识别为哪个设备常见是ttyUSB0 ls -l /dev/ttyUSB* # 写入固件刷写完成后校验并复位 stm32flash -w build/mmdvm_firmware.hex -v -R /dev/ttyUSB0stm32flash是Linux下常用的单片机串口刷写工具它直接和系统存储器里的引导程序通信不需要额外的调试器。参数里-w表示写入固件文件-v表示写入后校验-R表示刷写完成后让单片机复位。我建议始终带上-v校验能发现写入过程中的位错误避免把刷写失败误判成固件本身的问题。提示刷写命令里的固件文件名要以实际编译产物为准不要照抄路径。如果make输出的文件名不同把命令里的mmdvm_firmware.hex替换成实际文件名。如果执行后提示无法初始化或握手超时依次检查五处BOOT0是否真的拉高复位是否在BOOT0拉高之后触发TX/RX是否接反串口设备名是否写错供电是否正常。这五处占了刷写失败原因的九成。部分板子的引导程序要求以115200波特率通信如果默认参数握手失败可以追加-b 115200参数再试一次。刷写成功后stm32flash会输出写入和校验的结果。这时不要急着跑固件先把BOOT0跳线恢复到低电平再上电或复位否则板子会再次进入引导模式看起来就像“刷完变砖了”。这个顺序问题在可靠性的影响上比你想得大很多“刷完没反应”其实是BOOT0没恢复。3.3 方案B单板电脑GPIO直连省掉USB转串口如果你的MMDVM板本来就要配合Linux单板电脑使用实际上可以省掉USB转串口模块直接用单板电脑的UART引脚连接MMDVM板的串口。这种接法少一层转接也避免了USB转串口模块带来的供电波动问题。前提是先把系统里占用这个串口的服务释放掉。# 停用串口控制台服务避免系统抢占用作固件刷写的串口 sudo systemctl disable serial-gettyttyAMA0.service # 查看串口设备是否可访问 ls -l /dev/ttyAMA0 # 用单板电脑的UART直接刷写 stm32flash -w build/mmdvm_firmware.hex -v -R /dev/ttyAMA0这里把设备名写成了ttyAMA0是常见的片上UART名称。不同主板这个设备名可能不一样查看方法是dmesg里搜uart或者在/dev下找ttyS、ttyAMA、ttyUSB开头的设备。systemctl disable那一步是关键很多系统默认把串口当作调试控制台如果不关掉串口会被getty进程占用刷写工具就打不开设备。GPIO直连的接线规则和USB转串口一样MMDVM板的TX接单板电脑的RXMMDVM板的RX接单板电脑的TXGND接GND。因为是直连没有转换芯片的保护接错线更容易出问题所以接线后最好先做一次回环测试把TX和RX短接用echo往串口写数据再用cat读确认系统串口可用再接板子。这里有个实际经验GPIO直连刷写前最好把单板电脑的蓝牙或其他占用UART的外设也关掉。有些主板的蓝牙和UART共享引脚蓝牙开着会导致刷写时断时续。关闭外设的具体方式取决于系统通常在配置里禁用相关设备树覆盖即可。刷完后同样记得恢复BOOT0跳线再复位。3.4 刷完第一件事从开机自检日志判断固件状态固件刷写完成、BOOT0恢复低电平之后重新上电然后用串口终端打开设备的串口观察固件的自检输出。这一步能最快判断固件是否真的跑起来了# 打开串口终端波特率与固件配置保持一致 screen /dev/ttyUSB0 115200screen打开串口后按下复位键或重新上电固件会在终端里打印启动信息。正常情况下能看到固件版本号、单片机型号、晶振或TCXO频率以及各数字模式的初始化结果。看到这些信息说明固件已经运行问题转移到主机软件的对接上。如果终端里没有任何输出先按一下回车确认不是等待交互然后检查三件事BOOT0是否已经恢复低电平串口波特率是否和固件默认波特率一致串口接线是否接对。有一种容易误判的情况固件正常运行但不打印信息原因是固件编译时把串口调试输出关掉了。这时可以通过主机软件尝试连接能握手就说明串口通路没问题。启动日志里值得重点关注的是频率相关信息。固件会报告它检测到的晶振或TCXO频率如果这个数值和板子上标注的频率明显不一致后面的频率校准就会偏。还有一个判断点是各模式初始化是否全部通过如果某一种模式初始化失败要回看固件配置里是否同时启用了不支持的组合。4. 固件刷对只是第一步调制解调器配置与主机软件对接4.1 主机软件里modem配置页的关键字段与推荐初始值固件跑起来之后还需要主机软件通过串口和它对接。主机的控制界面里会有一组modem配置项所有配置最终通过串口指令下发给MMDVM固件。这些参数直接决定固件在射频层面的表现也是新手最容易改坏的地方。下面是我常用的初始参数表参数作用初始建议串口设备选择MMDVM板所在的串口与刷写时一致波特率与固件串口波特率匹配一般为115200RXOffset接收频偏校准先设0再逐级调整TXOffset发射频偏校准先设0再逐级调整RXLevel接收电平调整先设默认值TXLevel发射电平调整先设默认值这个表里的初始值不是最终值而是给调试建立一个干净的起点。Offset类参数尤其不能在拿到板子后沿用上一任配置每块板的TCXO实际频率都有细微差别别人板上的校准值搬到你这里波形只会更差。先把RXOffset、TXOffset归零从零开始校准结果反而更可控。还要注意模式开关。主机软件里一般会把DMR、P25、NXDN、D-STAR、C4FM这些模式各列一个开关按需打开。有些人图省事把模式全开结果固件初始化时某些模式互相抢占资源表现为某一模式之下连接时好时坏。更务实的做法是只用自己实际要玩的模式把其他模式关掉既减少初始化冲突也缩小排查范围。4.2 串口参数对接波特率、数据位与握手时序主机软件与MMDVM固件的串口通信参数必须完全一致。绝大多数固件默认是115200波特率、8个数据位、1个停止位、无校验也就是常说的8N1。如果固件在编译时被改过波特率而主机软件还按默认值连接两边就会一直在握手阶段卡住。区分是固件问题还是对接问题有个简单方法先用串口终端手动打开串口观察固件启动信息是否正常吐出。如果终端能看到版本号说明固件串口工作正常问题在主机软件侧如果终端也看不到任何输出则优先排查固件侧。这个方法在排查“固件能启动但主机软件报连接失败”时非常快速比反复改配置有效得多。握手时序也值得提一句主机软件启动后会向固件发送查询指令固件回复版本和状态信息。如果你的固件版本过老、主机软件版本过新协议字段可能对不上表现就是握手失败或读到不完整的设备信息。遇到这种跨版本问题优先把固件更新到和主机软件同时期发布的版本而不是去改软件里的兼容选项。串口接线一样会影响对接。如果板子是插在扩展排针上刷的固件刷完后排针的物理接触不良也会造成对接异常。我见过翻车案例固件刷写正常、自检正常但主机软件一会儿连上一会儿断开最后发现是排针里有一根信号线虚接。所以对接异常时把串口线重新插拔一次也是标准排查步骤。4.3 模式映射DMR、C4FM、D-STAR分开设不是一套参数走天下MMDVM固件支持多种数字模式但不同模式的调制方式不一样对频偏和电平的要求也不一样。DMR和P25使用4FSK调制频偏过大或过小都会提高误码率C4FM用的是4电平FM对频偏更敏感D-STAR用GMSK解调特性又不同。因此校准参数不能一套配置走天下。实际配置时每种模式在校准过程中要单独测、单独记。我的习惯是先把所有模式关掉只开一种模式做发射测试调好Offset后再开下一种。如果同时开着DMR和C4FM去调接收端的反馈混在一起你很难判断当前改的参数到底影响了谁。逐个模式验证虽然慢但结果可回溯。模式映射还涉及频率间隔配置。固件不知道你的通联频率频率由主机软件配置但不同模式的信道间隔不一样配置时要按各模式对应的间隔去设。DMR的间隔通常和C4FM不同如果反复出现“能听到对方但对方听不到你”趁早检查一下是不是把某个模式的信道间隔设错了。另外接收信号检测通常是COS或DAV信号在不同模式下电平逻辑可能不一样。部分固件允许按模式单独配置COS极性如果所有模式都设成同一套极性某些模式下会表现为常发或常收不到。遇到这种表现优先翻配置里每个模式的独立选项而不是去动硬件。4.4 换固件版本后的“重新校准”环节很多用户刷完新版固件直接把旧配置沿用下来却发现通联质量下降。这不是玄学而是固件内部对调制参数的默认处理可能已经变化旧的Offset值建立在旧固件的行为之上。所以换固件版本后重新校准不是一个可选项而是必要步骤。用数字模式做通联测试时你听到的断续和丢字往往就是校准参数不适配造成的。校准的第一步是把所有Offset归零发射一个测试载波。业余条件下没有专业仪器时最直接的反馈来自对方台站的接收报告但更可复现的做法是使用带频谱显示的接收设备观察发射信号。4FSK信号如果频偏正常频谱上能看到对称的调制包络如果偏了包络会出现明显不对称。不过业余条件下不太容易人手一台频谱仪。另一条更实用的校准路径是借助模式自身的质量反馈。DMR通联可以看误码率统计C4FM终端会显示信号质量指示这些数值比听感更客观。逐步调整TXOffset观察质量数值变化取最优区间后再调RXOffset。每次只动一个参数、记录对应数值这是校准的基本纪律。如果校准后仍然不理想检查一下固件编译时是否选择了正确的TCXO频率。固件里的标称频率决定了它给射频芯片的参考基准标称值错得离谱时Offset再怎么调也无济于事。这种情况要把配置头文件里的频率改为板子上TCXO的实测标称值重新编译再刷写。5. MMDVM固件刷写避坑记录5个常见翻车现场与排查路径5.1 现象刷写后串口只有回车没有任何自检输出这是刷写后最常见的翻车现场。固件刷写工具报了成功板子也上电了但串口终端里按回车只有空行没有任何版本信息。多半不是固件没刷进去而是刷写流程的最后一步没有做对BOOT0还停留在高电平单片机每次上电都进入引导模式而不是运行固件。原因上还有一个高频项是TX和RX接反。终端没有输出时如果BOOT0已经恢复低电平那就把串口两端的TX/RX对调再试。另外有些USB转串口模块用的是5V电平接到3.3V的板子引脚上虽然不一定立即烧坏但电平不匹配会导致通信时好时坏表现为偶尔能握手、偶尔完全无声。解决路径按顺序操作先确认BOOT0跳线恢复低电平并重新复位再确认串口模块是3.3V电平最后用stm32flash加-v参数重新刷写一次排除写入阶段的问题。刷写后不要急着拔线先看终端输出确认固件运行再收工。5.2 现象固件能启动但主机软件报握手失败固件自检正常版本号都打印出来了但主机软件连接时报握手失败或设备无响应。这个问题的本质是主机软件和固件之间的串口参数对不上最常见的是波特率不一致。固件编译时如果被改成19200或57600而主机软件仍按默认值连接握手永远过不去。还有一种隐蔽原因是设备名冲突。主机软件配置里写的是某个串口设备但系统里多个设备占用了同一个名字软件打开的是另一个设备。排查时先在终端里确认当前固件实际占用的串口设备名再和主机软件配置一一对比不要凭记忆填。解决方法是先手动用终端打开固件所在串口观察启动信息和握手响应确认串口正常后把主机软件的波特率、数据位校验位设置成与固件一致。若问题依旧把主机软件和固件的版本更新到较新的匹配组合再不行就换一个USB口排除USB控制器的影响。5.3 现象能接收但不能发射提示没有载波检测有的板子刷完新固件后可以正常接收信号但切到发射时主机软件提示没有检测到载波或者持续报载波检测信号没有激活。这不是硬件坏了多数情况下是COS信号的极性配置反了。COS是载波检测信号板子上的比较器输出到单片机的引脚逻辑电平可能是高有效也可能是低有效。固件和主机软件通常提供COS极性配置默认值往往按某一类板子设定。你手上的板子如果正好是反的逻辑固件就会一直认为没有载波。改参数就好不需要动焊台。解决方式是在modem配置里找到COS Active High/Low选项翻转后保存并重新连接再看发射是否恢复。这里有一个容易忽略的连带问题某些固件版本把COS和DAV数据有效分开配置两个信号分别处理。如果只改了COS没改DAV接收侧可能依然异常。我建议发射和接收两侧的信号极性都过一遍确认和板子原理图一致。没有原理图时就用排除法逐个翻转测试。5.4 现象刷完频率整体偏移对方听不清你的数字语音新固件刷完之后数字语音听起来“糊了”对方反馈频率不对甚至直接解调失败。这种问题大多和晶振或TCXO的频率标称有关。板子上的TCXO实际频率如果和固件配置头文件里的值不一致射频芯片的参考基准就会偏最终表现为发射载波频率偏移。另一个常见原因是新固件对Offset的处理方式不同。你在旧固件下调好的TXOffset数值在新固件下可能产生不同的频偏结果。所以刷完新固件先不要把旧Offset照搬而是归零后重新校准。我见过有用户把旧值直接填进去结果发射频谱偏差接近一倍还以为板子坏了。解决路径是先确认TCXO频率标称值正确重新编译刷写然后把TXOffset和RXOffset归零逐步校准并记录每次质量反馈。校准过程中建议用固定的测试对象比如某个中继或某台终端避免不同接收端带来的主观差异。5.5 现象刷写中途断线板子进入“半砖”状态刷写过程中USB线被碰松、单板电脑供电波动刷到一半断线板子看起来没反应了像是变砖。这类情况在MMDVM板上基本都能救回来因为引导程序在系统存储器里不会因为Flash内容被写坏而消失。只要还能进入引导模式就可以重新刷写。处理方法是把BOOT0拉高重新给板子上电再用stm32flash刷一次完整固件并加上-v校验确保写入完整。如果反复在写入中途断线先换一根质量好的USB线再检查供电是否足够很多“半砖”其实只是供电不足导致写入中断。刷写时单独给MMDVM板供电成功率会高不少。这里要补一个习惯每次刷写前先把当前版本固件备份出来。stm32flash支持从单片机读回固件一条-r参数就能把现存固件存成文件。这个备份就是你的后悔药新固件不理想时直接刷回不用到处找原始版本。备份的具体做法在下一章给出。6. 把刷写流程固化成脚本备份、校验与版本记录的三个习惯刷MMDVM固件这件事真正让人翻车的不是命令本身而是流程不完整。我早期的翻车经历基本都是同一个模式跳过备份直接刷新固件结果新固件与板子不匹配想退回旧版却发现当初根本没存。后来给自己定了一条规矩任何板子到手第一件事就是把当前固件读出来归档。固化的第一步是把备份和刷写整合成脚本。利用stm32flash的读回功能刷写前自动把当前固件保存成带日期的文件刷完后强制校验并复位。一个简化版本如下#!/bin/bash # 板子必须处于引导模式BOOT0拉高并复位 # 1. 备份当前固件到带日期的文件 stm32flash -r backup_$(date %Y%m%d).hex /dev/ttyUSB0 # 2. 刷入新固件写入后校验并复位 stm32flash -w build/mmdvm_firmware.hex -v -R /dev/ttyUSB0 # 3. 把新固件按日期归档方便回溯版本 cp build/mmdvm_firmware.hex ~/firmware_archive/mmdvm_$(date %Y%m%d).hexstm32flash -r参数从单片机里读回固件内容并保存成hex文件这比记版本号可靠得多因为读回的是板上实际运行的那份二进制。备份文件命名用日期而不是版本号是因为你往往记不住当天刷的版本细节日期一对照就能回溯。归档目录可以按板子编号建子目录多块板子混用时不会搞混。第二个习惯是每次刷写后在文本文件里记录三样东西日期、固件来源或版本标识、当时使用的Offset和Level参数。这个记录的价值在下次刷写时体现它让你知道上一版可靠的校准值是多少以及新固件相比旧版改了什么。没有记录校准参数一旦丢失就只能重新摸索一遍。第三个习惯是刷写完先做一次完整验证再收手。验证不只是看固件启动信息而是跑一次与主机软件的完整握手、发一次测试发射、看接收质量的反馈。三个环节都通过这次刷写才算画上句号。我后来把这三个习惯固化成固定流程再没有出现过刷完固件找不到回退版本的情况。希望这些经验能帮到你。在MMDVM固件这件事上备份和记录比任何高级调试工具都实在养成习惯后刷固件就不再是提心吊胆的操作。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站