我下载了几个提供虚拟COM端口的软件。这些COM端口确实出现在Device Manager中,可以选择从Arduino IDE上传,菜单工具 - >串行端口 - > COM3。它开始上传并达到90%,然后它要么超时要么什么都不做。
我想上传到虚拟COM端口,以便我可以在另一个程序中读取编译输出文件。我根本不想使用我的Arduino,我不想在上传时手动获取详细的输出文件。当我在真正的Arduino上传时,不会发生这个问题。
应用程序应该适用于所有平台。这个任务在Linux上看起来很简单,我在Windows上面临着所述的问题,任何有关Mac的帮助也会很有用。
该应用程序将成为硬件模拟和可视化的教育工具,试图为用户提供比其他模拟器更多的实际操作体验。所以这可能会让你知道我为什么要这样做。
我该如何开始?
答案 0 :(得分:3)
我认为你可能会假设将代码上传到Arduino是单向通信:这就像将草莓放在搅拌机中,而Daquiri就出来了。如果这是真的,您可以将IDE转储到串行端口,将其保存到文件,并且您有一个Arduino二进制文件。 (如果对细节不感兴趣,请跳至 TL; DR 。Upshot:此假设不正确。)
单向通信假设并不完全正确:Arduino上有一个程序(称为“a bootloader”),它负责与程序员进行通信(“程序员”:一个程序编程Arduino,现在假设它是Arduino IDE)。在最“自然”的状态下,Arduino CPU无法跨串行线路编程。而是通过in system programming(ISP)或via JTAG协议对这些芯片进行编程。引导加载程序是一个在Arduino CPU上运行并通过串行端口加载草图/程序的程序。该程序在启动时运行,并通过串口查找编程命令。
如果它发现程序员正在尝试传递编程信息,它将读取通过串行链路传输的已编译的Arduino二进制文件,将其存储在闪存中,通过串行链接发送回来进行验证,如果一切都是成功,退出并启动存储的草图。如果串口上没有显示编程信息,也就是说,没有程序员正在尝试编写新草图,则引导加载程序只需退出并启动已存储在flash中的程序。
TL; DR :为了在您的串行端口上实现伪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。