2013-04-03 63 views
1

我下載了幾個提供虛擬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文件的路徑變化,所以在我的應用程序中使用它並不容易。 –

回答

3

我想你可能會認爲上傳代碼到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