Tôi biết nó đã cũ, nhưng tôi tình cờ đã làm điều này với một dspice năm ngoái, vì vậy tôi sẽ tóm tắt vì lợi ích của người khác.
Đầu tiên, tôi sẽ không sử dụng W5100, nhưng anh trai của nó là W5500 , về cơ bản là bản sửa đổi và sử dụng SPI tốt hơn nhiều. Tôi cũng sẽ xem xét chuyển sang một phần có DMA, đặc biệt nếu bạn chỉ muốn làm cho nó thành UDP.
Trong cả hai trường hợp, bạn có thể sẽ sử dụng ngăn xếp Microchip MLA TCP / IP, Wiznet cung cấp các bản vá cho việc này.
Thật không may, tất cả các biến thể ngăn xếp TCP / IP của Microchip dường như thực hiện chặn giao tiếp qua SPI (không có DMA, không có chế độ bộ đệm nâng cao) . Tôi đã cố gắng cắt nó xuống chỉ còn UDP và cắt toàn bộ phần vi mạch (sử dụng trình điều khiển cơ bản wiznet trực tiếp và viết lại trong quá trình này).
Tôi cũng đồng ý với MJH rằng PIC18F97J60 kích hoạt DMA là lựa chọn tốt hơn so với PIC rẻ hơn với ENC (trừ khi số lượng của bạn thực sự cao), nhưng tôi hơi thất vọng vì TCP / IP không thực sự sử dụng các lợi ích của J60, gắn bó đến mẫu số chung thấp nhất.
Ưu điểm của việc sử dụng phần IP thay vì phần ethernet là bạn có thể giới hạn ổ cắm ở một cổng nhất định và bạn sẽ không phải chuyển bất kỳ lưu lượng không liên quan nào qua liên kết SPI của mình. W5500 có 4KB trên mỗi ổ cắm và tôi sử dụng một ổ cắm riêng để nhận và gửi để tối đa hóa việc sử dụng bộ đệm.
Ngăn xếp UDP hiện tại của tôi chỉ phản ứng trên ngắt wiznet và không tải xuống dữ liệu tải trọng mà nó không cần. Tôi sử dụng nó UDP, dựa trên gói (không có luồng) và sử dụng các chương trình phát sóng trên các cổng để gửi (để tránh phải lưu trữ dữ liệu MAC cho các mục đích ARP, mặc dù nhìn lại có lẽ không phải là sự tối ưu hóa tốt nhất).
Trên 60MIPS, một roundtrip (nhận một gói nhỏ, trả lời với một gói nhỏ) mất khoảng 100-120us, trong đó khoảng 10-12us là thời gian CPU trong ba khối khác nhau (nhận trước (3-5us), nhận bài và đặt trước (5-7 chúng tôi tùy thuộc) và gửi bài (2us). Cứ sau 2kb tôi phải thực hiện một số bảo trì đó là khoảng 40us thời gian treo tường và 5us thời gian CPU.
Các lệnh ngắn được thực hiện bằng cách sử dụng bộ đệm nâng cao. Lâu hơn được thực hiện bằng cách sử dụng DMA (trên dspice, DMA cần 2 bit thời gian giữa các byte (hoặc từ ở chế độ 16 bit), bộ đệm nâng cao thì không).
Bộ này chưa (chưa) mở, nhưng nếu sb cần con trỏ, vui lòng trả lời trong các bình luận. Tôi dự định chuyển stack sang pic32 (mk) trong năm tới.