-
Ethernet paketi gönderme
- Yazar, "Networking from scratch" adlı bir seri oluşturmak istedi ve bir mikrodenetleyici üzerinde TCP/IP yığını kurma projesine başladı.
- Bu blog yazısı, ilk Ethernet paketini başarıyla gönderme hikayesini ve proje sırasında karşılaşılan hatalar ile hata ayıklama deneyimlerini paylaşıyor.
-
Mikrodenetleyici
- Kullanılan mikrodenetleyici STM32F401 ve ARM Cortex-M4 tabanlı; en fazla 84MHz hızında çalışıyor.
- 96KiB RAM'e sahip olduğu için birden fazla paketi işleyebilecek yeterli kapasite sunuyor.
-
Ethernet
- Ethernet; fiziksel düzeyde donanım, sinyal biçimleri, veri yolu çakışması işleme stratejileri ve çerçeve düzenleri gibi çeşitli teknoloji ve standartları kapsayan bir kavramdır.
- Bu projede Wiznet'in W5100 çipi kullanılıyor ve bu çip yerleşik bir donanım TCP/IP yığını içeriyor.
-
Sorun 1: Boşluğa haykırmak
- W5100 çipiyle iletişim kurmak için bir sürücü yazıldı, ancak SPI sinyalleri yanlış bağlandığı için iletişim sağlanamadı.
- Sorun, Arduino shield üzerindeki ICSP başlığının SPI sinyallerini yanlış bağlamasından kaynaklandı; bunu düzeltmek için kart yeniden işlendi.
-
Sorun 2: Komedinin özü
- SPI sinyalleri doğru bağlandıktan sonra bile Ethernet paketlerinin iletimi düzgün çalışmadı.
- Dijital sinyaller bir mantık analizörüyle incelendi ve chip select sinyalinin zamanlama sorunu çözülerek iletişim başarıyla sağlandı.
-
Sorun 3: Bilinmeyen paket
- Wireshark'ta, gönderilen paket yerine hatalı bir paket görünüyordu.
- Sorun, Arduino kütüphanesi referans alınarak analiz edildi ve veriyi yanlış bellek adresine yazan hata düzeltilerek çözüldü.
-
Hikayeden çıkarılan ders
- Bir Ethernet paketi göndermek küçük bir başarı gibi görünebilir, ancak projedeki hata ve hata ayıklama deneyimleri değerlidir.
- Hata ayıklama ve araç yazımı, geliştirme sürecinin önemli parçalarıdır; sistemi keşif ve deney yoluyla anlamak önemlidir.
- Proje, daha yüksek soyutlama seviyesindeki sorunlar ve hatalar ele alınarak devam ediyor.
1 yorum
Hacker News yorumları
Araç yazmak ve hata ayıklamayı keşfetmek her zaman değerlidir. Ancak birçok insan bunu anlamıyor; özellikle de JIRA gibi geliştirme süreçlerinde keşfin değerini görmeyenler çok.
Küçük araçlar yapabilme becerisi, 10 kat üretken programcının özüdür ve bu çoğu zaman gölgelerde icra edilen bir sanattır.
Bu, mikrodenetleyici üzerinde TCP/IP ve Ethernet frame yığınını sıfırdan kuran bir serinin başlangıcı. TCP/IP işlemleri için W5100 çipi kullanılıyor ve önceden oluşturulmuş Ethernet frame'lerini destekliyor.
Kariyerini FPGA mühendisliğine çevirip Ethernet'e odaklandığını ve ağ iletişimindeki soyutlamaları anlamanın çok değerli olduğunu söyleyen bir görüş var.
STM32F401 ve W5100 Ethernet shield kullanmak yerine, STM32F407 kartı ile ucuz bir Ethernet PHY kartı kullanmanın daha iyi olacağı yönünde bir görüş var.
Ethernet işlevleri genellikle mikrodenetleyicinin içine gömülü çevre birimleri olarak bulunur.
MOSI/MISO için yeni adlandırma olan main out/subordinate in ifadesini ilk kez gördüm; COPI/CIPO alternatifi ise çok anlaşılır gelmiyor.
Linux'ta ağ yığını yazmak için
socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))kullanılabilir.STM32 Nucleo kartlarında 100Mbps Ethernet yerleşik olarak bulunuyor; STM32Cube yazılımı karışık yorumlar alsa da çalışan örnekler sunuyor.
Ethernet frame'lerle çalışır; packet ise IP'ye ait bir kavramdır.
ENC28J60 'Stand-Alone Ethernet Controller with SPI Interface' değerlendirilebilir; donanımsal TCP/IP yığını olmadığı için yazılım tarafında gerçekleme gerekir.