Peripherals etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Peripherals etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

30 Temmuz 2020 Perşembe

SPI Nedir?

Giriş


Serial Peripheral Interface (Seri Çevresel Arayüz) genel olarak devre üzeri haberleşme yapılarında kullanılır. Sensör, işlemciler arası haberleşme veya çeşitli haberleşme arayüz entegreleri ile SPI hattı üzerinden iletişim kurulabilir.

Temeller


Temel yapı olarak birimler arasında SPI hattı MOSI, MISO, SCK ve CS pininden oluşur. Full duplex olan bir haberleşmede pinler aşağıdaki gibi tanımlanır. SPI hattı bir master tarafından sürülür ve aynı hatta birden fazla slave olabilir. Her bir slave e özel CS pini bulunur. Bu koşulda master tarafında harcanan pin sayısı 3+(hattaki chip sayısı) kadardır. CS hattı genelde LOW aktiftir ancak bazı entegrelerde HIGH aktif CS olabilir.

  • MOSI: Master Out Serial Input. Veri akışı Master’dan Slave’e doğrudur.
  • MISO: Master Input Serial Output. Veri akışı Slave’den Master’a doğrudur.
  • CLK: Clock. Her zaman Master’dan Slave’lere doğrudur.
  • CS veya SS: Chip select. Her zaman Master’dan Slave’e doğrudur.



SPI hattı ile birlikte hat üzerindeki çiplerin de -özel bir izolasyon vs. yoksa- ground hatları birleştirilmelidir.

SPI’ın genel veri/frame yapısı aşağıdaki gibidir. Her bir clock darbesi ile bir bit veri transferi gerçekleşir. SPI yapısı senkron bir yapısı olduğu için megabit seviyesinde sorunsuz haberleşme imkanı sağlar. Bazı durumlarda, genellikle slave datasheetlerine göre pull-up direnç kullanmak gerekebilir. Pull-up dirençler sinyal zamanlamalarının doğru bir şekilde çalışmasını sağlar.



Kavramlar


  • Master: SPI hattını süren ana yapıdır. Genellikle miroişlemci/mikrodenetleyicidir.
  • Slave: SPI hattında bulunan slave entegrelerdir. Bir çok alternatif IC vardır. EEPROM, DAC, ADC, sensör, ekran sürücü, motor sürücü gibi çevre birimleri, CAN, Ethernet, Wifi gibi haberleşme arayüzü sağlayan entegreler SPI hattı ile çalıştırılır.


Görsel Kaynakları:
  • https://www.allaboutcircuits.com/technical-articles/spi-serial-peripheral-interface/
  • https://tr.wikipedia.org/wiki/Serial_Peripheral_Interface

UART Nedir?

Giriş


Universal Asynchronous Receiver Transmitter (Evrensel Asenkron Alıcı/Verici) kelimelerinin baş harflerinden oluşur. Adından anlaşılabileceği gibi iki ayrı birim arasında asenkron olarak gerçekleştirilen haberleşme protokolüdür. Temel prensip olarak iki tarafın haberleşme hızını bildikleri, başlangıcı, sonu belli haberleşme yapısıdır. Arada senkronlayıcı bir sinyal olmadığı için asenkron olarak isimlendirilir. Mikrodenetleyiciler veya mikroişlemciler üzerinde gerçekleştirilen uygulamalarda sıklıkla kullanılır. Arduino gibi low-level veya Raspberry Pi gibi high-level geliştirme kartlarında muhakkak karşınıza çıkar. Anlaması, uygulaması ve geliştirilmesi basit bir yapı olduğu için bir çok uygulamanın ve sistemin temelini oluşturur. Devre içi haberleşmede kullanıldığı gibi uzak mesafelere kablolu iletimde de temeli oluşturur. RS232, RS485, RS422 gibi fiziksel katmanlara da imkan verdiği için otomasyon, kontrol, ve robotik gibi bir çok alanda kullanımı vardır. Bu katmanlar ile veri kilometrelerce uzağa iletilebilir ve bir hat üzerine ikiden fazla cihaz bağlanabilir.


Temeller


Temel yapı olarak iki birim arasında Rx ve Tx çiftineden oluşur. Karşılıklı veri alış-verişi yapabilmek için RxTx çifti TxRx çifti ile eşleşerek çalışır. Full-duplex bir UART yapısında Rx, Tx bağımsız birer modül gibi çalışır.

Aşağıdaki gibi ara bir fiziksel bağlantı olmadan direkt UART haberleşmesi kullanılacaksa ground lar birleştirilmelidir. Veri Tx hattından Rx’e gider. Pinler fiziksel olarak Tx çıkış, Rx giriş modundadır.


UART’ın genel veri/frame yapısı aşağıdaki gibidir. Tx pini normal durumda HIGH konumunda bekler. LOW’a düştüğü anda frame transferi başlar. Bu noktadan sonra UART yapısı 8 biti kendi register ı üzerine kayıt eder. Eğer stop bitini de doğru şekilde alırsa bir byte alındığına dair bir flag set eder veya ilgili interrupta girer. Tx tarafında ise Tx modülü busy flag’i düşer veya ready flag’i kalkar veya complete interruptına girebilir.


Kavramlar

  • Data Frame: Aktarılan asıl veridir. 5–9 arası değişebilir/ayarlanabilir. Bazı işlemcilerde sabitte olabilir.
  • Baud rate/Bit rate: Bir bitin gönderilme frekansı. (1/baud rate) Bir bitin iletilme süresi. 1-bit start 1-bit stop bitten oluşan bir paketin gönderilme süresi (10/baud rate) kadar sürer.
  • Start Bit: Başlangıç bitidir. Standard bir yapıda (1/baud rate) kadar sürer ve LOW seviyedir.
  • Stop Bit: Sonlandırma bitidir. Standard bir yapıda (1/baud rate) kadar sürer ve HIGH seviyedir. Bir hatadan dolayı LOW olarak okunursa ilgili paket hatalı olarak sınıflandırılır.
  • Parity Bit: Doğrulama bitidir. Genelde opsiyonel olarak kullanılır. Bir paket içerisindeki bitlere göre hesaplanır. Even veya Odd seçilir. Bu koşula göre hesaplanan bit pakete uygunsa paket sağlamdır. Değilse paket içerisinde hatalı bir bit vardır.

Lojik Seviye


Bu kısımda yer alan bilgiler lojik tasarım ile ilgilenen kişilerin ilgisini çekebilir. FPGA, CPLD gibi yapılarda UART modülü aşağıdaki mantıklar çerçevesinde tasarlanır. Modüllerin giriş çıkışları kullanılacak yapılara göre farklı şekillerde genişletilebilir. Örnek olarak hiç bir veriyi kaçırmamak için UART RX modülünün arkasına bir FIFO yapısı bağlanır ve ana kontrol modülü verileri FIFO üzerinden çeker. Bu durumda RX modülü ile FIFO’nun senkron çalışması için -varsa- gereken kontrol pinleri eklenir.

Bu kısımda genellikle modüllerin RTL gösterimi yer alacaktır. RTL lojik tasarımlarda register-transfer level gösterimidir.

RX Bloğu


Alıcı yapı, belirlenen UART hızının birkaç katı hızla çalışır. Örnek olarak STM32 işlemcilerde 8 veya 16 örneklem alır. Bunun sebebi alınan frame i doğrulamaktır. Bir bit gelecek zamanda farklı değerler okunursa o frame hatalı kabul edilir.

rx hattından yeni bir veri gelip iletim tamamlandığında Data_ready çıkışı HIGH olur ve ana kontrol yapısı Data_output üzerinden register a yazılan veri okunur.

TX Bloğu


Gönderici yapı alıcı yapıya göre daha basittir. Kendi içerisindeki paralel veriyi txTrigger sinyali ile UART baud rate hızında seri hattan gönderir. Genellikle ek bir doğrulama veya kontrol gerekmez.

Data_input hattındaki veri start pininin tetiklemesiyle iletime başlar ve frame yapısına uygun olarak(start bit, stop bit, parity) veri tx pini üzerinden aktarılır. Parity hesabının nasıl yapıldığı aşağıdaki şekilde de gösterilmiştir.



Görsel Kaynakları:
  • https://www.slideshare.net/n380/uart-vhdl-rtl-design-tutorial
  • https://www.allaboutcircuits.com/technical-articles/back-to-basics-the-universal-asynchronous-receiver-transmitter-uart/


STM32 HAL Kütüphanesinde Başlangıçtan Sonra IO Pinin Yönünü/Direction Değiştirme #STM32Tips

STM32 HAL kütüphanesinde, başlangıç sonrasında bir GPIO pininin yönünü kolayca değiştirebilecek bir fonksiyon doğrudan sağlanmamaktadır. Bu ...