Saya tahu ini sudah tua, tetapi saya telah melakukan ini dengan dspice tahun lalu, jadi saya akan meringkasnya untuk keuntungan orang lain.
Pertama, saya tidak akan menggunakan W5100, tetapi saudaranya W5500 , yang pada dasarnya adalah revisi, dan menggunakan SPI jauh lebih baik. Saya juga akan mempertimbangkan beralih ke bagian yang memiliki DMA, khususnya jika Anda ingin membuatnya hanya UDP.
Dalam kedua kasus Anda mungkin akan menggunakan tumpukan Microchip MLA TCP / IP, Wiznet menyediakan tambalan untuk ini.
Sayangnya, semua varian Microchip TCP / IP stack tampaknya melakukan pemblokiran komunikasi melalui SPI (tidak ada DMA, tidak ada mode buffer yang ditingkatkan) . Saya mencoba untuk memotongnya menjadi hanya UDP dan memotong seluruh bagian microchip (menggunakan driver yang mendasari wiznet secara langsung dan menulis ulang dalam proses).
Saya juga setuju dengan MJH bahwa DMA yang diaktifkan PIC18F97J60 adalah pilihan yang lebih baik daripada PIC yang lebih murah dengan ENC (kecuali jika Anda angkanya sangat tinggi), tetapi saya agak kecewa bahwa TCP / IP tidak benar-benar memanfaatkan manfaat dari J60, menempel ke penyebut umum terendah.
Keuntungan menggunakan bagian IP daripada bagian ethernet adalah Anda dapat membatasi soket ke port tertentu, dan Anda tidak perlu mentransfer lalu lintas yang tidak terkait melalui tautan SPI Anda. W5500 memiliki 4KB per soket, dan saya menggunakan soket terpisah untuk menerima dan mengirim untuk memaksimalkan pemanfaatan buffer.
Tumpukan UDP saya saat ini hanya bereaksi pada interupsi wiznet, dan tidak mengunduh data payload yang tidak diperlukan. Saya menggunakannya UDP, meskipun berbasis paket (tidak ada aliran), dan menggunakan siaran pada port untuk mengirim (untuk menghindari harus cache data MAC untuk keperluan ARP, meskipun dalam retrospeksi yang mungkin bukan opimization terbaik).
Pada dspice 60MIPS, perjalanan bolak-balik (menerima paket kecil, menjawab dengan paket kecil) memakan waktu sekitar 100-120us, di mana sekitar 10-12us adalah waktu CPU dalam tiga bagian yang berbeda (pra terima (3-5us), pos terima dan kirim (5-7 kita tergantung) dan mengirim kirim (2us) .Setiap 2kb saya harus melakukan pemeliharaan yaitu sekitar 40us waktu dinding dan 5us waktu CPU.
Perintah pendek dilakukan menggunakan buffer yang disempurnakan. Lebih lama dilakukan menggunakan DMA menggunakan (pada dspice, DMA membutuhkan 2 bit waktu antara byte (atau kata-kata dalam mode 16-bit), buffer ditingkatkan tidak).
Suite tidak (belum) terbuka, tetapi jika sb membutuhkan petunjuk, silakan balas dalam komentar. Saya berencana untuk port stack ke pic32 (mk) di tahun mendatang.