Pada artikel kali ini, Arduino Indonesia akan membahas
tentang dasar-dasar Serial Peripheral Interface (SPI) mikrokontroler.
Komunikasi serial terdiri dari beberapa cara, yaitu USART, 12C, SPI, TWI dan
lain sebagainya. SPI merupakan salah satu protokol komunikasi serial shyncronous
yang di-develop oleh Motorola. Koneksi SPI yaitu device yang terhubung satu
sama lain akan bersifat Full Duplex yang berarti ada device yang bertindak
sebagai Master dan Slave.
Master device yaitu perangkat yang memulai sambungan dengan
cara menginisialisasi SPI address dari slave device. Kemudian master dan slave
bisa mengirim atau pun menerima data. Hal ini dikarenakan komunikasi full
duplex yang artinya master dan slave bisa menerima atau pun mengirim data. Slave
device bisa mengirim atau menerima data dalam waktu yang bersamaan. Oleh karena
itu disebut Full Duplex.
Transaksi Data dalam Mode SPI
Pembahasan selanjutnya yaitu tentang pertukaran data dalam
mode SPI. SPI beroperasi berdasarkan shift register baik master device maupun
slave device. Dimana keduanya akan memiliki 8 bit shift register. Akan tetapi
tergantung dari berbagai macam arsitektur mikrokontroler, ada yang bisa
memiliki 10 bit atau pun 12 bit shift register.
Bus master melakukan konfigurasi clock untuk memulai
komunikasi, dengan catatan frekuensi atau kecepatan transfer data antara SPI
master device dan slave device harus sama yang biasanya bisa mencapai beberapa
MHz. Master device akan memilih perangkat slave device dengan mengeluarkan
logika 0, kemudian master device akan menunggu proses yang telah dijadwalkan di
master device itu sendiri seperti uratan interupsi timer, konversi analog ke
digital (ADC) dan lain sebagainya. Setelah periode tersebut selesai, maka
master device akan mengeluarkan clock yang pertanda akan dimulainya proses
komunikasi serial.
Setiap dilakukan satu clock SPI, maka akan terjadi komunikasi
full duplex antara master device dengan slave device. Master device mengirimkan
satu bit pada line MISO, kemudian slave device akan membacanya. Setelah itu,
pada line MISO slave device akan mengirimkan data kembali ke master device dan
master device akan membacanya. Urutan ini akan bertahan meskipun kita tidak
menggunakan komunikasi Full Duplex atau hanya menggunakan satu line komunikasi
saja (seperti simplex).
Transmisi data akan melibatkan dua shift register dari
beberapa ukuran data yang diberikan seperti 8 bit, 10 bit atau pun 12 bit yang
sering digunakan yaitu 8 bit shift register. Keduanya akan terkoneksi dalam
topologi ring secara virtual. Biasanya data yang dikirimkan akan bergeser satu
per satu dari bit pertama hingga bit ke delapan. Setelah register bergeser
keluar, berarti master device dan slave device sudah bertukar data. Kemudian
akan bergantian slave device dan master device. Jika data yang dikirim banyak,
maka shift register akan diisi ulang dengan data yang baru. Kemudian proses
pengirimannya pun diulang. Proses pengiriman akan dihentikan jika master device
mengirim sinyal toggle untuk mengakhiri pemilihan slave device.
Ketika clock dari master memberikan tanda
ke slave device, shift register akan menggeser data di bit A0 dari master,
menempati bit ke 7 dari slave device. Kemudian bit B0 dari slave device akan menempati
bit ke 7 dari master device. Begitulah proses berulang dan terjadi setiap ada
clock dari master.
Ketika clock ke 3 dari
master device yang mengakibatkan shift register menggeser nilai dari slave di
bit B2 berpindah menempati bit ke 7 dari master device. Kemudian bit A2 dari
master device akan bergeser 1 bit ke bit 7 dari slave device. Hal ini akan
berjalan sesuai dengan perintah clock dari master. Data dari tiap bit baik dari
master maupun slave device akan bergeser 1 bit sesuai dengan clock dari master.
Selanjutnya kita akan melihat apa yang terjadi saat clock mencapai hitungan ke
8.
Bisa kita lihat pada gambar di atas, 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
SPI akan berakhir dan master akan mengulangi untuk memilih slave device. Jika Anda masih bingung, saya akan menyimpulkan dari hal di
atas :
1. Kedua device baik master maupun slave akan menempatkan
data yang akan ditransfer ke dalam shift register mereka sebelum komunikasi
serial dimulai.
2. Master menghasilkan 8 pulsa untuk menggeser nilai setiap
bit yang ada pada shift register baik slave maupun master. Setelah 8 clock
selesai, master akan memberikan 1 bit informasi sebagai tanda komunikasi dan
sebaliknya dari slave ke master.
3. Setelah 8 clock selesai, master akan menerima data dari
slave yang sudah ada di shift register master dan slave akan menerima data dari
master yang tersimpan di shift register slave device.
Antarmuka Bus SPI
Setelah sudah jelas bagaimana master dan slave bisa
berkomunikasi, lalu kita akan membahas deskripsi bus SPI dan antarmuka antara
slave dan master. Master dan slave terhubung dalam 4 jalur. Setiap jalur ini
mempunyai informasi dan membawa sinyal tertentu yang didefinisikan oleh
protocol dari bus SPI. Keempatnya adalah :
1. MOSI (Master Output Slave Input), ini adalah sinyal output
dari master device yang merupakan shift register dari master menuju input dari
slave.
2. MISO (Master Input Slave Output), ini adalah input dari
master device untuk menerima data shift register dari slave device menuju
master.
3. SCK atau SCLK (Serial Clock), ini adalah clock yang
dihasilkan master yang berguna menAndakan komuniaksi SPI dan untuk melakukan
shifting terhadap shift register dari kedua device.
4. SS’ (Slave Select), ini adalah pin yang digunakan untuk
memilih slave mana 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. Dengan demikian, setiap clock SPI yang melakukan transmisi
full duplex akan mengalami:
• Master mengirimkan satu bit ke slave, lalu slave device
akan membacanya dalam line yang sama.
• Slave mengirimkan satu bit ke master, lalu master juga
membacanya dalam line yang sama.
Multiple Slave SPI Mode
Seperti yang telah dijelaskan sebelumnya, bus SPI
memungkinkan terdiri dari beberapa slave device dan hanya ada 1 master. Namun
sangat 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 kita harus memberikan pulsa 0 untuk
memilih slave yang akan kita ajak bertukar data.
Semua PIN MISO, MOSI dan SCK dari master akan terkoneksi
secara parallel ke 3 Slave device. Namun ada 3 pin SS dari master yang
masing-masing pin nya terpisah dan hanya terkoneksi ke pin SS dari setiap
slave. Pin SS lah yang akan bergantian memilih slave mana yang akan diajak
berkomunikasi dengan master. Sebagaicontoh, pin SS1 akan memberikan logic low
ke pin SS dari Slave 1. Berarti Slave device yang akan bertukar data adalah
slave 1 dengan master, dan seterusnya.
Namun sebagai catatan untuk menghindari tabrakan data, kita
tidak boleh memberi logic low atau 0 kepada Pin SS1, SS2, SS3 secara
bersamaaan. Untuk bergantian, kita harus menunggu transfer data telah selesai
dari satu slave, lalu kita memberikan logic 1 ke slave tersebut yang berarti
slave 1 telah idle. Baru saat komunikasi sudah selesai dengan slave 1, maka
kita bisa membuat pin SS2 menjadi 0 atau low dan memulai komunikasi dengan
slave 2, dan seterusnya sampai kembali lagi ke slave 1.