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."
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.
- 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.
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."
VSPIveHSPInedir? Pin Matrix ile pin değiştirme.- Transaction:
beginTransactionile 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.
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
- 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