web-dev-qa-db-ja.com

組み込みデバイスに適したシリアル通信プロトコル/スタック?

さまざまなプロジェクト用にいくつかの異なるカスタムシリアルプロトコルを作成した後、私は毎回車輪の再発明に不満を感じ始めました。すべてのプロジェクトのカスタムソリューションを開発し続ける代わりに、私はより一般的なソリューションを探していました。次の要件を満たすシリアルプロトコル(またはさらに良いのは実装)を誰かが知っているかどうか疑問に思いました。

  • 複数のデバイスをサポートします。 RS485バスをサポートできるようにしたいと思います。
  • 配達保証。ある種の確認応答メカニズムといくつかの単純なエラー検出(CRC16はおそらく問題ありません)。
  • マスター/スレーブではありません。理想的には、スレーブはデータを非同期で送信できます。これは主に美的理由によるものであり、各スレーブをポーリングするという概念は私には正しく感じられません。
  • OSの独立性。理想的には、プリエンプティブマルチタスク環境にまったく依存しません。他のものを手に入れることができれば、私はこれを認めるつもりです。
  • ANSIC。いくつかの異なるアーキテクチャ用にコンパイルできる必要があります。

速度はそれほど問題ではありません。他のニーズのいくつかを満たすために、速度をあきらめるつもりです。ただし、必要なリソースの量を最小限に抑えたいと考えています。

ピギーバックされたACKを使用し、選択的な繰り返しを行わずにスライディングウィンドウプロトコルの実装を開始しようとしていますが、おそらく誰かが私に問題を解決できると考えました。私が活用できる既存のプロジェクトを知っている人はいますか?それとももっと良い戦略?

[〜#〜]更新[〜#〜]
TCP/IPの実装を真剣に検討しましたが、もっと軽量なものを本当に望んでいました。 TCP/IPの機能の多くは、私がやろうとしていることに対してやり過ぎです。おそらく私が欲しい機能がより軽いプロトコルに含まれていないことを(しぶしぶ)受け入れたいと思います。

UPDATE 2
CANに関するヒントをありがとう。私は過去にそれを見たことがあり、おそらく将来それを使用するでしょう。ただし、確認応答、バッファリング、再試行などをライブラリで処理することを本当に望んでいます。データリンク/物理層ではなく、ネットワーク/トランスポート層を探していると思います。

UPDATE 3
つまり、この分野の最先端技術は次のように思えます。

  • 削減されたTCP/IPスタック。おそらく lwIP または IP のようなもので始まります。
  • CANベースの実装では、おそらくCANバスに大きく依存するため、他の物理層では役に立ちません。 CAN Festival のようなものが途中で役立つかもしれません。
  • HDLCまたはSDLCの実装( これ など)。これはおそらく私たちがたどるルートです。

この質問に出くわした場合は、遠慮なく回答を投稿してください。

38
Gabe

[〜#〜] hdlc [〜#〜] または [〜#〜] sdlc [〜#〜] を検討しましたか?

LAP/D (Link Access Protocol、D-Channel)もあります。

UylessBlackの " Data Link Protocols "は常に私の本棚の近くにあります-そこにもいくつかの有用な資料が見つかるかもしれません(目次を熟読してさまざまなプロトコルを調べても)

12
Dan

[〜#〜] can [〜#〜] いくつかの基準を満たしています:

  • 複数のデバイスをサポート:1つのバスで多数のデバイスをサポートします。ただし、RS485とは互換性がありません。
  • 保証付き配信:物理層はビットスタッフィングとCRCを使用します。これらはすべて、ますます多くの最新の組み込みプロセッサのハードウェアに実装されています。確認が必要な場合は、自分で追加する必要があります。
  • マスター/スレーブではありません:マスターまたはスレーブはありません。すべてのデバイスは、いつでも送信できます。プロセッサハードウェアは、アービトレーションと競合を処理します。
  • OSの独立性:該当なし。それは低レベルのバスです。その上に何を置くかはあなた次第です。
  • ANSI C:繰り返しますが、該当しません。
  • 速度:通常、最大1Mbpsから最大40m;アプリケーションに合わせて独自の速度を選択できます。

前述のように、その定義はかなり低レベルであるため、ニーズを満たすために完全なプロトコルに変換するために行う必要のある作業がまだあります。ただし、多くの作業がハードウェアで行われるという事実は、さまざまなアプリケーションに非常に役立ちます。

5
Steve Melnikoff

妥当な出発点は IP だと思います。

(追加 µIPに関するウィキペディアの記事 元のリンクが無効になっているため。)

5
Javier

MODBUSプロトコルを検討しますか?マスター/スレーブ指向であるため、スレーブは転送を開始できませんでしたが、それ以外の場合は実装が軽量で、無料で、高レベルのツールで十分にサポートされています。保持レジスタ、入力レジスタ、出力コイルなどの用語を理解する必要があります。

Phyレベルは、RS232、RS485、イーサネットなどです。

1
Drazen Cika

マイクロコントローラーインターネットネットワーク(MIN)をご覧ください。

https://github.com/min-protocol/min

CANに触発されていますが、標準のUARTハードウェアを使用しており、フレッチャーのチェックサムとフレーム形式がエラー検出をチェックし、バイトスタッフがフレームヘッダーをマークしています。

1
Ken Tindell

Profibus を見てください。

マスター/スレーブが必要ない場合は、ハードウェアを使用してアービトレーションを行う必要があると思います( CanbusFlexRay )。

1
KeyserSoze