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.
| Mod | CPOL | CPHA | Boşta SCLK | Örnekleme kenarı | Veri değişim kenarı |
|---|---|---|---|---|---|
| 0 | 0 | 0 | LOW | Yükselen | Düşen |
| 1 | 0 | 1 | LOW | Düşen | Yükselen |
| 2 | 1 | 0 | HIGH | Düşen | Yükselen |
| 3 | 1 | 1 | HIGH | Yükselen | Düş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 (
0xFFveya0x00) 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;
}İlgili Haberleşme Protokolleri soruları
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.