这是一个专门为arduino UNO/Nano/Pro Mini打造的无线下载bootloader,可通过NRF24L01+模块或串口烧写程序.2 Kb Flash.兼容STK500V2协议,支持avrdude,支持arduino IDE,支持跳频传输,附带编程器端实现代码.
注1: 项目内附带的编程器端代码是arduino IDE简化版, 完整项目链接: https://gitee.com/alicedodo/arduino-nrf2401-programmer
注2:这个bootloader是否仅仅是一个玩具?。
初看起来,这确实是个玩具,给arduino升级固件的时候,没办法硬件自动复位(无线传输,无解),需要及时手动去复位,稍晚的话bootloader就会超时退出,导致升级失败。板子搁桌子上还不如串口线下载来的方便。
但如果有固件本身的配合,那换一个场景也许就不一样了:
当要升级固件的时候,给旧固件发个命令,固件启动看门狗,然后看门狗超时复位,然后bootloader执行,然后固件升级。
如果固件下载到一半,无线连接挂了怎么办?这不是问题,bootloader有容错机制。
bootloader有两种工作模式: NORMAL / CRITICAL ,通过检查复位源来确定要进入哪种模式
上电复位/手动RST复位: 进入NORMAL模式,1秒内没下载信号,跳转至固件;
看门狗复位: 立即进入CRITICAL模式;
NORMAL模式下1秒内收到下载信号,自动转入CRITICAL模式;
CRITICAL模式下看门狗保持开启状态,超时时间1秒,接收固件代码过程中,反复喂狗,保持看门狗不超时;
一旦下载中断,看门狗复位,bootloader在CRITICAL模式下重新运行,重置无线模块,等待下载信号;
所以遇到了下载中断的情况,重置一下无线编程器,再次下载即可。
实现了协议中的通用命令以及ISP命令子集: Flash读+写 / EEPROM读+写 / 熔丝位只读.
通过无线编程器和avrdude通信,完成程序下载.
所谓的无线编程器仅仅是数据透传,相当于无线串口,作用是从PC串口接收一帧命令,不做解析,通过NRF24L01+模块分包发送给bootloader.
bootloader执行命令完毕后,再将命令的ACK帧分包发送给无线编程器,再由串口送达avrdude.
精力有限,只使用avrdude5.10 和 avrdud6.3测试过,不保证其他版本没问题.
5.10是winAVR2010内置avrdude版本;
6.3是当前官方最新版本.
bootloader默认优先使用无线模块接收数据,当检测不到无线模块时,启用串口(115200bps). 只在复位后检测一次,中途不再切换.
复位后bootloader在 [默认空中波特率+默认地址+默认频道]上监听握手信号,programmer端将 [新的空中波特率+随机频道+随机地址] 打包进握手信号,握手成功后双方一起修改配置,转移到新的频道继续通信.
跳频命令是基于STK500V2的协议格式实现的,在bootloader看来和其他命令没有任何区别,所以理论上双方可以多次跳频.
默认连线图:
(如果你使用的交叉工具链是winAVR2010的话,还是不要自己编译了。winAVR已经快十年没更新了,内置的avr-gcc还是4.3版本,编译效率比较低,bootloader绝对会超过2Kb,建议换更高版本的,我自己使用的是5.4 )
(对于没有条件自己编译的各位,我上传了编译好的HEX文件,使用上图中的默认连线方式,文件位于bin目录下,烧写前需要先想办法修改熔丝位,配置: lfuse:0xFF / hfuse:0xDA / efuse:0xFD )
时间所限,暂时写这些,如果大家感兴趣,请留言提醒,我可以在代码具体实现上补一些文档。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型