【问题标题】:Reliably kick Arduino Micro to bootloader可靠地将 Arduino Micro 踢到引导加载程序
【发布时间】:2016-12-07 21:11:58
【问题描述】:

我有一个 Arduino Micro 通过 USB 连接到我的电脑,显示为 /dev/arduino

现在,当我想对其进行编程时(它目前具有 Arduino 的默认引导加载程序),我必须将其引导到引导加载程序中。 AFAIK 这可以通过重置芯片或使用波特率1200 与其交谈来完成。

为此,我有一个类似的脚本

#!/usr/bin/env python

import serial

s = serial.Serial(
        port="/dev/arduino",
        baudrate=1200,
        bytesize=serial.EIGHTBITS,
        stopbits=serial.STOPBITS_ONE,
        parity=serial.PARITY_NONE)
s.isOpen()
s.close()

问题是,脚本和复位引脚不能可靠地工作。此外,切断设备的电源通常不会将其踢入引导加载程序。

如何可靠地将我的 Arduino Micro 放入引导加载程序?最好通过 USB。

【问题讨论】:

    标签: arduino serial-port usb avr atmega


    【解决方案1】:

    您发布的 Python 脚本确实应该可以工作。你没有说你的证据是什么,为什么它不起作用,所以我只能猜测可能是什么问题。我的猜测是您需要在关闭端口后添加延迟,因为计算机需要一些时间来检测引导加载程序、枚举它并为其创建串行端口。一两秒的延迟应该就足够了。

    另一个猜测是您在 Arduino Micro 上运行的代码会干扰 USB 接口。例如,您可能有一个运行了很长时间的中断服务例程,或者您可能在主线代码中禁用了很长时间的中断。如果您不让 Arduino 的 USB 中断及时运行,它们将无法可靠地完成工作。

    【讨论】:

    • 我的“证据”(至少我是这么认为的)实际上是两个事实。按下按钮时,有时绿色 LED 从闪烁变为“呼吸”。这是 arduino micros 的记录行为。但这只是偶尔发生。此外,当 LED 持续闪烁而不是开始呼吸时,avrdude 无法与设备对话。目前运行的程序是一个简单的led闪烁程序。
    • 显然在使用 Arduino IDE 时,它似乎一直将设备踢入引导加载程序。
    【解决方案2】:

    魔法不在 arduino IDE 中,而是在 avrdude 序列中。

    您可以在您的系统上安装另一个 avrdude,或者使用 arduino 附带的同一个,但您可以进行重置,模拟使用 avrdude (avrdude -c arduino -p m328p -P com1) 读取的小签名...

    但老实说,真正的诀窍在于 arduino 的复位电路。复位引脚通过电容器(有时是 rts)连接到串行 DTR,因此每次 avrdude 将串行配置切换为通过 rs232 编程时,它都会在 DTR 上产生一个小脉冲(大约50ms it seems),从而导致微控制器复位。我认为您可以使用s.setDTR(True); time.sleep(0.05); s.setDTR(False) 生成一个小脉冲来在 python 中重置您的 arduino...

    祝你好运

    【讨论】:

      猜你喜欢
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多