1

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

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

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

该应用程序将成为硬件模拟和可视化的教育工具,旨在为用户提供比其他模拟器更多的动手体验。因此,这可能会让您了解我为什么要这样做。

我该如何开始?

4

1 回答 1

3

我想你可能会假设将代码上传到 Arduino 是一种单向通信:这就像将草莓放入搅拌机中,然后出来一个Daquiri。如果这是真的,您可以将 IDE 转储到串行端口的任何内容保存到文件中,然后您就有了一个 Arduino 二进制文件。(如果对细节不感兴趣,请跳至TL;DR。结果:这个假设不正确)。

单向通信假设并不完全正确:Arduino 上有一个程序(称为“引导加载程序”)负责与程序员进行通信(“程序员”:对 Arduino 进行编程的程序,假设它是 Arduino IDE 现在)。在最“自然”的状态下,Arduino CPU 无法跨串行线路进行编程。而是通过系统内编程(ISP) 或JTAG协议对这些芯片进行编程。引导加载程序是在 Arduino CPU 上运行并通过串行端口加载草图/程序的程序。该程序在启动时运行,并通过串行端口查找编程命令。

如果它发现程序员正在尝试传递编程信息,它将读取来自串行链路的已编译的 Arduino 二进制文件,将其存储在闪存中,通过串行链路将其发送回进行验证,如果一切顺利,则退出并启动存储的草图。如果串口上没有出现编程信息,也就是说,没有程序员试图编写新的草图,那么引导加载程序会简单地退出并启动已经存储在闪存中的程序。

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

默认的 Arduino 引导加载程序与STK-500 兼容:这意味着它实现了 STK-500 命令 - 可以在此处找到参考。如果您决定这样做,那么最简单的方法可能是从现有的引导加载程序开始,例如ArduinoAdaFruit(还有其他的),然后对其进行修改。这样的引导加载程序将已经实现了所有命令,并且由于它是用 C 编写的(我不会选择程序集引导加载程序来修改 :),所以它应该很容易修改。

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

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

于 2013-04-03T16:30:27.827 回答