Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Mengenal I2C Serial EEPROM

Mengatasi terbatasnya jumlah kaki IC Mikrokontroler, berapa perusahaan IC mengembangkan teknik transfer data secara seri untuk menghubungkan IC Mikrokontroler ke IC pendukungnya, transfer data secara seri antar IC ini tidak ada hubungannya dengan transfer data seri yang biasa dipakai untuk modem.

Sebuah IC memori dengan kapasitas 2 KiloByte yang dibentuk dengan teknik transfer data secara pararel paling tidak mempunyai 24 kaki, 8 kaki untuk jalur data, 11 kaki untuk jalur penomoran memori (jalur alamat), 3 kaki untuk jalur kontrol, 2 kaki untuk catu daya. AT89C2051 hanya punya 20 kaki, jelas tidak bisa dihubungkan ke IC memori ini.

Memori yang sama kalau dibentuk dengan teknik transfer data secara seri mempunyai 8 kaki, dan hanya 2 atau 3 kaki yang perlu dihubungkan ke Mikrokontroler. Dengan demikian IC dengan teknik transfer data secara seri banyak dipakai dalam rancang bangun peralatan berbasis Mikrokontroler.

Teknik transfer data secara seri antar IC dikembangkan oleh 3 perusahaan IC, yang pertama adalah teknik I2C (Inter Integrated Circuit) yang dikenalkan oleh Philips, teknik SPI (Serial Peripheral Interface) dari Motorola dan teknik MicroWire ciptaan National Semiconductor. Teknik I2C memakai 2 jalur untuk keperluan transfer data secara seri, sedangkan SPI dan MicroWire memakai 3 jalur. Semua teknik mempunyai 1 jalur untuk Clock, I2C hanya punya satu jalur data 2 arah, sedangkan SPI dan MicroWire mempunyai 2 jalur data satu arah, masing-masing untuk jalur data masuk dan jalur data keluar.

Konsep I2C Pada I2C Serial EEPROM Buatan Philips

I2C versi 1.0 dikenalkan oleh Philips pada tahun 1992, direvisi menjadi versi 2.0 pada tahun 1998, setahun kemudian direvisi lagi menjadi versi 2.1.

Komunikasi data secara I2C dilakukan melalui dua saluran, masing-masing adalah saluran data secara seri (SDA) dan saluran clock (SCL), kedua saluran ini dikenal sebagai I2C Bus yang dipakai menghubungkan banyak IC I2C untuk berbagai macam keperluan. IC-IC I2C itu dibedakan menjadi induk (master) dan anak buah (slave), yang dimaksud dengan induk adalah peralatan I2C yang memulai transfer data dan yang membangkitkan clock (SCK). Yang bertindak sebagai master adalah Mikrokontroler yang bertugas mengendalikan I2C Bus.

I2C Bus pada Gambar 1 dipakai untuk menghubungkan 2 IC AT24C02 dan 1 IC PCF8574, I2C bus ini dikendalikan oleh AT89C2051 yang berfungsi sebagai master. Agar data dari master bisa didistribusikan ke semua slave dengan tepat, menurut konsep I2C semua jenis IC I2C diproduksi dengan nomor group tersendiri yang diatur oleh Philips, sehingga pabrik IC lain yang memproduksi IC I2C harus mendaftarkan produknya ke Philips untuk mendapatkan nomor group.

Dalam contoh di Gambar 1 terlihat nomor group IC Serial EEPROM adalah 1010 biner, nomor group dari IC Remote 8 bit I/O Expander adalah 0111 biner. Di samping itu saat ini di pasar beredar cukup banyak IC I2C, misalnya IC untuk MPEG2 encoder (SAA6750, nomor group 0100 biner), IC untuk radio mobil AM (TEA6821/2 nomor group 1100 biner) sampai IC untuk Universal Serial Bus (PDIUSB11 nomor group 0011 biner).

Dalam suatu konfigurasi I2C Bus sering dibutuhkan beberapa IC dari jenis yang sama, misalkan dalam Gambar 1 terlihat ada dua buah IC AT24C02. Agar IC-IC sejenis ini bisa dipisahkan, pada IC tersebut dilengkapi kaki-kaki (A0, A1 dan A2) untuk penomoran IC dalam group IC bersangkutan, dengan demikian pada I2C Bus total bisa dipasang 8 buah AT24C02 dan 8 buah PCF8574. Tidak semua IC I2C dilengkapi sampai 3 kaki untuk penomoran IC, bahkan ada IC yang tidak mempunyai kaki semacam itu.

Gambar 1. Konfigurasi sistem dengan I2C Bus

Sinyal Dasar I2C Serial EEPROM

Mengingat hanya 2 saluran saja yang dipakai I2C Bus, pada hal I2C Bus diharapkan bisa dipakai membentuk jaringan kecil dengan banyak peralatan I2C, maka dalam konsep I2C ditentukan sinyal dan tatacara dasar untuk memperlancar komunikasi antar peralatan I2C tersebut. Sinyal dasar I2C meliputi sinyal START, STOP dan ACK sebagai berikut :


SCK merupakan sinyal clock untuk ‘mendorong’ data di SDA, dalam keadaan tidak ada transfer data SDA dan SCK harus dalam keadaan ‘1’. Data di SDA boleh berubah hanya pada saat SCK =’0’ seperti digambarkan dalam diagram waktu Gambar 1(a), isi SDA diambil peralatan I2C pada saat SCL berubah dari ‘1’ menjadi ‘0’. Jika terjadi perubahan SDA pada saat SCL = ‘1’, perubahan itu diartikan sebagai sinyal START atau STOP.

Sinyal START menandakan master akan mulai mengirim data, sinyal ini terlihat di bagian kiri Gambar 1(b) berupa perubahan tegangan SDA dari ‘1’ menjadi ‘0’ pada saat SCK=’1’. Sub-rutin START di Potongan Program 1 membentuk sinyal ini.
Sinyal STOP menandakan master akan mengakhiri komunikasi data, sinyal ini terlihat di bagian kanan Gambar 1(b) berupa perubahan tegangan SDA dari ‘0’ menjadi ‘1’ pada saat SCK=’1’. Sub-rutin STOP di Potongan Program 2 membentuk sinyal ini.

Catatan : Sinyal START dan STOP muncul saat awal dan akhir pengiriman 1 blok data, bukan sinyal yang muncul pada awal dan akhir pengiriman 1 byte data.

Gambar 1(c) memperlihatkan interaksi antara dua peralatan I2C, setelah penerima data menerima data 8 bit, pada clock yang ke-9 penerima data membalas dengan ‘0’ sebagai tanda data 8 bit tadi sudah diterima dengan baik, sinyal ‘0’ ini dinamakan sebagai sinyal ACK. Sub-rutin ACK di Potongan Program 3 membentuk sinyal ini.

Potongan Program 1 Sinyal START

01: START:
02:    SETB  SDA
03:    SETB  SCL
04:  
05: ; Memastikan I2C Bus bisa dipakai
06:    JNB   SDA,BusBusy ; kalau SDA=0 I2C Bus tidak siap pakai
07:    JNB   SCL,BusBusy ; kalau SCL=0 I2C Bus tidak siap pakai
08:  
09: ; Membuat sinyal START
10:    NOP               ; tunggu sebentar
11:    CLR   SDA
12:    NOP               ; tunggu agar data benar-benar stabil
13:    NOP
14:    NOP
15:    NOP
16:    NOP
17:    CLR   SCL
18:    CLR   C           ; C=0 berarti berhasil membuat START
19:    RET
20:  
21: BusBusy:
22:    SETB  C           ; C=1 berarti gagal membuat START
23:    RET

Potongan Program 2 Sinyal STOP

01: STOP:
02:     CLR    SDA        ; SDA=0 low beberapa ssat
03:     NOP
04:     NOP
05:     SETB   SCL        ; SCL=0
06:     NOP               ; tunggu sebetar
07:     NOP
08:     NOP
09:     NOP
10:     NOP
11:     SETB   SDA        ; SCL=1
12:     RET

Potongan Program 3 Sinyal ACK Dan NAK

01: ACK:
02:     CLR    SDA        ; ACK adalah SDA=0
03:     SJMP   MakeACK
04: NAK:
05:     SETB   SDA        ; NAK adalah SDA=1
06: MakeACK:
07:     NOP               ; tunggu sebentar
08:     NOP
09:     SETB   SCL        ; SCL menjadi 1
10:     NOP               ; tunggu biar stabil
11:     NOP
12:     NOP
13:     NOP
14:     CLR    SCL        ; SCL kembali =0
15:     RET

Transmisi Data I2C Serial EEPROM

Transmisi data dalam I2C Bus digambarkan di Gambar 2, diringkas sebagai berikut :

clock SCK dibangkitkan oleh master, SDA boleh berubah pada saat SCK =‘0’
data di SDA bisa dibangkitkan oleh master maupun slave, tergantung pada arah transmisi data
pengiriman data dilakukan per 1 byte, digeser serempak dengan SCK bit demi bit yang dimulai dari bit 7 sampai bit 0
pada hitungan SCK yang ke sembilan, pengirim data harus membuat SDA=’1’ dengan maksud agar penerima data bisa mengirimkan sinyal ACK (=’0’) sebagai tanda terima kiriman data.

Gambar 2. Transmisi data pada I2C Bus

Potongan Program 4 berfungsi mengirimkan data 1 byte ke I2C bus menurut tata cara di atas, data yang akan dikirim terlebih dulu disimpan di Acc, isi Acc dikirim bit demi bit dari bit ACC.7 sampai ACC.0 dengan cara bit paling kiri dari ACC digeser ke kiri masuk ke C di PSW (baris 5 Potongan Program 4) kemudian dikirimkan ke I2C Bus dibaris 6.

Selesai mengirim data 8 bit, sub-rutin Out8bit mengambil kiriman sinyal ACK dan disimpan di C pada PSW, ini dilakukan di baris 15 sampai 25. Dengan demikian, keluar dari sub-rutin ini kalau C bernilai ‘1’ berarti gagal mengirim data karena tidak menerima jawaban ACK dari ‘slave’.

Potongan Program 4 Mengirim Data 1 Byte Dan Menerima ACK

01: Out8bit:
02:     PUSH   B
03:     MOV    B,#8        ; akan digeser 8 kali (bit)
04: OutLoop:
05:     RLC    A           ; bit A.7 digeser ke C di PSW
06:     MOV    SDA,C       ; nilai C di SDA
07:     NOP                ; tunggu sebentar sebelum.. ..
08:     SETB   SCL         ; SCL dibuat = ‘1’
09:     NOP                ; tunggu lagi
10:     NOP
11:     NOP
12:     NOP
13:     CLR    SCL         ; SCL dibuat =’0’, data diambil ‘slave’
14:     DJNZ   B,OutLoop   ; ulangi terus sampai 8 kali
15:  
16:     SETB   SDA         ; SDA dibuat ‘1’
17:     NOP                ; agar ‘slve’ bisa mengirim ACK
18:     NOP
19:     SETB   SCL         ; clock ke 9 untuk menerima ACK
20:     NOP                ; tunggu dulu
21:     NOP
22:     NOP
23:     NOP
24:     MOV    C,SDA       ; ambil ACK yang dikirim ‘slave’
25:     CLR    SCL         ; SCK kembali ke ‘0’
26:     POP    B
27:     RET

Potongan Program 5 berfungsi menerima data 1 byte dari ‘slave’, data diterima bit demi bit mulai dari bit ACC.7 sampai ACC.0, di baris 12 data diambil dari I2C Bus ke C pada PSW, kemudian ditampung di Acc dengan cara menggeser C ke kiri masuk ke Acc (baris 13 Potongan Program 5).

Potongan Program 5 Menerima Data 1 Byte

01: In8bit:
02:     PUSH    B
03:     SETB    SDA        ; SDA=’1’ agar ‘slave’ bisa kirim data
04:     MOV     B,#8       ; akan digeser 8 kali (bit)
05: InLoop:
06:     NOP                ; ‘slave’ boleh merubah data selama SCK=’0’
07:     NOP
08:     NOP
09:     SETB    SCL        ; SCK=’1’
10:     NOP                ; tunggu sebentar
11:     NOP
12:     MOV     C,SDA      ; ambil kiriman bit dari ‘slave’
13:     RLC     A          ; ditampung di A
14:     CLR     SCL        ; ‘slave’ boleh merubah data selama SCK=’0’
15:     DJNZ    B,InLoop
16:     POP     B
17:     RET

Metode Pengalamatan I2C Serial EEPROM

Karena IC I2C hanya dikendalikan lewat kaki SDA dan SCK saja, tidak ada sarana lainnya dari microcontroler yang bisa dipakai untuk mengendalikan I2C, maka alamat yang dipakai untuk memilih isi IC I2C dikirimkan secara serial pula, persis seperti halnya pengiriman data.

Pengalamat dasar IC I2C dilakukan dengan Nomor Group dan Nomor Chip.
Nomor Group adalah nomor yang diberikan oleh Philips (sebagai pencipta I2C) pada kelompok-kelompok IC I2C. Sebagai contoh nomor group untuk Serial EEPROM adalah 1010 (biner).
Nomor Chip adalah nomor yang diberikan pada masing-masing chip lewat kaki A0,A1 dan A2 dari masing-masing IC. Dalam IC I2C tertentu, A0..A2 tidak dihubungkan ke kaki IC, tapi dipakai didalam IC untuk menomori register/memori di dalam IC bersangkutan.

Setelah master I2C mengirimkan sinyal START, byte pertama yang dikirim berisi nomor Group; nomor Chip dan 1 bit lagi sebagai Penentu Arah Data, seperti yang digambarkan di Gambar 3.

Mekanisme kerja byte pertama tersebut bisa dijelaskan sebagai berikut:

1. IC-2 pada I2C Bus yang mempunyai Nomor Group sama dengan Nomor Group dalam byte partama tersebut akan terpanggil

2. berikutnya IC-IC dengan Nomor Group sama tersebut akan membandingkan Nomor Chip dalam byte pertama, dalam hal ini ada 2 kemungkinan :
Bagi IC yang mempunyai kaki A0..A2, nomor Chip dalam byte pertama tersebut dibandingkan dengan level tegangan kaki A0..A2, bila ternyata sama maka IC bersangkutan akan meneruskan komunikasi melalui I2 Bus
Bagi IC yang tidak mempunyai kaki A0..A2, nomor Chip dalam byte pertama dipakai untuk menomori register/memori di dalam IC bersangkutan.

3. Bit Penentu Arah Data dipakai untuk memberi tahu IC I2C arah data yang dikehendaki, apakah master akan mengirim data atau master menghendaki kiriman data.

Gambar 3. Mengalamati IC I2C secara sederhana

Cara pengalamatakan di atas hanya bisa dipakai untuk mengalamati sampai 8 byte, untuk kapasitas yang lebih besar dipakai metode pengalamatan 11 bit ( 8 bit N0..N7 dan 3 bit A0..A2) seperti terlihat di Gambar 4, pada kiriman data byte kedua berisi 8 bit alamat tambahan yang disebut sebagai Nomor Byte. Metode ini bisa dipakai untuk mengalamati sampai kapasitas 2048 byte, dan dipakai pada AT24C01 sampai AT24C16.

Gambar 4. Metode pengalamatan 11 bit

Untuk kapasitas yang lebih besar dari 2048 dipakai Metode Pengalamatan 16 bit seperti terlihat dalam Gambar 5, dalam hal ini A0..A2 sepenuhnya dipakai untuk Nomor Chip, tidak dipinjam pakai untuk mengalamati memori. Yang memakai cara ini adalah AT24C164, AT24C32 dan AT24C64.

Gambar 5. Metode pengalamatan 16 bit

IC SEEPROM Jenis I2C Buatan Atmel

Atmel memproduksi Serial EEPROM jenis I2C dengan kode AT24Cxx, AT merupakan kode pabrik Atmel, 24 menandakan bahwa IC tersebut adalah Serial EEPROM, sedangkan xx merupakan angka yang mengindikasikan kapasitas Serial EEPROM itu dalam satuan KiloBit, sebagai contoh AT24C08 merupakan IC SEEPROM I2C berkapasitas 8 KiloBit (1 KiloByte).

Keluarga AT24Cxx terdiri dari 9 macam IC seperti terlihat di Gambar 6(b), kesembilan IC itu berbeda kapasitas, tapi mempunyai susunan kaki IC yang sama, seperti terlihat pada Gambar 6 (a).

Gambar 6. (a) Susunan kaki IC AT24Cxx (b) Keluarga I2C Serial EEPROM IC AT24Cxx

Kaki SDA (kaki nomor 5) dan kaki SCK (kaki nomor 6) merupakan kaki baku IC jenis I2C, kedua kaki inilah yang mebentuk I2C Bus.

Kaki nomor 7 (WP – Write Protect) merupakan kaki yang dipakai untuk melindungi isi yang disimpan di dalam IC Serial EEPROM, jika kaki ini diberi tegangan ‘1’ maka IC dalam keadaan ter-proteksi, isinya tidak dapat diganti. Agar bisa menuliskan informasi ke dalam IC ini, kaki ini harus diberi tegangan ‘0’.

Kaki nomor 1 sampai dengan nomor 3 (A0, A1 dan A2) merupakan fasilitas untuk penomoran chip, hal ini diperlukan kalau dalam satu rangkaian dipakai lebih dari satu IC SEEPROM sejenis. Misalnya dalam satu rangkaian dipakai 3 chip AT24C02, SDA dan SCK ketiga IC ini masing-masing dihubungkan jadi satu membentuk I2C Bus, agar ketiga IC ini bisa dipakai secara terpisah kaki A0..A2 (kaki nomor 1 sampai nomor 3) masing-masing AT24C02 diberi level tegangan seperti terlihat pada Tabel 1.

Tabel 1. Contoh susunan A0 … A2

Meskipun demikian, A0 A1 dan A2 tidak selalu ada pada semua IC anggota AT24Cxx, akibatnya jumlah IC yang boleh dipasang pada I2C Bus tidak sama, Gambar 6(b) memperlihatkan distribusi A0,A1 dan A2 pada masing-masing IC dan jumlah IC maksimal yang dapat dipakai bersama. AT24C01 sampai AT24C16 memakai metode pengalamatan 11 bit, sedangkan AT24C164 sampai AT24C64 memakai metode pengalamatan 16 bit.

Proses Pengisian Serial EEPROM AT24Cxx

Gambar 7 memperlihatkan komunikasi data antara Mikrokontroler dan AT24Cxx dalam proses pengisi data ke AT24Cxx. Gambar 7 (a) menggambarkan proses pengisian data ke dengan metode pengaalamatan 11 bit, dan Gambar 7 (b) menggunakan metode pengalamatan 16 bit.

Pada dasarnya kedua metode itu sama, perbedaannya terletak pada :
Dalam metode pengalamatan 11 bit, alamat SEEPROM dikirim di .A2 dalam pengiriman byte pertama dan N0..N7 dalam pengiriman byte kedua
Dalam metode pengalamatan 16 bit, alamat SEEPROM dikirim di .N15 dalam pengiriman byte kedua dan N0..N7 dalam pengiriman byte ketiga
Catatan :   Untuk menyederhanakan pembahasan, dalam gambar berikutnya hanya digambarkan metode pengalamatan 11 bit saja.

Perhatikan Gambar 7, dalam satu proses pengisian data SEEPROM sinyal START dan sinyal STOP masing-masing cukup dikirim satu kali saja, yaknik sinyal START dipakai untuk mengawali proses dan sinyal STOP dipakai untuk mengakhiri proses. Kedua sinyal itu bukanlah awalan dan akhiran dari pengiriman data 1 byte!

Setelah mengirimkan alamat SEEPROM yang akan diisi, Mikrokontroler mengirim data yang diisikan ke AT24Cxx, setiap kali selesai menyimpan data AT24Cxx dengan sendirinya menaikkan alamat SEEPROM yang disimpannya, dengan demikian kiriman data selanjutnya akan disimpan ke memori berikutnya, proses pengisian ini akan berhenti setelah mikrokontroler menutup komunikasi ini dengan sinyal STOP.

Gambar 7. Proses pengisian data ke SEEPROM

Proses Pembacaan Serial EEPROM AT24Cxx

Proses pembacaan data dari AT24Cxx dilakukan seperti Gambar 8. Mula-mula Mikrokontroler mengirimkan alamat EEPROM yang akan dibaca isinya, proses ini mirip dengan bagian awal pengisian EEPROM yang dibahas di atas, setelah itu Mikrokontroler mengirim sinyal START sekali lagi, disusul dengan perintah untuk membaca isi EEPROM dan selanjutnya disusul dengan pembacaan isi EEPROM yang sesungguhnya. Selesai membaca isi SEEPROM Microcontroller menutup komunikasi dengan mengirimkan sinyal STOP.

Gambar 8. Pembacaan SEEPROM

Pembacaan isi SEEPROM pada posisi berikutnya, bisa dilakukan dengan cara seperti terlihat di Gambar 9, yakni mengirimkan sinyal START disusul dengan perintah membaca, dan pembacaan data SEEPROM, kemudian komunikasi ditutup dengan sinyal NAK (Not Acknowlwdge) dan sinyal STOP.

Gambar 9. Meneruskan Pembacaan SEEPROM

Pembacaan isi SEEPROM bisa pula dilakukan banyak byte sekali gus, seperti yang digambarkan dalam Gambar 10. Setiap selesai membaca 1 byte isi SEEPROM, Microcontroller menjawab dengan sinyal ACK, pada saat pembacaan byte yang terakhir komunikasi ditutup dengan sinyal NAK dan STOP.

Gambar 10. Meneruskan Pembacaan satu blok SEEPROM

SEEPROM AT24Cxx Dalam Rangkaian AT89C2051

Kaki-kaki IC I2C bisa dihubungkan secara langsung, contoh hubungan AT24Cxx dengan AT89C2051 bisa dilihat di Gambar 11. Dalam gambar tersebut SCL dihubungkan ke P1.2 dan SDA dihubungkan ke P1.3, hubungan ini tidak musti harus demikian, tergantung pada kaki AT89C2051 yang masih tersisa. Kaki-kaki AT89C2051 yang lain, bisa dipakai untuk apa saja sesuai dengan keperluan rancangan rangkaian.

Agar SEEPROM bisa diisi, kaki WP AT24Cxx harus dihubungkan ke ground, tapi dalam rangkaian tertentu jika isi SEEPROM tidak pernah dirubah boleh saja WP dihubungkan ke Vcc.
Dalam Gambar 11 kaki 1 sampai 3 AT24Cxx dihubungkan ke Ground, hal ini bisa dipakai kalau dalam rangkaian hanya ada 1 chip AT24Cxx. Dengan cara semacam ini, semua jenis IC AT24Cxx bisa dipasang ke rangkaian.

Gambar 11. Menambah Serial EEPROM pada AT89C2051

Selamat mencoba, semoga informasi tentang “I2C Serial EEPROM” diatas memberikan inspirasi bagi kita



This post first appeared on Teknik Elektronika Dan Radio Komunikasi, please read the originial post: here

Share the post

Mengenal I2C Serial EEPROM

×

Subscribe to Teknik Elektronika Dan Radio Komunikasi

Get updates delivered right to your inbox!

Thank you for your subscription

×