2013-05-14 19 views
0

我想通過USB向Arduino寫另一端的二進制傳輸。現在,我用ASCII來做,而且很簡單。使用ASCII碼,您可以看到垃圾直到雙方同步。但是用二進制,很難區分數據和噪聲。是否有一些標準的方法來重置連接並獲得可靠的字節流?我可以發一次休息並強制Arduino以某種方式重置嗎?只是尋找最佳實踐的建議。管理Linux與Arduino之間的串行對話

回答

0

對於可靠的通信,需要包括一些協議與您的二進制數據,使

  • 你知道當事情出了錯
  • 可以同步

A detailed description of serial framing can be found here找回

作爲一個例子,point-to-point protocol (PPP)提供了一種簡單的方法,通過用sp保證在二進制流中永遠不會發生的特殊字符(有一個逃避機制可以讓它發生)。接收器可以使用成幀字符進行同步。

你可以(取決於錯誤的數據通過的有多糟),也可以在你的消息中添加一個校驗和或CRC - PPP把這稱爲幀檢查序列或FCS。

0

如果你真的想推出你自己的協議,你想成爲真正的8位能力,你需要做的事情有幾件事。如果你處在一個理想的世界中,數據永遠不會丟失,那麼它就更簡單了,但你並不是!

  • 你必須轉義兩個字符字節,比如說X和Z.每次你想發送一個X而不是發送Z1,並且當你想發送一個Z時,你發送Z2。這樣你永遠不會發送一個普通的X接收器現在可以等待一個X,並開始收集字節。每次看到一個Z時,它都必須讀取一個額外的字節並對該數字進行解碼才能得到真正的字節。現在,使用標題解釋消息將包含多少數據以及校驗和來開始每條消息。如果讀取器具有指定的編號,讀取器應該停止讀取,如果校驗和失敗,則讀取器會丟棄所有內容
  • 頭之後,你把你的數據

注意,使用結構序列化數據不被認爲是安全的,並且往往會打破,如果你跨架構的邊界,其中包裝是不同的。