古いことは知っていますが、昨年dspを使用してこれを実行したことがあるので、他の人の利益のために要約します。
最初に、私はW5100を使用しませんが、その兄弟であるW5500は基本的にリビジョンであり、SPIをはるかによく利用しています。特にUDPのみにしたい場合は、DMAのあるパーツに切り替えることも検討します。
どちらの場合も、おそらくMicrochip MLA TCP / IPスタックを使用します。Wiznetは、このためのパッチを提供しています。
残念ながら、すべてのMicrochip TCP / IPスタックバリアントは、SPIを介した通信をブロックしているようです(DMAなし、拡張バッファーモードなし)。私はそれをUDPのみに削減しようとし、マイクロチップ部分全体をクリップしました(wiznetの基になるドライバーを直接使用し、その過程でそれを書き直しました)。
MJHにも同意します。DMAが有効なPIC18F97J60は、ENCを備えた安価なPICよりも優れた選択肢です(数値が実際に高い場合を除く)。しかし、TCP / IPがJ60の利点を実際に利用していないことには、少しがっかりしました。最小公分母に。
イーサネット部分の代わりにIP部分を使用する利点は、ソケットを特定のポートに制限できることであり、SPIリンクを介して無関係なトラフィックを転送する必要がありません。W5500のソケットごとに4KBがあり、バッファの使用率を最大にするために、受信と送信に別々のソケットを使用しています。
現在のUDPスタックはwiznet割り込みにのみ反応し、必要のないペイロードデータをダウンロードしません。私はそれをUDP、パケットベース(ストリームなし)で使用し、送信にはポートでブロードキャストを使用します(ARPの目的でMACデータをキャッシュする必要を回避するためですが、振り返ってみると、最適な最適化ではない可能性があります)。
60MIPS dspiceでは、往復(小さなパケットを受信し、小さなパケットで応答する)に約100〜120usかかります。そのうち約10〜12usは、3つの異なるチャンク(受信前(3〜5us)、受信後および送信前)のCPU時間です。 (5-7 usに依存します)とpost send(2us)。2kbごとに、約40usのウォールタイムと5usのCPU時間であるメンテナンスを行う必要があります。
短いコマンドは、拡張バッファを使用して行われます。DMAを使用してより長く実行されます(dspiceでは、DMAはバイト間で2ビットの時間を必要とします(または16ビットモードのワードが必要ですが、拡張バッファーは必要ありません)。
スイートは(まだ)開いていませんが、sbにポインターが必要な場合はコメントで返信してください。来年にはスタックをpic32(mk)に移植する予定です。