Pengantar
SPI (Serial Peripheral Interface) merupakan komunikasi serial synchronous yang berarti harus menggunakan clock yang sama untuk mensinkronisasi deteksi bit pada receiver. Biasanya hanya digunakan untuk komunikasi jarak pendek dengan mikrokontroler/device lain. Bus SPI dikembangkan untuk menyediakan komunikasi dengan kecepatan tinggi.

SPI melibatkan master dan slave. Keduanya mengirimkan dan menerima data secara terus menurus. Master menyediakan clock dan data 8 bit pada pin Master-Out-Slave-In (MOSI) dimana data tersebut ditransfer satu bit per pulsa clock menuju pin MOSI pada slave. Delapan bit data juga diberikan dari slave ke master melalui pin Master-In-Slave-Out (MISO) menuju pin MISO pada master. Biasanya pin 𝑆𝑆 (slave select) diberi ground (active low) untuk menjadikannya/mengaktifkannya sebagai slave.
Bus SPI
Master dan slave terhubung dalam 4 jalur. Setiap jalur ini mempunyai informasi dan membawa sinyal tertentu yang ditentukan oleh protocol bus SPI.
- MOSI (Master Output Slave Input) --> sinyal output dari master device yang merupakan shift register dari master menuju input dari slave.
- MISO (Master Input Slave Output) --> input master device untuk menerima data shift register dari slave device menuju master.
- SCK atau SCLK (Serial Clock) --> clock yang dihasilkan master --> berguna mensinkronisasi komuniaksi SPI dan untuk melakukan pergeseran terhadap shift register dari kedua device (slave & master).
- SS’ (Slave Select), ini adalah pin yang digunakan untuk memilih slave yang akan diajak berkomunikasi oleh master. (dengan asumsi lebih dari satu slave device)
- Sinyal MOSI, SCK, dan SS berasal dari master untuk dikirim ke slave. Sedangkan MISO digunakan untuk menerima sinyal dari slave. Berikut ini adalah diagram interface antara master dan slave device.

Transmisi Data SPI
Setiap satu clock SPI dijalankan, maka akan terjadi komunikasi full duplex antara master device dengan slave device. Master mengirimkan satu Bit pada jalur MOSI, lalu slave akan membacanya. Setelah itu, pada jalur MISO slave device akan mengirimkan data kembali ke master device dan master akan membacanya. Urutan atau sekuen ini akan berjalan terus seperti di atas meskipun kita tidak menggunakan komunikasi Full Duplex atau hanya menggunakan satu line komunikasi saja (seperti simplex).
Transmisi data akan melibatkan dua shift register dengan ukuran data yang dipilih seperti 8 bit, 10 bit atau 12 bit. Namun pada umunya digunakan 8 bit shift register. Keduanya akan terkoneksi dalam topologi ring secara virtual. Data yang dikirimkan biasanya akan bergeser satu per satu dari bit pertama (A0 atau B0) hingga bit kedelapan (A7 atau B7). Setelah register bergeser keluar, berarti master dan slave sudah bertukar data. Lalu selanjutnya akan bergantian slave dan master. Jika data yang dikirim banyak, maka shift register akan diisi ulang dengan data yang baru. Lalu proses pengirimannya pun diulang. Proses pengiriman akan dihentikan jika master mengirim sinyal toggle untuk mengakhiri pemilihan slave. Untuk lebih jelasnya, mari kita lihat gambar berikut ini:

Pergeseran Data SPI
Pada saat clock pertama dari master memberikan tanda ke slave device, shift register akan menggeser data bit A0 dari master, menempati bit ke 7 slave. Lalu bit B0 dari slave device akan menempati bit ke 7 dari master device. Begitulah proses berulang dan terjadi setiap ada clock dari master.

Pada saat clock ke 3 dari master memberikan tanda ke slave, shift register menggeser nilai dari bit B2 slave menempati bit ke 7 master. Lalu Bit A2 dari master akan menempati bit ke 7 dari slave device. Hal ini akan berjalan sesuai dari perintah clock dari master. Data dari tiap bit baik dari master maupun slave akan bergeser 1 bit sesuai dengan clock dari master. Selanjutnya kita akan melihat apa yang terjadi saat clock mencapai hitungan ke 8.
Saat clock ke-8, semua data sudah berpindah dari master ke slave dan dari slave ke master. Hal ini membuktikan bahwa komunikasi SPI adalah komunikasi serial full duplex. Biasanya clock akan memberi tanda bahwa komunikasi SPI akan berakhir dan master akan mengulangi memilih slave device.

Multi Komunikasi SPI
Seperti yang telah dijelaskan sebelumnya, Bus SPI memungkinkan terdiri dari beberapa slave device dan hanya ada 1 master. Namun jarang terjadi mengingat setting clock yang kompleks dan sangat susah.
Pada Multiple Slave, Pin SS lah yang akan berfungsi untuk memilih slave mana yang akan menerima dan mengirim data. Pins SS ini mempunyai konfigurasi active low, yang berarti harus diberikan pulsa 0 untuk memilih slave yang akan diajak bertukar data.

LANGKAH-LANGKAH TRANSMISI DATA SPI
1. Master mengirimkan sinyal clock:

2. Master mengubah pin SS/CS menjadi LOW, yang akan mengaktifkan slave:

3. Master mengirimkan data ke slave satu bit tiap satuan waktu (pulsa clock) melalui jalur MOSI dan slave akan membaca bit tersebut saat diterima:

4. Jika diperlukan respon, slave mengirimkan data ke master satu bit tiap satuan waktu (pulsa clock) melalui jalur MISO dan master akan membaca bit tersebut saat diterima:

KEUNTUNGAN DAN KEKURANGAN SPI
Ada beberapa keuntungan dan kekurangan dalam menggunakan SPI, dan Anda harus tahu kapan harus menggunakan SPI agar sesuai dengan kebutuhan proyek Anda:
KEUNTUNGAN
- Tidak ada bit awal dan akhir, sehingga data dapat dikirim/diterima secara terus menerus tanpa interupsi
- Tidak ada sistem penentuan alamat slave yang rumit seperti pada I2C
- Kecepatan transfer data yang lebih tinggi dibandingkan I2C (hampir dua kali lebih cepat)
- Data dapat dikirim dan diterima secara bersamaan karena jalur MISO dan MOSI terpisah.
KEKURANGAN
- Menggunakan empat kabel (I2C dan UART menggunakan dua kabel)
- Tidak ada pengecekan bahwa data telah berhasil diterima (I2C memiliki fitur ini)
- Tidak ada pemeriksaan kesalahan seperti bit paritas pada UART
- Hanya memiliki satu master saja.
One thought on “Komunikasi Menggunakan SPI (Serial Peripheral Interface)”