問題タブ [lwip]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
embedded - SPI を介したチップ間通信プロトコル
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 用ですか?
c - ボードでマルチキャスト UDP が機能しない
ネットワークを介してマルチキャストでデータを送信しています。
PC と、freeRTOS と Lwip を実行するボードにデータを送信しています。データは PC で受信されますが、ボードでは受信されません。
ボード内のコードは、PC 内のコードに正確に関連するコピーです。
igmp_leave または igmp_join の代わりに netconn_join_leave_group を使用して、NETIF_FLAG_IGMP フラグを設定することを含むさまざまな解決策を試しましたが、どちらも機能していないようです。
上記の 2 つの解決策は私の最善の策でしたが、失敗しました。私はこれを回避する方法を3日間見つけようとしていますが、役に立ちません。
android - lwIP は 4.0.0 未満の Android バージョンをサポートしていますか?
これは私の最初の質問です..私はlwIPに取り組んでいます..私は自分のステーションを接続できる独自のAPを持っています(この場合、それは私のAndroidフォンです)。電話は AP に接続されますが、電話で HTTP ページにアクセスしようとすると、接続認証エラーが表示されます。適切な tcp ハンドシェイクが行われていることを確認できる Wireshark パケットを確認しました..しかし、クライアントが GET パケットを送信するとすぐに、AP がリセット パケットを送信し、データ パケットはそれ以上交換されません..私の電話の Android バージョンは 2.2.2 です.. Android バージョン 4.0.4 を搭載した別の電話がこの AP に接続され、AP の HTTP ページにもアクセスできます。これは、Android バージョン 4.0 以降のみをサポートする lwIP に組み込まれていますか?
前もって感謝します... :)
tcp - 画像転送用の TCP または UDP
組み込みプラットフォームで lwip スタックを使用しています。イーサネット経由でボードを PC に接続しました。ボード上で実行されている私のアプリケーションは、イーサネットから画像データをダンプします。PC アプリケーションは、ヘッダーがデータをデコードして画像を表示した後、ヘッダーを待ちます。
これはデバッグ専用です。私の画像は 4MBytes で、毎秒 20 フレームを受け取ります。したがって、1 秒あたり 80MBytes のデータになります。
TCP または UDP のどちらを使用することをお勧めしますか?
TCP を使用してみましたが、送信バッファーがいっぱいになり、確認応答を受信するまで約 200 ミリ秒待機します。平均して、センサーからの 5 ~ 6 枚の画像が失われます。UDP を使用すると、これを修正できますか?
ありがとう、サティア
c - lwIP telnet の例?
小さな組み込みデバイスで lwIP を使用していくつかの実験を行っています。lwIP に付属する例がいくつかありますが、それらは役に立ちません。私が実装したいのは、接続を受け入れ、いくつかのコマンドを読み取り、接続されたクライアントにいくつかの応答を送信し、接続が中断されるか特別なクローズコマンドが送信された場合にのみ閉じるサーバー (wlIP を使用) です。
何とかtelnetサーバーに似ています。
この動作を示す利用可能な lwIP の例はありますか?
ありがとう!
udp - Lwip は MTU より大きい udp パケットを送信しますが、私の PC はそれらを再構築できません
lwip-1.4.1 と stm32f407 を使用しています。
lwip は udp パケットを pc に送信できますが、udp パケットが MTU より大きい場合、pc は再構築に失敗します。
これらのパケット コンテキストを確認するために Wireshark を使用していますが、lwip からのフラグメント化された udp パケットは、通常のフラグメント化された udp パケットと同じように見えます。
次のリンクは、wireshark からの記録です:
https://dl.dropboxusercontent.com/u/1321251/test.pcapng
ありがとう
browser - UPnP デバイスの HTML ランディング ページ
機能がかなり制限された組み込みデバイスを使用しています。ただし、UPnP サポートだけでなく、lwip スタックも備えています。問題は、現在、デバイスからのデータ転送が非常に遅いことです。ランディング ページを開くときなどに送信される http リクエストの数を最小限に抑えたいと考えています。これを最適化する方法はありますか?理想的な方法は圧縮形式ですが、ブラウザはそれを好まないと思います。