我想你可能会认为上传代码到Arduino是单向通信:这就像把草莓放在搅拌机里一样
   
    Daquiri
   
   出来了。如果这是真的,那么您只需将IDE转储的任何内容带到串行端口,将其保存到一个文件中,就可以获得Arduino二进制文件。(跳到
   
    TL;博士
   
   如果对细节不感兴趣。Upshot:这个假设是不正确的)。
  
  
   单向通信的假设并不完全正确:Arduino上有一个程序(称为“
   
    bootloader
   
   “),负责与程序员通信(“程序员”:一个为Arduino编程的程序,假设它现在是Arduino IDE)。在它们最“自然”的状态下,Arduino CPU不能通过串行线编程。相反,这些芯片通过
   
    system programming
   
   (ISP)或
   
    via
   
   这个
   
    JTAG
   
   协议引导程序是一个在Arduino CPU上运行的程序,通过串行端口加载草图/程序。该程序在启动时运行,并通过串行端口查找编程命令。
  
  
   如果它发现程序员试图交流编程信息,它将通过串行链路读取经过编译的Arduino二进制文件,将其存储在闪存中,通过串行链路将其发送回进行验证,如果一切顺利,则退出并启动存储的草图。如果串行端口上没有显示任何编程信息,也就是说,没有程序员试图编写新的草图,那么引导程序只需退出并启动已经存储在闪存中的程序。
  
  
   
    TL;博士
   
   :为了在串行端口上实现伪Arduino,你必须编写一个程序——一些代码,模拟虚拟串行端口另一端的Arduino(引导程序)。所以,当程序员/IDE对Arduino说“你在吗?”时,你的程序会像Arduino一样回答“是的!”。
  
  
   默认的Arduino引导加载程序是
   
    STK-500 compatible
   
   :这意味着它实现STK-500命令-可以找到其参考
   
    here
   
   。如果您决定这样做,那么最简单的事情可能是从现有的引导加载程序开始,例如
   
    Arduino
   
   的或
   
    AdaFruit
   
   的(还有其他的),并对其进行修改。这样的引导加载程序将已经实现所有命令,并且由于它是用C编写的(我不会选择程序集引导加载程序来修改:),因此修改起来应该足够容易。
  
  
   或者,您可能会认为STK-500太难实现。如果是这种情况,您可以使用任何程序员协议
   
    Avrdude
   
   支持:Avrdude是一个用于编程AVR芯片的程序,Arduino IDE在内部使用Avrdude将草图发送到Arduino。如果你这样做,那么你就必须更改你正在使用的程序员Arduino IDE中的设置。
  
  
   就我个人而言,我认为兼容STK-500是最好的选择,但
   
    YMMV
   
   .