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

问题描述:

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

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

该应用程序应该适用于所有平台。在Linux上这个任务看起来很简单,而且我在Windows上遇到了这个问题,任何Mac的帮助也都是有用的。

该应用程序将成为硬件仿真和可视化的教育工具,试图为用户提供比其他仿真器更多的实际操作体验。所以,这可能会给你一个想法,为什么我想这样做。

我该如何开始?

+1

如果您想获取已编译的程序(即原始机器码),为什么不直接查看生成的Intel Hex文件? – 2013-04-03 10:42:12

+0

有两个原因,首先,如果您打开IDE并上传代码,就像使用实际的Arduino一样,那将会是一个更好的用户体验。其次,根据我所了解的.hex文件的路径变化,所以在我的应用程序中使用它并不容易。 –

我想你可能会认为上传代码到Arduino是单向通信:这就好比将草莓放在搅拌机中,然后出现Daquiri。如果是这样的话,你可以把任何IDE转储到串口上,将它保存到一个文件中,并且你有一个Arduino二进制文件。 (跳到TL; DR如果对细节不感兴趣的话:Upshot:这个假设是不正确的)。

单向通信假设并不完全正确:在Arduino上有一个程序(称为“a bootloader”),它负责与程序员进行通信(“程序员”:对Arduino进行编程的程序,假设它现在是Arduino IDE)。在他们最“自然”的状态下,Arduino CPU不能通过串行线进行编程。相反,这些芯片可以通过system programming(ISP)或viaJTAG协议进行编程。自举程序是一个在Arduino CPU上运行并通过串口加载草图/程序的程序。该程序在启动时运行,并通过串口查找编程命令。

如果它发现程序员正在尝试传递编程信息,它将读取通过串行链接传来的编译后的Arduino二进制文件,将其存储在闪存中,并通过串行链接发送回验证,如果所有内容成功后,退出并启动存储的草图。如果没有编程信息出现在串口上,也就是说,没有程序员试图写一个新的草图,那么bootloader只是退出并启动已存储在闪存中的程序。

TL; DR:为了实现你的串口上有伪的Arduino你必须写一个程序一些代码,你的虚拟串口的另一端模拟一个Arduino(引导程序)。所以当程序员/ IDE对Arduino说“你在吗?”你的程序会回应“是!”,就像Arduino一样。

默认Arduino的引导加载器是STK-500 compatible:这意味着,它实现STK-500命令 - 的量,参考可以发现here。如果你决定这样做,那么最简单的事情可能是从现有的引导加载程序开始,比如ArduinoAdaFruit(也有其他),并对其进行修改。这样的引导程序将拥有所有已经实现的命令,并且由于它是用C语言编写的(我不会选择程序集引导程序来修改:),所以它应该很容易修改。

或者,您可能会认为STK-500太难实施。如果是这种情况,可以使用Avrdude支持的任何编程器协议:Avrdude是用于编程AVR芯片的程序,Arduino IDE内部使用Avrdude将草图发送给Arduino。如果你这样做,那么你必须改变你使用的编程器在Arduino IDE中的设置。

就个人而言,我认为STK-500兼容是最好的选择,但YMMV

+0

非常感谢,这是非常有帮助和有见地的。 –

+0

很酷,很高兴听到它! – angelatlarge