arduino - 烧录hex - 以mega2560r3为例

概述

和同学讨论问题, 他要试试烧录一个编译好的hex到arduino板子中, 我们用的是mega2560r3官方版.
都是arduino小白, 开始做实验时, 用的arduinoIDE从源码编译烧录.
他这次想从hex向arduino板子烧录, 应该是想保护源码.

将mega2560r3用USB线接到本本, 先用arduinoIDE从源码编译上传到板子, 好使.
上传完, 我们的程序在DTR跳变时, 会主动上报开机信息.

这说明板子是好的.

开始找了几个工具(Arduino烧录HEX软件-0807-3.rar, AVRDUDESS-2.14-setup.exe, OpenJumper™ Serial Assistant 1.3.6beta.rar), 载入hex后, 开始向板子烧录, 都不好使.

而这几个工具都是前面同学用过的, 工具本身没问题.
也许是板子的烧录协议升级了, 或者工具年份太早了, 和这几年的arduino板子烧录协议不一致.

同学说, 看其他资料, 好像要动板子上的跳线.
我们又不烧录bootloader, 为啥要动板子上的跳线?
arduinoIDE都能将源码编译完, 通过USB串口烧录到板子, 那就说明是可以通过工具, 经过USB串口烧录HEX到板子, 只是烧录时通讯协议的问题.

前面找的这几个工具都比较早, 应该协议和板子不匹配.

又查了一会资料, 看到github上有个2022年的工具(Freematics Builder), 试试, 好使.

Freematics Builder的UI用法不太适应, 记录一下.

实验

确认硬件和软件都是好的

连接mega2560到本本
在这里插入图片描述
用arduinoIDE打开工程, 选好串口和板子型号, 从源码编译并烧录到板子, 会显示编译成功, 上传成功.
从arduinoIDE的源码工程生成hex到本地文件
在这里插入图片描述
在这里插入图片描述
在工程build目录的子目录中, 可以看到生成好的hex.
最好将程序的版本号啥的再改改, 让DTR跳变时上报的开机信息中看出不同, 这样可以确认确实烧入了不同的hex.

下载Freematics Builder

https://github.com/stanleyhuangyc/Freematics/releases/tag/builder
在这里插入图片描述
安装FreematicsBuilder-1.2.3-win32.exe
在这里插入图片描述
安装完后, 桌面上有快捷方式.
将使用板子串口的程序(arduinoIDE, 串口助手…)先关掉. 使Freematics Builder能正常操作arduino板子的USB串口.
打开Freematics Builder
在这里插入图片描述
这个UI有点不适应…

使用Freematics Builder烧录hex到arduino板子

选择板子类型和通讯的波特率.
在这里插入图片描述

选择要烧录的hex

在这里插入图片描述
在这里插入图片描述
可以看到hex已经载入程序.
点击Build按钮, 可以查看需要的板子程序空间和内存空间的大小.
在这里插入图片描述
点击串口按钮, 进行烧录.

在这里插入图片描述

如果是先打开的烧录程序, 后插入的arduino板子, 需要点击刷新按钮, 将板子所在的USB串口刷出来操作.
在这里插入图片描述

验证是否烧录成功

只要Freematics Builder烧录时不报错, 就差不多说明烧录成功.
在这里插入图片描述
烧录不同版本的hex, 里面的开机上报信息不一样(e.g. 程序版本号不一样), 这样就可以知道烧录了不同的hex.

也可以关闭Freematics Builder, 用串口助手连接已经烧录好的板子, 用DTR跳变按钮, 看看上报的信息的版本号是否是自己刚烧录的.
或者用将板子连上设备, 发GCode命令给板子, 看回包对不对, 有没有预期的动作.
在这里插入图片描述
当串口打开后, 当DTR为黑灯时, 点击一下, DTR变为红灯, 此时板子就自动复位,上报开机信息.

END

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐