Bir mikrodenetleyiciye Ethernet bağlantısı eklemek için donanım ve yazılım tarafında neler gerekir? MAC, PHY, RMII ve TCP/IP stack'i açıklayın.
Cevap
MCU Ethernet'i genellikle iki parçadan oluşur: MCU içindeki MAC (frame oluşturma, DMA, filtreleme) ve harici PHY çipi (fiziksel katman: kodlama, analog sinyal, link algılama). Bunlar MII/RMII arayüzüyle bağlanır, üstte ise bir TCP/IP stack çalışır.
Donanım
- PHY: LAN8742, DP83848, KSZ8081 gibi çipler. Manyetik izolasyonlu RJ45 konnektörü gerekir.
- RMII: 7-9 pin, 50 MHz referans saat. MII daha çok pin kullanır (16+), 25 MHz saat ister. Pin tasarrufu nedeniyle RMII yaygındır.
- MDIO/MDC: PHY register'larına erişim için yönetim arayüzü (link durumu, hız, auto-negotiation).
- RMII 50 MHz saatinin kaynağı (PHY mi, MCU mu, harici osilatör mü) ve PCB'de empedans kontrollü yollar tasarımın kritik noktalarıdır.
Yazılım katmanları
- MAC sürücüsü: TX/RX DMA descriptor halkaları, kesme yönetimi, MAC adresi ve filtreleme.
- PHY yönetimi: Link up/down olaylarını izlemek ve hız/duplex bilgisini MAC'e aktarmak.
- TCP/IP stack: lwIP, FreeRTOS-Plus-TCP, Zephyr networking veya ticari stack'ler. ARP, IP, ICMP, UDP, TCP, DHCP, DNS içerir.
- Uygulama protokolleri: HTTP, MQTT, Modbus TCP, TLS (mbedTLS).
Sık karşılaşılan sorunlar
- Cache coherency (Cortex-M7): DMA descriptor'ları ve tamponları ya MPU ile non-cacheable bir bölgeye konmalı ya da cache temizleme/geçersiz kılma (clean/invalidate) yapılmalıdır. Aksi halde paketler rastgele bozulur.
- DMA'nın erişemediği bir RAM bölgesine (ör. bazı STM32'lerde DTCM) tampon koymak.
- Bellek ayarı: lwIP'nin
pbufhavuzları, TCP pencere boyutu veMEM_SIZERAM'i hızla tüketir; yük testiyle boyutlandırılmalıdır. - Thread safety: lwIP'nin raw API'si thread-safe değildir. RTOS altında netconn/socket API'si veya
tcpip_callbackkullanılmalıdır. - Kabloyu çıkarıp takınca link olayını yönetmek ve DHCP'yi yeniden başlatmak.
Performans
Zero-copy RX (DMA tamponunu doğrudan pbuf olarak kullanmak), donanım checksum offload ve doğru kesme önceliği ile 100 Mbps'ye yakın UDP verimi alınabilir. TCP verimi ise genellikle RAM ve pencere boyutuyla sınırlıdır.
/* lwIP + FreeRTOS: basit bir TCP soketi */
int s = lwip_socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr = { .sin_family = AF_INET, .sin_port = PP_HTONS(502) };
lwip_bind(s, (struct sockaddr *)&addr, sizeof addr);
lwip_listen(s, 2);Not: Endüstriyel uygulamalarda tek çift kablolu 10BASE-T1L / 10BASE-T1S (Single Pair Ethernet) giderek yaygınlaşmaktadır.
İlgili Haberleşme Protokolleri soruları
- UART, SPI ve I2C arasındaki farklar nelerdir?
- CAN bus nasıl çalışır? Arbitration, hata yönetimi ve CAN FD farkını açıklayın.
- SPI'da CPOL ve CPHA nedir? Dört SPI modu arasındaki fark nasıl açıklanır?
- I2C protokolü nasıl çalışır? Adresleme, ACK/NACK ve clock stretching nedir?
- UART'ta baud rate, frame yapısı ve parity nedir? RS-485 UART'tan nasıl farklıdır?
- USB nasıl çalışır? Enumeration süreci, endpoint'ler ve transfer tipleri nelerdir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.