问题描述
我使用了大量的 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
该函数根据是否检测到固件返回 True
或 False
。