SPI を介して、一方の側のマイクロコントローラーと他方の側のマルチコア TI チップ上の ARM プロセッサとの間の効率的な通信プロトコルを設計しようとしています。
必要なプロトコルの要件:
1 - キューイングをサポートするマルチセッション。複数の送信/受信スレッドがあるため、この通信プロトコルを使用するアプリケーションは複数になり、これらのリクエストのキューイングを処理するプロトコルが必要です (送信が失敗した場合はバッファを保持し続けます)キューですが、キューのスケジューリングを管理するためのプロトコルが必要なだけです)。
2 - 基盤となるプロトコルとして SPI を介して動作します。
3 - 簡単なエラー チェック。
このスレッド: 「Simple serial point-to-point communication protocol」では、PPP が推奨されるオプションでしたが、PPP はジョブの一部しか実行しないようです。
また、PPP over Serial を特徴とする Light weight IP (LwIP) プロジェクト (これは SPI 経由で使用できると想定しています) を見つけたので、TCP/UDP などの上位層プロトコルを利用して残りの作業を行う可能性について考えました。必要なジョブ。幸いなことに、スターターウェア パッケージのイーサネット SW の一部として LwIP を含む TI を見つけました。これにより、少なくとも TI チップ側での移植が容易になると思います。
だから、私の質問は次のとおりです。
1 - この通信方式に LwIP を使用することは有効ですか? ポイント ツー ポイント (チップ レベル) 通信には必要のない IP ヘッダーが原因で、多くのオーバーヘッドが発生し、スループットが低下することはありませんか?
2 - LwIP に存在する TCP または類似のプロトコルは、送信要求のキューイングを処理しますか?プロトコルスタックによって管理されますか? もしそうなら、どのプロトコル層がそれを管理していますか?
3 - 上記の要件を満たす LwIP よりも効率的なプロトコル スタックですか?
アップデート 1: その他の考慮事項
1 - SPI が唯一の利用可能なオプションです。利用可能な GPIO と共に使用して、スレーブが送信するデータを持っていることをマスターに示します。
2 - 現在実装されている (非標準) プロトコルは、SPI を使用する DMA と、固定メッセージ フラグメント長の《STX_MsgID_length_payload_ETX》のメッセージ フォーマットを使用しますが、現在のスキームの主な欠点は、マスターがメッセージに対する応答を待機することです。 (フラグメントではない) 別のものを送信する前に、スループットを殺し、SPI の全二重の性質を利用しません。
3- この点の改善点は、フラグメントを受信するための一種のメールボックスを使用することでした。そのため、長いメッセージは優先度の高いメッセージによって中断され、単一のメッセージのフラグメントが順番に到着することはありませんが、問題は、この設計が原因であるということです。特に、コントローラー (マスター) 側でメールボックス アプローチを使用するための多くのバッファーに使用できるリソースがあまりないため、事態が複雑になります。つまり、単純なポイント ツー ポイント リンク用のプロトコル スタックを設計することによって、車輪を再発明しているように思えましたが、これは効率的ではない可能性があります。
4- 複数のセッションを確立し、メッセージのキューイング/スケジューリングを解決するために、SPI の上で通常使用できる上位レベルのプロトコルは何ですか?
更新 2:別の有用なスレッド「組み込みデバイス向けの優れたシリアル通信プロトコル/スタック?」
更新 3: Modbus プロトコルを確認しました。アプリケーション レイヤーを指定してから、シリアル ライン通信用のデータ リンク レイヤーを直接指定しているようです。これは、ネットワーク指向のプロトコル レイヤーの不要なオーバーヘッドをスキップするように聞こえます。
意図された目的のために、これは LwIP よりも優れた選択肢になると思いますか? また、LwIP のように広く使用されているオープン ソースの実装がありますが、Modbus 用ですか?