Kamis, 25 Februari 2016

Komunikasi I2C (Inter-Integrated Circuit) atau TWI (Two Wire Interface) Bagian 1

I2C (Inter-Integrated Circuit) atau TWI (Two Wire Interface) bagian 1

I2C dilapalkan dengan (I Squared C), umumnya ditulis dengan I2C, adalah diciptakan pertama kali oleh Philips Semiconductors. Dengan metode ini komunikasi device yang dilengkapi dengan I2C protokol dapat dilakukan hanya dengan mempergunakan dua kabel. Pengiriman/penerimaan informasi/data secara serial dengan mempergunakan data line (SDA = Serial Data) dan sebuah sumber clock (SCL = Serial Clock). Kedua kabel, kabel data (SDA) dan kabel clock (SCL), harus di-Pull-UP dengan resistor eksternal. Gambar 1 memperlihatkan contoh arsitektur I2C dengan satu master, yang bertindak sebagai mater adalah UC, dan beberapa slave.

Gambar 1. Metode Komunikasi I2C

     Master adalah yang menguasai bus sehingga ia mengendalikan/menghasilkan serial clock dan juga membangkitkan sinyal START dan sinyal STOP. Jadi Master yang menentukan kapan komunikasi dimulai dan komunikasi diakhiri. Sementara Slave menunggu/membaca perintah dari master apakah harus menerima/menulis data atau mengirim data ke Master. Slave tidak boleh membangkitkan pulsa clock (serial clock). Atau dapat disimpulkan Master dapat mengirim atau menerima data dari Slave dan sesama slave tidak boleh berkomunikasi.
        Pada komunikasi serial secara I2C, meskipun serial clock berasal dari Master, namun Slave dapat menahan pulsa clock, pulsa clock berada dalam keadaan low, jika slave belum siap untuk menerima data. Hal ini biasanya terjadi pada peralatan yang lambat. Serial clock pada komunikasi ini harus bersumber dari Clock yang dibangkitkan oleh Master, tidak boleh berasal dari sumber yang lain.
     Gambar 2 memperlihatkan format pembacaan/pengiriman data dari Master ke Slave dengan mempergunakan komunikasi serial I2C. Komunikasi antara Master dengan Slave dimulai dengan membangkitkan pulsa START oleh Master. Pulsa START dibaca oleh Slave pada bus SDA dalam keadaan LOW pada saat pulsa clock dalam keadaan HIGH. Setelah pulsa START dikirimkan, maka pada clock berikutnya Master mengirimkan 8 bit alamat, yang dikirimkan secara serial melalui bus SDA, ke Slave dengan format B6, B5, B4, B3, B2, B1, B0, dan R/W. Bit alamat tersebut mengandung informasi R/W pada LSB. Jika LSB pada byte alamat “1” maka master ingin membaca data dari Slave tetapi jika LSB byte alamat “0” maka master akan menulis pada slave. Karena hanya 7 bit yang dipergunakan dalam byte alamat maka banyaknya device yang dapat dijadikan slave hanya 127. Alamat 0 dipergunakan untuk General Call. Bila alamat dan perintah, Read atau Write, yang dikirimkan oleh master dapat diterima oleh slave maka slave akan membangkitkan pulsa LOW (ACK), pada bus SDA, jika perintah tersebut dapat dijalankan dan pulsa HIGH (NACK) jika perintah tersebut gagal.
 
Gambar 2. Format pengiriman/pembacaan data dengan I2C

Setelah Master menerima pulsa LOW (ACK), Data dikirimkan/dibaca dari alamat Slave tersebut. Bila data telah berhasil dikirim/dibaca maka slave memberikan pulsa LOW (ACK) pada bus SDA tetapi jika terjadi kegagalan maka slave akan memberikan pulsa HIGH (NACK). Pulsa Stop, pulsa yang naik dari LOW ke HIGH pada saat pulsa clock dalam keadaan HIGH, akan dikrimkan oleh Master untuk menghentikan komunikasi. Hal yang patut dicatat pada komunikasi ini adalah, bit alamat dan bit data tidak boleh berubah keadaan pada saat pulsa clock berada pada keadaan HIGH. Bit bit tersebut (bit alamat dan bit data) hanya boleh berubah pada saat pulsa clock berada pada posisi LOW.
Kecepatan Clock pada I2C pada high speed mencapai 400 Khz, tetapai pada umumnya kecepatan clock 100 Khz. Kecepatan clock ini tidak dapat dijadikan standart karena setiap pabrik pembuat chip akan berbeda begitu juga device terkadang lambat dalam bekerja sehingga kecepatan clocknya terkadang samapai 10 Khz. Jika Slow device dihubungkan dengan high speed bus maka peralatan tersebut (slow device) akan merespon dengan menahan bus clock agar tetap LOW sampai peralatan tersebut siap menerima perintah berikutnya. Pada kasus ini Master harus menunggu sampai Slave melepaskan bus CLOCK.
TWI (Two Wire Serial Interface)
Komunikasi Serial I2C dipatenkan oleh Philips Semiconductor sehingga beberapa perusahaan terpaksa menggantikan istilah I2C dan protokolnya dengan nama TWI. Atmel mengantikan I2C dengan TWI begitu juga protokol komunikasi yang dipergunakan. Protokol komunikasi TWI dari Atmel sama seperti protokol komunikasi I2C hanya saja atmel menambahkan adanya interrupt. Kesimpulannya adalah komunikasi serial TWI compatible dengan komunikasi serial I2C, jadi peralatan Atmel, yang diperlengkapi dengan komunikasi serial TWI, dapat berkomunikasi dengan peralatan yang mendukung secara serial I2C.
Sisa bab ini akan membahas komunikasi serial secara TWI, tepatnya penggunaan protokol TWI pada UC ATMega328. Pada bab ini akan mempergunakan terminology sbb :
Master : Device yang mengawali dan mengakhiri transmisi data. Master juga membangkitkan pulsa serial clock (SCL).
Slave : Device yang dialamati/dituju oleh master
Transmitter : Device yang meletakkan data pada bus SDA
Receiver : Device yang membaca data dari bus SDA
START, STOP pada TWI sama seperti I2C tetapi ada tambahan REPEATED START seperti ditunjukkan pada gambar 3. Kaedah yang patut dijaga adalah Alamat dan Data tidak boleh berubah keadaan ketika pulsa clock dalam HIGH.
Seluruh paket alamat (Address Packets Format) terdiri dari 9 bit. Bit bit tersebut adalah : 7 address bit, 1 control bit (Read/Write) dan 1 bit Acknowledge (ACK) yang dibangkitkan oleh Slave. Bit control set menunjukkan operasi pembacaan (read) dan jika bit control clear menunjukkan operasi penulisan (write). Jika Slave mengenali alamat yang diberikan oleh master maka ia harus pulsa LOW pada bus SDA pada pulsa clock ke sembilan. Jika slave sedang sibuk atau sedang tidak dapat melayani permintaan master maka SDA line harus tetap HIGH pada pulsa clock ke sembilan. Jadi sebuah address packet terdiri dari alamat slave diikuti oleh READ atau WRITE yang masing masing disebut sebagai SLA+R dan SLA+W.
 
  Gambar 3. Kaedah pengiriman data pada TWI

 Alamat Slave dapat dengan bebas dirancang oleh designer, tetapi dengan ketentuan adalah MSB dari address byte dikirim pertama kali, ditunjukkan oleh gambar 4. Selain itu alamat 0000-000 dipergunakan untuk general call. General Call dipergunakan oleh Master untuk menrimkan pesan yang sama kesemua Slave. Seluruh Slave harus mengirimkan sinyal NACK ketika general call oleh master diikuti oleh pulsa write. Satu hal lagi yang perlu diingat pada komunikasi TWI pada UC kelurga Atmel adalah seluruh alamat dengan format 1111-xxx masih dicadangkan untuk pemakaian yang akan datang.
Gambar 4. Address Packet Format

Data Packet format sama seperti halnya dengan Address packet format yaitu MSB dikirim lebih dahulu dan LSB adalah yang paling akhir dirim. Jika receiver telah menerima data terakhir, karena alasan tertentu tidak dapat mnerima data berikutnya maka receiver harus memberitahukan transmitter dengan mengirimkan sinyal NACK. Gambar 5 memberikan gambaran tentang pengiriman data pada komunikasi TWI.
Gambar 5. Pengiriman Data pada komunikasi TWI
Ketika suatu event menghendaki perhatian terhadap kejadian di bus TWI, maka TWI Interrupt Flag (TWINT) dapat dipergunakan sebagai indikatornya. Pada siklus clock berikutnya, TWI Status Register (TWSR) akan di Update dengan suatu kode yang menunjukkan event yang bersangkutan. Contoh kode pada TWSR ditunjukkan pada gambar 8, yaitu bilangan didalam lingkaran. Selama TWINT Flag dalam keadaan set, maka kabel serial Clock (SCL) akan dipertahankan dalam keadaan LOW. Hal ini memungkinkan suatu program (vector interrupt) untuk menyelesaikan tugasnya sebelum TWI Transmission dilanjutkan.
TWINT Flag akan set disebabkan oleh event event berikut :
  • Setelah TWI mengirimkan sinyal START/REPEATED START
  • Setelah TWI mengirimkan sinyal SLA+R/W
  • Setelah TWI mengirimkan sebuah address byte
  • Setelah TWI menerima sebuah data byte.
  • Untuk lengkapnya lihat datasheet ATMega328

    Untuk memudahkan, maka gambar 6 menunjukan cara kerja dari bus TWI. Hal yang patut dicatat adalah jika TWI Interrupt Enable (TWIE) bit, yang terdapat pada register TWCR, dan Global Interrupt, yang terdapat pada register SREG, keduanya atau satu diclearkan maka TWINT Flag set tidak akan menghasilkan interrupt vektor. Dalam hal ini TWINT Flag hanya dipergunakan sebagai indikator suatu action pada bus TWI.

     
Gambar 6. Typical Transmission pada Bus TWI

Prinsip prinsip yang dipergunakan pada TWI Transmission adalah sbb :
  • Ketika TWI telah selesai melaksanakan suatu tugas dan mengharapkan suatu response, TWINT Flag diset. Jalur SCL dipaksa LOW sampai TWINT diclearkan.
  • Ketika TWINT Flag set, maka user harus meng-update seluruh TWI register dengan harga yang relevan pada siklus clock berikutnya. Sebagai sebuah contoh, TWDR harus diisi dengan bit yang akan dikirim pada siklus clock berikutnya.
  • Setelah semua register TWI di-update dan seluruh penundaan prgram telah dilaksanakan, maka TWCR dapat ditulis. Pada saat menulisi TWCR, bit TWINT harus diset karena hal ini akan menclearkan TWINT flag.
Untuk memudahkan penggunaan TWI maka pada gambar 7 diberikan program dalam bahasa C sebagai implementasinya. 
Gambar 7. Implementasi dalam bahasa C pada setiap event

Semua UC Atmel yang mendukung komunikas TWI dapat dioperasikan dalam 4 (empat) mode yaitu : Master Transmitter (MT), Master Receiver (MR), Slave Transmitter (ST) dan Slave Receiver (SR). Dalam bab ini kita hanya membahas mode master transmitter dan mode master receiver atau pada bus TWI hanya ada satu Master. Pembahasan tentang multiple Master akan dibahas pada kesempatan yang lain. Gambar 8 meringkaskan UC yang bekerja dalam mode Master Transmitter. Lingkaran pada gambar 8 mengindikasikan bahwa TWINT Flag dalam keadaan set. Angka pada lingkaran tersebut adalah kode status yang terdapat pada register TWSR, dengan bit bit prescaler di mask ke zero. Saat TWINT Flag menjadi set maka TWI Transfer akan ditunda sampai TWINT Flag di clearkan oleh software (user). Dalam bentuk tabel Mode Master Transmitter disajikan pada tabel 1.
Tabel 1. Mode Master Transmitter.
 
                        Bersambung  kebagian 2

2 komentar: