SPI'da CPOL ve CPHA nedir? Dört SPI modu arasındaki fark nasıl açıklanır?

Cevap

SPI, senkron, full-duplex ve master-slave bir protokoldür. Hatlar: SCLK, MOSI (master out), MISO (master in), CS/SS (chip select, genelde aktif-düşük). Adresleme yoktur; her slave için ayrı CS hattı kullanılır. Onlarca MHz hıza çıkabilir ve ACK mekanizması yoktur.

CPOL ve CPHA

  • CPOL (Clock Polarity): Boşta saat seviyesi. 0 ise boşta LOW, 1 ise boşta HIGH.
  • CPHA (Clock Phase): Verinin hangi kenarda örnekleneceği. 0 ise ilk (leading) kenarda örnekle, 1 ise ikinci (trailing) kenarda örnekle.
ModCPOLCPHABoşta SCLKÖrnekleme kenarıVeri değişim kenarı
000LOWYükselenDüşen
101LOWDüşenYükselen
210HIGHDüşenYükselen
311HIGHYükselenDüşen

Mode 0 ve Mode 3 en yaygın olanlardır; birçok cihaz ikisini de destekler. Mod, slave'in datasheet'indeki timing diyagramından okunur. Yanlış mod seçilirse veri genellikle 1 bit kaymış gelir; bu, mod hatasının tipik belirtisidir.

Pratik notlar

  • CS zamanlaması: Bazı cihazlar CS düştükten sonra ilk saat kenarına kadar minimum süre (setup) ister. Bazıları her byte'ta değil, tüm komut boyunca CS'nin LOW kalmasını şart koşar; donanım NSS yönetimi yerine CS'yi GPIO ile kontrol etmek daha esnektir.
  • Full-duplex doğası: Okuma yapmak için bile master saat üretmek, yani dummy byte (0xFF veya 0x00) göndermek zorundadır.
  • Bit sırası: Genelde MSB önce; LSB-first destekleyen cihazlar vardır.
  • Daisy chain: Bazı cihazlar (shift register, LED sürücü) tek CS ile zincirlenebilir.
  • MISO paylaşımı: CS'si pasif olan slave MISO'yu high-Z yapmalıdır; yapmayan cihazlar için tampon gerekir.
  • Yüksek hızda uzun kablolar ve sinyal bütünlüğü sorun olur; SPI kart içi haberleşme içindir.
uint8_t spi_xfer(uint8_t tx) {
    while (!(SPI1->SR & SPI_SR_TXE));
    *(volatile uint8_t *)&SPI1->DR = tx;
    while (!(SPI1->SR & SPI_SR_RXNE));
    return *(volatile uint8_t *)&SPI1->DR;
}
  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. I2C protokolü nasıl çalışır? Adresleme, ACK/NACK ve clock stretching nedir?OrtaHaberleşme ProtokolleriEmbedded
  4. UART'ta baud rate, frame yapısı ve parity nedir? RS-485 UART'tan nasıl farklıdır?KolayHaberleş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