40

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

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

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

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

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

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

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

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

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

4

6 に答える 6

12

HDLCまたはSDLCを検討しましたか?

LAP / D(リンクアクセスプロトコル、Dチャネル)もあります。

Uyless Blackの「データリンクプロトコル」は常に私の本棚の近くにあります-そこにもいくつかの有用な資料が見つかるかもしれません(目次を熟読してさまざまなプロトコルを研究することさえできます)

于 2009-07-21T21:40:16.370 に答える
5

CANはいくつかの基準を満たしています。

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

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

于 2009-07-21T18:12:35.040 に答える
5

妥当な出発点はuIPかもしれないと思います。

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

于 2009-07-21T14:27:43.323 に答える
2

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

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

于 2013-01-24T15:20:24.177 に答える
2

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

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

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

于 2015-02-23T18:18:48.650 に答える
1

Profibusを見てください。

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

于 2009-07-21T17:41:33.870 に答える