Skip to content

Latest commit

 

History

History
127 lines (94 loc) · 4.3 KB

File metadata and controls

127 lines (94 loc) · 4.3 KB

🚀 Gömülü SPI Haberleşme Rehberi

Saha tecrübeleriyle harmanlanmış, ESP32 ve Gömülü Sistemler için kapsamlı SPI (Serial Peripheral Interface) başvuru kaynağı.
"I2C bir toplantı odası sohbeti ise, SPI bir itfaiye hortumudur."


📖 Proje Hakkında

SPI, gömülü sistemlerin **"Hız Canavarı"**dır. Teoride basittir (Shift Register mantığı), ancak 10 MHz sınırını aştığınızda işler değişir. Kablolar birer "İletim Hattı"na dönüşür, sinyaller yansıma yapar (Reflection) ve yanlış Mod seçimi (CPOL/CPHA) verileri çöp eder.

Bu repo, laboratuvarda çalışan kodların sahada neden durduğunu açıklar ve Logic Analyzer / Osiloskop destekli çözüm yolları sunar.

🎯 Neleri Kapsar?

  • Fizik: Push-Pull yapısı, Neden direnç takmıyoruz? Sinyal Yansıması ve Seri Direnç kullanımı.
  • Protokol: 4 Farklı SPI Modu (CPOL/CPHA), Shift Register mantığı ve Daisy Chain.
  • Entegrasyon: ESP32 SPI.h, Transaction (İşlem) güvenliği, DMA ile asenkron veri basma.
  • Sorun Giderme: Bit Kayması (Bit Shifting), Crosstalk (Sinyal karışması) ve Analiz.

📚 Bölümler (İçindekiler)

Bu rehber, birbirini tamamlayan 4 ana teknik bölümden oluşur:

"Pull-up direnci takmalı mıyım? Hayır!"

  • Push-Pull vs Open-Drain farkı.
  • İsimlendirme Devrimi: MOSI/MISO yerine COPI/CIPO.
  • Sinyal Bütünlüğü: 33Ω Seri Direnç ne işe yarar?

"Veriler neden kayık geliyor?"

  • Shift Register ve dairesel veri takası.
  • Mod Kabusu: CPOL ve CPHA kombinasyonları (Mod 0, 1, 2, 3).
  • Daisy Chain: Tek CS pini ile vagon gibi dizilmiş cihazları sürmek.

"80 MHz hızında ekran sürerken işlemciyi kitlememek."

  • VSPI ve HSPI nedir? Pin Matrix ile pin değiştirme.
  • Transaction: beginTransaction ile ayarları korumak.
  • DMA (Direct Memory Access): CPU'yu yormadan veri transferi.

"Osiloskopta kare dalga yerine dikenler görüyorum!"

  • Crosstalk: Kablolar birbirini etkilerse ne olur?
  • Bit Shifting: Yanlış saat kenarı (Edge) seçimi.
  • Logic Analyzer: Hatalı paketi yakalamak.

🏗️ Sistem Mimarisi

Tipik bir yüksek hızlı SPI ağının blok şeması:

graph TD
    subgraph MCU [Master Kontrolcü]
    ESP32[ESP32 - SPI Driver]
    DMA[DMA Kontrolcüsü]
    end

    subgraph BUS [SPI Veri Yolu - Push Pull]
    SCK_LINE((SCK))
    MOSI_LINE((MOSI))
    MISO_LINE((MISO))
    CS_LINES((CS Hatları))
    R_SERIES[33Ω Seri Dirençler]
    end

    subgraph SLAVES [Slave Cihazlar]
    TFT["TFT Ekran (Write Only)"]
    SENSOR[IMU Sensör]
    SD[SD Kart]
    end

    ESP32 <--> DMA
    ESP32 ==> R_SERIES ==> BUS
    BUS <==> TFT & SENSOR & SD
    ESP32 -.-> CS_LINES -.-> TFT & SENSOR & SD

    style MCU fill:#e3f2fd,stroke:#1565c0
    style BUS fill:#fff9c4,stroke:#fbc02d
    style SLAVES fill:#f3e5f5,stroke:#7b1fa2
Loading

🛠 Kullanılan Araçlar

  • Mikrodenetleyici: Espressif ESP32 (DevKit V1)
  • IDE: VS Code + PlatformIO
  • Protokol: SPI (Standart & Daisy Chain)
  • Donanım: Logic Analyzer (Saleae), Osiloskop (Rigol)
  • Kütüphaneler: Arduino SPI.h, TFT_eSPI


Bu proje açık kaynaklıdır ve topluluğun katkılarına açıktır. PR göndermekten çekinmeyin!