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ı

  1. MAC sürücüsü: TX/RX DMA descriptor halkaları, kesme yönetimi, MAC adresi ve filtreleme.
  2. PHY yönetimi: Link up/down olaylarını izlemek ve hız/duplex bilgisini MAC'e aktarmak.
  3. TCP/IP stack: lwIP, FreeRTOS-Plus-TCP, Zephyr networking veya ticari stack'ler. ARP, IP, ICMP, UDP, TCP, DHCP, DNS içerir.
  4. 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 pbuf havuzları, TCP pencere boyutu ve MEM_SIZE RAM'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_callback kullanı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.

  1. UART, SPI ve I2C arasındaki farklar nelerdir?OrtaHaberleşme ProtokolleriEmbedded
  2. CAN bus nasıl çalışır? Arbitration, hata yönetimi ve CAN FD farkını açıklayın.ZorHaberleşme ProtokolleriEmbedded
  3. SPI'da CPOL ve CPHA nedir? Dört SPI modu arasındaki fark nasıl açıklanır?OrtaHaberleşme ProtokolleriEmbedded
  4. I2C protokolü nasıl çalışır? Adresleme, ACK/NACK ve clock stretching nedir?OrtaHaberleşme ProtokolleriEmbedded
  5. UART'ta baud rate, frame yapısı ve parity nedir? RS-485 UART'tan nasıl farklıdır?KolayHaberleşme ProtokolleriEmbedded
  6. USB nasıl çalışır? Enumeration süreci, endpoint'ler ve transfer tipleri nelerdir?OrtaHaberleşme ProtokolleriEmbedded

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle