如何在没有引导加载程序的情况下检查固件是否已经上传到 Arduino Leonardo?

问题描述

我使用了大量的 Arduino(一批大约 2000 个),它们都需要通过 USB 加载固件。我已经编写了程序来加速这个过程,但我找不到阻止程序将固件重写到 Arduino Leonardo 的方法,因为唯一的标识符似乎是 com 端口号。为了解决这个问题,我每次插入新的 Arduinos 时都会按下一个键,但这很慢。我想让程序保持循环,这样我就不需要每次都按下一个键或重新运行程序。如果我让它工作,那么我可以尽可能多地插入并在上传完成后继续将它们关闭,因为我的程序已经可以上传到多个设备。

我已经了解了 avrdude 的 -U 参数,它允许程序员读取或验证设备的文件,这些文件可能有助于检查加载的文件,但它需要引导加载 Leonardo,这至少在以下方面违背了目的效率(Leonardo 需要 0.5 秒才能进入引导加载程序模式)。我也想过通过它的包连接到带有固件的设备,但尚未加载固件的设备的超时时间约为 5 秒。

是否可以在不使用引导加载程序的情况下检查之前在 Arduino Leonardo 上加载的固件?将不胜感激。

(仅供参考,我正在使用 Pyserial 和 Subprocess 包在 Python 中编写 this program

解决方法

diagnose() 包中有 tclab 函数为 shown in the documentation。一个简单的函数可能是您已经尝试过的,但不会比您的原型快。

def check_firmware():
    import tclab
    import time
    try:
        start = time.time()
        lab = tclab.TCLab()
        print(lab.version)
        Q1w=lab.Q1(1); Q1r=lab.Q1()
        lab.close()
        if Q1w==Q1r:
            print('Firmware loaded')
        else:
            print('Firmware not loaded')
        print('Time: ',time.time()-start)
        return True
    except:
        print('Firmware not loaded')
        print('Time: ',time.time()-start)
        return False

print(check_firmware())

这是加载固件的一些时间:

TCLab version 0.4.9
Arduino Leonardo connected on port COM4 at 115200 baud.
TCLab Firmware 2.0.1 Arduino Leonardo/Micro.
TCLab Firmware 2.0.1 Arduino Leonardo/Micro
TCLab disconnected successfully.
Firmware loaded
Time:  4.687340974807739
True

这是没有加载固件的时间:

TCLab version 0.4.9
Firmware not loaded
Time:  8.068862199783325
False

该函数根据是否检测到固件返回 TrueFalse