Dasar-Dasar Serial Peripheral Interface (SPI) Mikrokontroler

Gambar 1 - SPI (www.learn.sparkfun.com)

Gambar 1 – SPI (www.learn.sparkfun.com)

Pada artikel sebelumnya, kita telah mempelajari bagaimana komunikasi SPI di AVR. Sekarang, kita akan teruskan lagi belajar tentang komunikasi serial dan bagaimana Dasar-Dasar Serial Peripheral (SPI) itu sendiri.

komunikasi serial terdiri dari berbagai macam cara, seperti: USART, I2C, SPI, TWI, dll. Serial Peripheral Interface (SPI) adalah salah satu protocol komunikasi serial shyncronous yang di-develop oleh Motorola. Dalam koneksi SPI, device yang terhubung satu sama lain akan bersifat Full Duplex, yaitu ada device yang bertindak sebagai Master dan Slave.

Master device adalah perangkat yang memulai sambungan dengan cara menginialisasi SPI address dari slave device. Lalu master dan slave dapat mengirim atau menerima data. Hal ini sudah disebutkan sebelumnya bahwa komunikasi full duplex yang artinya master dan slave dapat menerima ataupun mengirim data. Slave device dapat menerima atau mengirim data dalam waktu yang bersamaan, itulah yang disebut Full Duplex.

Transaksi data dalam mode SPI

Setelah kita tahu bagaimana dan apa itu SPI, mari kita lanjutkan ke tutorial berikutnya, yaitu tentang pertukaran data dalam mode SPI. SPI beroperasi berdasarkan shift register baik master device maupun slave device, keduanya akan mempunyai 8 bit shift register. Namun tergantung dari berbagai macam arsitektur mikrokontroler, ada yang bisa memiliki 10 bit ataupun 12 bit shift register.

Untuk memulai komunikasi, bus master melakukan konfigurasi clock, dengan catatan frekuensi atau kecepatan transfer data antara SPI master device dan slave device harus sama, biasanya bisa mencapai beberapa MHz. Master akan memilih perangkat slave dengan mengeluarkan logika 0, lalu master akan menunggu proses yang telah dijadwalkan di master itu sendiri seperti uratan intrupsi timer, konversi analog ke digital (ADC), dll. Lalu setelah periode itu selesai master akan mengeluarkan clock yang pertAnda akan dimulainya proses komunikasi Serial.

Gambar 2 - Setup Hardware SPI (Wikipedia.org)

Gambar 2 – Setup Hardware SPI (Wikipedia.org)

Setiap satu clock SPI dilakukan, maka akan terjadi komunikasi full duplex antara master device dengan slave device. Master mengirimkan satu Bit pada line MISO, lalu slave akan membacanya. Setelah itu, pada line MISO slave device akan mengirimkan data kembali ke master device dan master akan membacanya. Urutan atau sekuen ini akan bertahan seperti di atas meskipun kita tidak menggunakan komunikasi Full Duplex atau hanya menggunakan satu line komunikasi saja (seperti simplex ).

Gambar 3 – SPI transfer Data (maxembedded.com)

Gambar 3 – SPI transfer Data (maxembedded.com)

Transmisi data akan melibatkan dua shift register dari beberapa ukuran data yang diberikan seperti 8 bit, 10 bit ataupun 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 hingga bit kedelapan. 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:

Gambar 4 – SPI transfer Data (maxembedded.com)

Gambar 4 – SPI transfer Data (maxembedded.com)

Pada gambar 4, bisa kita lihat saat 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. Lalu bit B0 dari slave device akan menempati bit ke 7 dari master device. Begitulah proses berulang dan terjadi setiap ada clock dari master.

Gambar 5 – SPI transfer Data (maxembedded.com)

Gambar 5 – SPI transfer Data (maxembedded.com)

Pada gambarke 5, kita bisa lihat saat 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. Lalu Bit A2 dari master device akan bergeser 1 bit ke bit 7 dari slave device. Hal ini akan berjalan sesuai dari 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.

Gambar 6 – SPI transfer Data (maxembedded.com)

Gambar 6 – SPI transfer Data (maxembedded.com)

Bisa kita lihat pada gambar 6, 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 member 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.

Gambar 7 – single master diagram interface SPI (www.eeherald.com)

Gambar 7 – single master diagram interface SPI (www.eeherald.com)

Dengan demikian, setiap clock SPI yang melakukan tranmisi 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. SPI bus interface dengan beberapa slave device akan dijelaskan dalam diagram di bawah ini:

Gambar 8 – SPI bus dengan multiple slave (www.embedded.com)

Gambar 8 – SPI bus dengan multiple slave (www.embedded.com)

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.

Jika artikel ini bermanfaat buat Anda, mohon untuk di Share because “Sharing is Caring”

Referensi:

  1. en.wikipedia.org,
  2. maxembedded.com,
  3. www.eeherald.com,
  4. www.embedded.com,
  5. learn.sparkfun.com

COMMENTS

Loading Facebook Comments ...