代码之家  ›  专栏  ›  技术社区  ›  Ebtessam Zoheir

通过Arduino IDE在虚拟串口上传Arduino代码

  •  1
  • Ebtessam Zoheir  · 技术社区  · 12 年前

    我下载了几个提供虚拟COM端口的软件。这些COM端口确实出现在 Device Manager 并且可以从Arduino IDE的菜单“工具”->串行端口->COM3.它开始上传并达到90%,然后要么超时,要么什么都不做。

    我想上传到虚拟COM端口,这样我就可以在另一个程序中读取编译输出文件。我根本不想使用我的Arduino,也不想在上传时手动获取冗长的输出文件。当我在真正的Arduino上传时,这个问题不会发生。

    该应用程序应在所有平台上运行。这项任务在Linux上似乎很容易,而我在Windows上面临着上述问题,任何关于Mac的帮助都会很有用。

    该应用程序将是一个用于硬件模拟和可视化的教育工具,试图为用户提供比其他模拟器更多的动手体验。也许这会让你知道我为什么要这么做。

    我该如何开始?

    1 回复  |  直到 12 年前
        1
  •  3
  •   Peter Mortensen icecrime    12 年前

    我想你可能会认为上传代码到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 .