我目前正在使用Arduino Uno(rev3)板进行项目。最终我可以让它独立于Arduino运行,让我思考整个编程和引导加载程序的工作原理。
到目前为止,我知道/假设:
该主板有两个芯片:ATmega328(主芯片)和ATmega16u2(用作USB转串口)。
ATmega16u2的固件可以通过激活DFU模式并使用例如DFU-程序员。然后,Arduino可以被识别为HDI / Midi设备,但不再可编程。
编程ATmega328时,芯片正在复位,重启后,引导加载程序将通过其串行连接和ATmega16u2桥接器加载并写入新程序。芯片的ISP接口不用于上传新程序。谁首先启动了重置?
Arduino可以用作ISP编程器来编程其他外部芯片。为此,将一些固件加载到AATmega328上,要编程的芯片的ISP引脚连接到Arduino板上的ISP引脚。然后Arduino-IDE被配置为使用Atmega328作为程序员而不是重新编程。
我希望,至少我写的大部分内容都是正确的。我的问题是:
如果我将新的/空白AVR放到我的主板上,引导程序如何进入该芯片? “Burn Bootloader”命令如何工作?
是否可以在不首先上传引导加载程序的情况下将hex文件上传到ATmega328?可以通过在ATmega16u2上使用speciaf固件来完成吗?
谢谢!
约翰
答案 0 :(得分:1)
ISP编程器(ArduinoISP或诸如USBasp的离散编程器)可用于编程AVR的闪存,EEPROM,熔丝位和锁定位,而无需预先存在的引导加载程序。它使用器件上的SPI引脚向器件发送命令来操作非易失性存储器内容。
ATmega16U2只有'328'的UART连接;没有在'328。
上没有引导程序的情况下使用UART进行编程