我想自己在莱昂纳多的董事会上编译和传输一个阿杜诺程序。
在Arduino官方IDE中,一切都很好。我已经为编译和字节码传输启用了详细模式。
我可以看到每个命令行。
我想理解每一行。
除了最后一步,一切都很好:使用AVRDUDE进行传输。如果键入完全相同的命令,则会得到一个错误:
.avrdude: butterfly_recv(): programmer is not responding如果我用Arduino IDE上传代码,则不存在此错误。
我看到了一个不同之处- Arduino IDE在AVRDUDE调用之前显示了这一行:
强制使用1200 bps打开/关闭端口/dev/cu.usbmodem1431重置
如何通过命令行进行重置?
发布于 2017-03-25 20:32:11
好吧,答案是你自己写的。
您需要以1200波特的速度打开到Arduino的串行连接,然后关闭连接。然后Arduino将引导到SAM,并重新设置自己,现在准备好了一个新的程序。
发布于 2017-09-04 15:41:47
我在macOS上也有同样的问题,我想出了下面的Bash脚本:
# Find the Arduino port
ARDUINO_UPLOAD_PORT="$(find /dev/cu.usbmodem* | head -n 1)"
# Reset the Arduino
stty -f "${ARDUINO_UPLOAD_PORT}" 1200
# Wait for it...
while :; do
  sleep 0.5
  [ -c "${ARDUINO_UPLOAD_PORT}" ] && break
done
# ...upload!
avrdude "${OPTIONS[@]}"while循环就是诀窍!一旦Arduino端口恢复在线,它就会继续进行。
这是我为项目芝麻编写的Makefile的一部分。
发布于 2017-06-29 10:54:08
为了从Windows上传,我为AVRDUDE制作了一个bat文件包装器。
它用WMI标识Leonardo端口,使用模式命令将这个COM端口重置为1200个波特,标识引导加载器COM端口并调用AVRDUDE。
固件应该放在firmware.hex中,但可以更改为从命令行提供。
代码位于GitHub存储库https://github.com/p1ne/arduino-leonardo-uploader中。
或以下:
@echo off
setlocal
for /f "tokens=1* delims==" %%I in ('wmic path win32_pnpentity get caption  /format:list ^| find "SparkFun Pro Micro"') do (
    call :resetCOM "%%~J"
)
:continue
:: wmic /format:list strips trailing spaces (at least for path win32_pnpentity)
for /f "tokens=1* delims==" %%I in ('wmic path win32_pnpentity get caption  /format:list ^| find "Arduino Leonardo bootloader"') do (
    call :setCOM "%%~J"
)
:: end main batch
goto :EOF
:resetCOM <WMIC_output_line>
:: sets _COM#=line
setlocal
set "str=%~1"
set "num=%str:*(COM=%"
set "num=%num:)=%"
set port=COM%num%
echo %port%
mode %port%: BAUD=1200 parity=N data=8 stop=1
goto :continue
:setCOM <WMIC_output_line>
:: sets _COM#=line
setlocal
set "str=%~1"
set "num=%str:*(COM=%"
set "num=%num:)=%"
set port=COM%num%
echo %port%
goto :flash
:flash
avrdude -v -C./avrdude.conf -patmega32u4 -cavr109 -P%port% -b57600 -D -V -Uflash:w:./firmware.hex:ihttps://stackoverflow.com/questions/43016993
复制相似问题