【问题标题】:How to check if firmware has already been uploaded to a Arduino Leonardo, without the bootloader?如何在没有引导加载程序的情况下检查固件是否已上传到 Arduino Leonardo?
【发布时间】:2021-06-16 04:39:35
【问题描述】:

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

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

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

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

【问题讨论】:

  • 或者你可以找一个真正的程序员,甚至是一个帮派程序员,然后停止摆弄引导加载程序。如果您有真正的生产运行,也很容易将其外包出去。
  • 但我不确定其他人能否做得更好,不过感谢您的想法。我在编程方面非常有经验,而且我看过很多选择。

标签: python performance arduino avrdude


【解决方案1】:

tclab 包中有diagnose() 函数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

【讨论】:

    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 2019-04-06
    • 2012-09-28
    • 1970-01-01
    相关资源
    最近更新 更多