komunikasi i2c atmega8 basic
register twi
1-->TWBR==>twi bit register
2-->TWCR==>twi control register
3-->TWSR==>twi status register
4-->TWDR==>twi data register
5-->TWAR==>twi adres register (for slave mode)
1==>TWBR<TWI bit register>
bit7-0==>berfungsi untuk mengatur nilai clock yang di gunakan twi,bersa
ma pengaturan pada prescaler dengan rumus clock=cpu-clock/(16+(2*TWBR*prescaler)
2==>TWCR <twi control register>
bit7==>TWINT(twi interupsi flag)
bit di set oleh hardware SECARA OTOMATIS ketika berha
sil(KALO MASIH MENJALANKAN TUGAS MAKA NILAINYA 0) melakukan tugas seprti setelah mengirim pulsa start/stop
jika bit ini set data register I-bit pada register SREG diset
dan TWIE pada TWCR diset maka akan terjadi interupsi isr twi
interupsi service rutin twi akan dijalankan,untuk meng clearkan bit
TWINT dengan cara mengirim nilai 1(karena yang bernilai 1/set hanya falgnya saja
),kalo tidak ditulis 1 maka tidak
bisa melanjutkan komunikasi twi(penting)
twint akan set pada saat situasi seperti ini
TWINT Flag diatur dalam situasi berikut:
• Setelah TWI telah dikirimkan sebuah START / BERULANG kondisi START
• Setelah TWI telah dikirimkan SLA + R / W
• Setelah TWI telah dikirimkan sebuah byte alamat
• arbitrase Setelah TWI telah kehilangan
• Setelah TWI telah ditangani berdasarkan alamat budak sendiri atau panggilan umum
• Setelah TWI telah menerima data byte
• Setelah STOP atau BERULANG MULAI telah diterima saat masih ditangani sebagai Slave
• Ketika kesalahan bus telah terjadi karena adanya MULAI atau BERHENTI kondisi ilegal
bit6==>TWEA <twi enable ack>
mengontrol pulsa ack jika nilainya 1 ack terkirim
bit5==>TWSTA <twi start>
untuk mengirim pulsa strat dengan cara menulis 1 diregister ini
bit4==>TWSTO <twi stop>
untup mengirim pulsa stop dengan mengirim 1 pada mode master
akan clear otomatis oleh hardware jika sudah dilakukan stop pulsa,
pada mode slave digunakan untuk menolak data apabila salah dalam
memberi alamat pada slave.
bit3==>TWWC < TWI Write Collision Flag>
Aakan set apabila ada data yang menunggu pada TWDR saat Twint
dalam keadaan low (ini berarti tugas belum diselesaikan sampai
menunggu terselaisaikan dengan bit 1 pada TWINT)
bit2==>TWEN <twi enable>
mengaktifkan twi dengan mengirim nilai 1 pada register ini.
bit1==>tidak digunakan
bit0==>TWIE <twi interupsi enable>
untuk mengaktifkan interupsi servisce routin twi
3.TWSR (twi status register)
bit7-3==>TWS <twi status>
berisi nilai yang selalu diupdate setelah melakukan tugas twi
misalnya setelah mengirim data stop/start maka nilai disini akan berubah
nilai ini nantinya akan digunakan untuk mengetahui apa pengiriman berhasil/tidak
dengan membandingakan nilai antara nilai tabel dan nilai register ini
bit2==>tidak digunakan
bit1-0==>TWPS <twi prescaler>
digunakan bersama dengan register TWBR untuk menentukan clock
pada twi misalnya jika ingin nilai clock rendah di nilai 10khz
maka dengan kristal 16mhz dan prescaler=4 maka nilai TWBR=198
4.TWDR (twi data register)
bit7-0==>merupakan nilai data dari komunikasi twi disipan disini mau
data yang dikirim atau data yang diterima
5.TWAR (twi address register)
bit7-1==>TWA: TWI (Slave) Address Register
ini digunakan untuk mode slave saja ,yaitu untuk memberi alamat 7 bit pada slave sedadangkan
bit kedelapannya nanti adalah tanda bit untuk menulis atau membaca
bit0==>TWGCE: TWI General Call Recognition Enable Bit
digunakan untuk untuk alamat umum atau hanya 1 slave dengan alamat 0x00.
mode twi
Master Transmitter – initiates transfer sends data to slave device;
Master Receiver – initiates transfer reads data from slave device;
Slave Transmitter – waits for master request and then sends data;
Slave Receiver – waits for master transmission and accepts data.
contoh komunikasi datanya twi
mode master tranmiter
proses yang harus dijalankan dengan code c untuk gambar di atas
1.Langkah pertama dalam transmisi TWI adalah untuk mengirimkan kondisi START. Hal ini dilakukan dengan
menulis nilai tertentu ke TWCR, menginstruksikan perangkat keras TWI untuk mengirimkan MULAI a
kondisi. Yang nilai menulis dijelaskan nanti. Namun, penting bahwa
TWINT bit diatur dalam nilai tertulis. Menulis satu untuk TWINT membersihkan bendera. TWI akan
tidak mulai operasi apapun selama bit TWINT di TWCR diatur. Segera setelah
aplikasi telah dibersihkan TWINT, TWI akan memulai transmisi kondisi START
code c
2. Ketika kondisi START telah ditransmisikan, TWINT Flag TWCR diatur, dan
TWSR diperbarui dengan kode status yang menunjukkan bahwa kondisi START memiliki sukses-
sepenuhnya telah dikirim
code c
3. Perangkat lunak aplikasi sekarang harus memeriksa nilai TWSR, untuk memastikan bahwa
kondisi START berhasil ditransmisikan. Jika TWSR menunjukkan sebaliknya, applica- yang
software tion mungkin mengambil beberapa tindakan khusus, seperti memanggil rutin kesalahan. Berasumsi bahwa
kode status seperti yang diharapkan, aplikasi tersebut harus memuat SLA + W ke TWDR. Ingat
yang TWDR digunakan baik untuk alamat dan data. Setelah TWDR telah dimuat dengan
diinginkan SLA + W, nilai tertentu harus ditulis untuk TWCR, menginstruksikan hardware TWI
untuk mengirimkan SLA + W hadir di TWDR. Yang nilai menulis dijelaskan nanti.
Namun, penting bahwa bit TWINT diatur dalam nilai tertulis. Menulis satu untuk
TWINT membersihkan bendera. TWI tidak akan memulai operasi apapun selama bit TWINT di
TWCR diatur. Segera setelah aplikasi telah dibersihkan TWINT, TWI akan memulai
transmisi paket alamat
code c
4. Ketika paket alamat telah dikirimkan, TWINT Flag TWCR diatur, dan
TWSR diperbarui dengan kode status yang menunjukkan bahwa paket alamat telah berhasil
telah terkirim. Kode status juga akan mencerminkan apakah seorang budak diakui paket atau
tidak
5. Perangkat lunak aplikasi sekarang harus memeriksa nilai TWSR, untuk memastikan bahwa
paket alamat berhasil dikirimkan, dan bahwa nilai bit ACK adalah sebagai
diharapkan. Jika TWSR menunjukkan sebaliknya, perangkat lunak aplikasi mungkin mengambil beberapa khusus
tindakan, seperti memanggil rutin kesalahan. Dengan asumsi bahwa kode status seperti yang diharapkan,
Aplikasi harus memuat paket data ke TWDR. Selanjutnya, nilai tertentu harus
ditulis untuk TWCR, menginstruksikan hardware TWI untuk mengirimkan hadir paket data di
TWDR. Yang nilai menulis dijelaskan nanti. Namun, penting bahwa
TWINT bit diatur dalam nilai tertulis. Menulis satu untuk TWINT membersihkan bendera. TWI akan
tidak mulai operasi apapun selama bit TWINT di TWCR diatur. Segera setelah
aplikasi telah dibersihkan TWINT, TWI akan memulai transmisi paket data
6. Ketika paket data telah dikirim, yang TWINT Flag TWCR diatur, dan TWSR
diperbarui dengan kode status yang menunjukkan bahwa paket data telah berhasil dikirim.
Kode status juga akan mencerminkan apakah seorang budak diakui paket atau tidak
7. Perangkat lunak aplikasi sekarang harus memeriksa nilai TWSR, untuk memastikan bahwa
paket data berhasil dikirim, dan bahwa nilai bit ACK adalah sebagai
diharapkan. Jika TWSR menunjukkan sebaliknya, perangkat lunak aplikasi mungkin mengambil beberapa khusus
tindakan, seperti memanggil rutin kesalahan. Dengan asumsi bahwa kode status seperti yang diharapkan,
aplikasi harus menulis nilai tertentu untuk TWCR, menginstruksikan hardware TWI untuk mengirimkan
kondisi STOP. Yang nilai menulis dijelaskan nanti. Namun, penting bahwa
bit TWINT diatur dalam nilai tertulis. Menulis satu untuk TWINT membersihkan bendera. TWI
tidak akan memulai operasi apapun selama bit TWINT di TWCR diatur. Segera setelah
aplikasi telah dibersihkan TWINT, TWI akan memulai transmisi-kondisi BERHENTI
tion. Perhatikan bahwa TWINT TIDAK ditetapkan setelah kondisi BERHENTI telah dikirim
Ketika TWI telah selesai operasi dan mengharapkan respon aplikasi, TWINT Flag
diatur. Garis SCL ditarik rendah sampai TWINT dibersihkan
• Ketika TWINT Flag diatur, pengguna harus memperbarui semua TWI Register dengan nilai yang relevan
untuk siklus bus TWI berikutnya. Sebagai contoh, TWDR harus dimuat dengan nilai menjadi
ditransmisikan dalam siklus bus berikutnya
• Setelah semua pembaruan TWI Register dan menunggu tugas aplikasi perangkat lunak lainnya telah
selesai, TWCR ditulis. Saat menulis TWCR, sedikit TWINT harus ditetapkan. menulis
satu untuk TWINT membersihkan bendera. TWI kemudian akan memulai melaksanakan operasi apapun
ditentukan oleh pengaturan TWCR
code c dan asembli untuk gambar diatas
1
ldi r16, (1<<TWINT)|(1<<TWSTA)|
(1<<TWEN)
out TWCR, r16
TWCR = (1<<TWINT)|(1<<TWSTA)|
(1<<TWEN)
Send START condition
2
wait1:
in r16,TWCR
sbrs r16,TWINT
rjmp wait1
while (!(TWCR & (1<<TWINT)))
;
Wait for TWINT Flag set. This
indicates that the START condition
has been transmitted
3
in r16,TWSR
andi r16, 0xF8
cpi r16, START
brne ERROR
if ((TWSR & 0xF8) != START)
ERROR();
Check value of TWI Status
Register. Mask prescaler bits. If
status different from START go to
ERROR
ldi r16, SLA_W
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
out TWCR, r16
TWDR = SLA_W;
TWCR = (1<<TWINT) | (1<<TWEN);
Load SLA_W into TWDR Register.
Clear TWINT bit in TWCR to start
transmission of address
4
wait2:
in r16,TWCR
sbrs r16,TWINT
rjmp wait2
while (!(TWCR & (1<<TWINT)))
;
Wait for TWINT Flag set. This
indicates that the SLA+W has been
transmitted, and ACK/NACK has
been received.
5
in r16,TWSR
andi r16, 0xF8
cpi r16, MT_SLA_ACK
brne ERROR
if ((TWSR & 0xF8) !=
MT_SLA_ACK)
ERROR();
Check value of TWI Status
Register. Mask prescaler bits. If
status different from MT_SLA_ACK
go to ERROR
ldi r16, DATA
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
out TWCR, r16
TWDR = DATA;
TWCR = (1<<TWINT) | (1<<TWEN);
Load DATA into TWDR Register.
Clear TWINT bit in TWCR to start
transmission of data
6
wait3:
in r16,TWCR
sbrs r16,TWINT
rjmp wait3
while (!(TWCR & (1<<TWINT)))
;
Wait for TWINT Flag set. This
indicates that the DATA has been
transmitted, and ACK/NACK has
been received.
7
in r16,TWSR
andi r16, 0xF8
cpi r16, MT_DATA_ACK
brne ERROR
if ((TWSR & 0xF8) !=
MT_DATA_ACK)
ERROR();
Check value of TWI Status
Register. Mask prescaler bits. If
status different from
MT_DATA_ACK go to ERROR
ldi r16, (1<<TWINT)|(1<<TWEN)|
(1<<TWSTO)
out TWCR, r16
TWCR = (1<<TWINT)|(1<<TWEN)|
(1<<TWSTO);
Transmit STOP condition
jika di rangkum untuk mode master transmiter adalah
1.kirim start
2.tunggu twint set
3.1.bandingkan nilai twsr dengan nilai start jika tidak sama berarti jump ke error();
3.2.masukan data ke twdr,clear flag twint
4.tunggu flag twint
5.1.cek status register apabila nilainya tidak sama dengan nilai status maka jump ke error
5.2 isikan data yang mau dikirim ke twdr register,clear flag twint untuk mengirim data
6.tunggu twint set sebagai tanda pengiriman berhail
7.1.cek status register jika nilai berbeda maka error
7.2.kirim stop tranmision
mode master reciever
Dalam modus Master Receiver, sejumlah byte data yang diterima dari Slave Transmitter
(Lihat Gambar 80). Dalam rangka untuk memasukkan modus Master, kondisi START harus dikirimkan. Itu
format paket alamat berikut menentukan apakah Guru Transmitter atau Master
modus penerima yang akan dimasukkan. Jika SLA + W ditransmisikan, modus MT dimasukkan, jika SLA + R adalah trans-
mitted, modus MR dimasukkan. Semua kode status disebutkan dalam bagian ini mengasumsikan bahwa
prescaler bit adalah nol atau bertopeng ke nol.
sytart
Twen harus ditulis untuk satu untuk mengaktifkan Dua-kawat Serial Interface, TWSTA harus ditulis untuk
satu untuk mengirimkan kondisi START dan TWINT harus diatur untuk menghapus TWINT Flag. TWI
maka akan menguji Dua-kawat Serial Bus dan menghasilkan kondisi START secepat bus
menjadi bebas. Setelah kondisi START telah ditransmisikan, TWINT Flag diatur oleh keras-
ware, dan kode status di TWSR akan 0x08 (lihat Tabel 66 pada halaman 173). Dalam rangka untuk masuk
Modus MR, SLA + R harus dikirimkan. Hal ini dilakukan dengan menulis SLA + R untuk TWDR. setelah itu
TWINT bit harus dibersihkan (dengan menulis ke salah satu) untuk melanjutkan transfer. Hal ini dilakukan
dengan menulis nilai berikut untuk TWCR:
Ketika SLA + R telah ditransmisikan dan sedikit pengakuan telah diterima, TWINT adalah
set lagi dan sejumlah kode status di TWSR yang mungkin. kode status mungkin dalam Guru
Modus yang 0x38, 0x40, 0x48 atau. Tindakan yang tepat harus diambil untuk masing-masing kode status ini
dirinci pada Tabel 67 di halaman 176. Diterima data dapat dibaca dari TWDR Register ketika
yang TWINT Flag diatur tinggi oleh hardware. Skema ini diulang sampai byte terakhir telah
diterima. Setelah byte terakhir telah diterima, MR harus menginformasikan ST dengan mengirimkan
NACK setelah yang terakhir diterima byte data. transfer berakhir dengan menghasilkan kondisi BERHENTI atau
kondisi START diulang. Sebuah kondisi STOP dihasilkan dengan menulis nilai berikut untuk
TWCR:
Setelah kondisi START berulang (negara 0x10) Dua-kawat Serial Interface dapat mengakses
Slave yang sama lagi, atau Slave baru tanpa transmisi kondisi STOP. diulang MULAI
memungkinkan Guru untuk beralih antara hamba-hamba, modus Master Transmitter dan Master Receiver
modus tanpa kehilangan kendali atas bus.
mode slave reciever
Dalam modus Slave Receiver, sejumlah byte data yang diterima dari Transmitter Guru
(Lihat Gambar 82). Semua kode status disebutkan dalam bagian ini mengasumsikan bahwa prescaler bit
nol atau bertopeng ke nol.
Untuk memulai modus Slave Receiver, Twar dan TWCR harus diinisialisasi sebagai berikut:
Bagian atas 7 bit alamat mana Dua-kawat Serial Interface akan merespon ketika
ditangani oleh Master. Jika LSB diatur, TWI akan merespon ke alamat panggilan umum (0x00),
selain itu akan mengabaikan alamat panggilan umum.
Twen harus ditulis untuk satu untuk mengaktifkan TWI. The TWEA bit harus ditulis untuk satu untuk mengaktifkan
pengakuan alamat slave perangkat sendiri atau alamat panggilan umum. TWSTA
dan TWSTO harus ditulis dengan nol.
Ketika Twar dan TWCR telah diinisialisasi, TWI menunggu sampai itu ditangani oleh sendiri
alamat slave (atau alamat panggilan umum jika diaktifkan) diikuti oleh bit data arah. Jika
arah bit adalah "0" (write), TWI akan beroperasi dalam mode SR, dinyatakan modus ST dimasukkan. Setelah
alamat slave sendiri dan sedikit menulis telah diterima, TWINT Flag diatur dan valid
kode status dapat dibaca dari TWSR. Kode status digunakan untuk menentukan lunak yang sesuai
tindakan ware. Tindakan yang tepat harus diambil untuk setiap kode status dirinci pada Tabel 68 di
Halaman 179. Slave Receiver Mode juga dapat dimasukkan jika arbitrase hilang sementara TWI di
modus Master (lihat negara 0x68 dan 0x78).
Jika bit TWEA adalah ulang saat transfer, TWI akan kembali "Tidak Akui" ( "1") untuk SDA
setelah byte data yang diterima berikutnya. Ini dapat digunakan untuk menunjukkan bahwa Slave tidak mampu
menerima lebih byte. Sementara TWEA adalah nol, TWI tidak mengakui budak sendiri
alamat. Namun, dua-kawat Serial Bus masih dipantau dan pengakuan alamat mungkin
melanjutkan setiap saat dengan menetapkan TWEA. Ini berarti bahwa bit TWEA dapat digunakan untuk sementara
mengisolasi TWI dari Dua-kawat Serial Bus.
Dalam semua mode sleep selain mode Idle, sistem jam ke TWI dimatikan. Jika TWEA
bit diatur, antarmuka masih bisa mengakui alamat slave sendiri atau alamat panggilan umum oleh
menggunakan dua-kawat Serial Bus jam sebagai sumber jam. bagian kemudian akan bangun dari tidur
dan TWI akan terus clock rendah SCL selama bangun dan sampai TWINT Flag dibersihkan
(Dengan menulis ke satu). penerimaan data lebih lanjut akan dilakukan seperti biasa, dengan jam AVR
berjalan seperti biasa. Perhatikan bahwa jika AVR sudah diatur dengan waktu yang lama start-up, garis SCL mungkin
diadakan rendah untuk waktu yang lama, memblokir transmisi data lainnya.
Perhatikan bahwa dua-kawat Serial Interface Data Register - TWDR tidak mencerminkan byte terakhir
hadir di bus ketika bangun dari mode Sleep tersebut.
Slave Transmitter
Mode
Dalam modus Slave Transmitter, sejumlah byte data yang ditransmisikan ke Master Receiver
(Lihat Gambar 84). Semua kode status disebutkan dalam bagian ini mengasumsikan bahwa prescaler bit
nol atau bertopeng ke nol.
Untuk memulai modus Slave Transmitter, Twar dan TWCR harus diinisialisasi sebagai berikut:
Bagian atas tujuh bit alamat mana Dua-kawat Serial Interface akan merespon ketika
ditangani oleh Master. Jika LSB diatur, TWI akan merespon ke alamat panggilan umum (0x00),
selain itu akan mengabaikan alamat panggilan umum.
Twen harus ditulis untuk satu untuk mengaktifkan TWI. The TWEA bit harus ditulis untuk satu untuk mengaktifkan
pengakuan alamat slave perangkat sendiri atau alamat panggilan umum. TWSTA
dan TWSTO harus ditulis dengan nol.
Ketika Twar dan TWCR telah diinisialisasi, TWI menunggu sampai itu ditangani oleh sendiri
alamat slave (atau alamat panggilan umum jika diaktifkan) diikuti oleh bit data arah. Jika
arah bit adalah "1" (baca), TWI akan beroperasi dalam mode ST, jika modus SR dimasukkan. Setelah
alamat slave sendiri dan sedikit menulis telah diterima, TWINT Flag diatur dan valid
kode status dapat dibaca dari TWSR. Kode status digunakan untuk menentukan lunak yang sesuai
tindakan ware. Tindakan yang tepat harus diambil untuk setiap kode status dirinci pada Tabel 69 di
Halaman 182. The Slave Transmitter modus juga dapat dimasukkan jika arbitrase hilang sementara TWI adalah
dalam modus Master (lihat negara 0xB0).
Jika bit TWEA ditulis ke nol selama transfer, TWI akan mengirimkan byte terakhir dari transformasi tersebut
fer. Negara 0xC0 atau negara 0xC8 akan dimasukkan, tergantung pada apakah Master Receiver
mentransmisikan NACK atau ACK setelah byte akhir. TWI dialihkan ke Slave tidak ditangani
modus, dan akan mengabaikan Guru jika terus transfer. Jadi Guru Penerima menerima
semua "1" sebagai data serial. Negara 0xC8 dimasukkan jika tuntutan Guru byte data tambahan (oleh
transmisi ACK), meskipun Slave telah ditransmisikan byte terakhir (TWEA nol dan diharapkan-
ing NACK dari Master).
Sementara TWEA adalah nol, TWI tidak merespon ke alamat budak sendiri. Namun, dua-kawat
Serial Bus masih dipantau dan pengakuan alamat dapat melanjutkan setiap saat dengan menetapkan TWEA.
Ini berarti bahwa bit TWEA dapat digunakan untuk sementara mengisolasi TWI dari Dua kawat
Serial Bus.
Twar TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE
nilai Perangkat Sendiri Slave Alamat
TWCR TWINT TWEA TWSTA TWSTO TWWC twen - TWIE
Nilai 0 1 0 0 0 1 0 X
Perangkat 3 perangkat n
SDA
SCL
........ R1 R2
V CC
perangkat 2
MENGUASAI
PENERIMA
perangkat 1
BUDAK
PEMANCAR
182
2486AA-AVR-02/2013
ATmega8 (L)
Dalam semua mode sleep selain mode Idle, sistem jam ke TWI dimatikan. Jika TWEA
bit diatur, antarmuka masih bisa mengakui alamat slave sendiri atau alamat panggilan umum oleh
menggunakan dua-kawat Serial Bus jam sebagai sumber jam. bagian kemudian akan bangun dari tidur
dan TWI akan mengadakan jam SCL akan rendah selama bangun dan sampai TWINT Bendera
dibersihkan (dengan menulis ke satu). transmisi data lebih lanjut akan dilakukan seperti biasa, dengan
AVR jam berjalan seperti biasa. Perhatikan bahwa jika AVR sudah diatur dengan waktu yang lama start-up,
SCL baris dapat diadakan rendah untuk waktu yang lama, memblokir transmisi data lainnya.
Perhatikan bahwa dua-kawat Serial Interface Data Register - TWDR tidak mencerminkan byte terakhir
hadir di bus ketika bangun dari mode sleep ini
penting<>
Ada dua kode status yang tidak sesuai dengan keadaan TWI didefinisikan, lihat Tabel 70.
Status 0xF8 menunjukkan bahwa tidak ada informasi yang relevan tersedia karena TWINT Bendera tidak
set. Hal ini terjadi antara negara-negara lain, dan ketika TWI tidak terlibat dalam transfer serial.
Status 0x00 menunjukkan bahwa kesalahan bus telah terjadi selama dua-kawat Serial Bus transfer. Sebuah bus
kesalahan terjadi ketika memulai atau menghentikan kondisi terjadi pada posisi ilegal di format frame.
Contoh posisi ilegal tersebut selama transfer serial byte alamat, byte data,
atau mengakui bit. Ketika kesalahan bus terjadi, TWINT diatur. Untuk pulih dari kesalahan bus, yang
TWSTO Flag harus mengatur dan TWINT harus dibersihkan dengan menulis logika satu untuk itu. Hal ini menyebabkan
TWI untuk masuk ke modus Slave tidak ditangani dan untuk membersihkan TWSTO Flag (tidak ada potongan lain di
TWCR yang terpengaruh). SDA dan SCL baris dilepaskan, dan tidak ada kondisi STOP
ditularkan.
penting<combinasi mode twi>
Dalam beberapa kasus, beberapa mode TWI harus dikombinasikan untuk menyelesaikan tindakan yang diinginkan.
Pertimbangkan misalnya membaca data dari EEPROM serial. Biasanya, seperti transfer melibatkan
langkah-langkah berikut:
1. Transfer harus dimulai
2. EEPROM harus diinstruksikan apa lokasi harus dibaca
3. membaca harus dilakukan
4. Transfer harus selesai
Perhatikan data yang ditransmisikan baik dari Guru untuk Slave dan sebaliknya. Guru harus menginstruksikan
Slave apa lokasi yang ingin membaca, membutuhkan penggunaan modus MT. Selanjutnya, data yang
harus dibaca dari Slave, menyiratkan penggunaan modus MR. Dengan demikian, arah transfer harus
diubah. Guru harus tetap mengontrol bus selama semua langkah ini, dan langkah-langkah
harus dilakukan sebagai operasi atomical. Jika prinsip ini dilanggar dalam pendokumentasian multimaster
tem, Guru lain dapat mengubah pointer data dalam EEPROM antara langkah 2 dan 3, dan
Guru akan membaca data lokasi yang salah. Seperti perubahan arah transfer dilakukan dengan
transmisi MULAI BERULANG antara transmisi byte alamat dan penerimaan
dari data. Setelah MULAI BERULANG, Master terus kepemilikan bus. Pengikut
Angka menunjukkan aliran dalam transfer ini.
Gambar 86. Menggabungkan Beberapa Mode TWI untuk Mengakses EEPROM Serial
multi master<>
Jika beberapa master yang terhubung ke bus yang sama, transmisi dapat dimulai simultane-
menerus oleh satu atau lebih dari mereka. TWI standar memastikan bahwa situasi tersebut ditangani di
sedemikian rupa sehingga salah seorang guru akan diizinkan untuk melanjutkan dengan transfer, dan bahwa tidak ada data
akan hilang dalam proses. Contoh dari situasi arbitrase digambarkan di bawah ini, di mana dua
master mencoba untuk mengirimkan data ke Slave Receiver.
Beberapa skenario yang berbeda mungkin timbul selama arbitrase, seperti yang dijelaskan di bawah ini:
• Dua atau lebih master kinerja komunikasi identik dengan Slave yang sama. Didalam
kasus, baik Slave maupun dari master akan tahu tentang pertengkaran bus
• Dua atau lebih master yang mengakses Slave sama dengan data yang berbeda atau arah bit. Didalam
kasus, arbitrase akan terjadi, baik di BACA / TULIS bit atau bit data. master
mencoba untuk output satu di SDA sementara Guru lain output nol akan kehilangan arbitrase.
Kehilangan master akan beralih ke mode Slave tidak ditangani atau menunggu sampai bus gratis dan
mengirimkan kondisi START baru, tergantung pada tindakan aplikasi perangkat lunak
• Dua atau lebih master mengakses budak yang berbeda. Dalam hal ini, arbitrase akan terjadi di
SLA bit. Masters mencoba untuk output satu di SDA sementara Guru lain output akan nol
kehilangan arbitrase. Masters kehilangan arbitrase di SLA akan beralih ke mode Slave untuk memeriksa apakah
mereka sedang ditangani oleh Master menang. Jika ditangani, mereka akan beralih ke SR atau ST
modus, tergantung pada nilai BACA / TULIS bit. Jika mereka tidak ditangani, mereka
akan beralih ke mode Slave tidak ditangani atau menunggu sampai bus gratis dan mengirimkan baru
MULAI kondisi, tergantung pada tindakan aplikasi perangkat lunak
Ini diringkas dalam Gambar 88. nilai status Kemungkinan diberikan dalam lingkaran.
register twi
1-->TWBR==>twi bit register
2-->TWCR==>twi control register
3-->TWSR==>twi status register
4-->TWDR==>twi data register
5-->TWAR==>twi adres register (for slave mode)
1==>TWBR<TWI bit register>
bit7-0==>berfungsi untuk mengatur nilai clock yang di gunakan twi,bersa
ma pengaturan pada prescaler dengan rumus clock=cpu-clock/(16+(2*TWBR*prescaler)
2==>TWCR <twi control register>
bit7==>TWINT(twi interupsi flag)
bit di set oleh hardware SECARA OTOMATIS ketika berha
sil(KALO MASIH MENJALANKAN TUGAS MAKA NILAINYA 0) melakukan tugas seprti setelah mengirim pulsa start/stop
jika bit ini set data register I-bit pada register SREG diset
dan TWIE pada TWCR diset maka akan terjadi interupsi isr twi
interupsi service rutin twi akan dijalankan,untuk meng clearkan bit
TWINT dengan cara mengirim nilai 1(karena yang bernilai 1/set hanya falgnya saja
),kalo tidak ditulis 1 maka tidak
bisa melanjutkan komunikasi twi(penting)
twint akan set pada saat situasi seperti ini
TWINT Flag diatur dalam situasi berikut:
• Setelah TWI telah dikirimkan sebuah START / BERULANG kondisi START
• Setelah TWI telah dikirimkan SLA + R / W
• Setelah TWI telah dikirimkan sebuah byte alamat
• arbitrase Setelah TWI telah kehilangan
• Setelah TWI telah ditangani berdasarkan alamat budak sendiri atau panggilan umum
• Setelah TWI telah menerima data byte
• Setelah STOP atau BERULANG MULAI telah diterima saat masih ditangani sebagai Slave
• Ketika kesalahan bus telah terjadi karena adanya MULAI atau BERHENTI kondisi ilegal
bit6==>TWEA <twi enable ack>
mengontrol pulsa ack jika nilainya 1 ack terkirim
bit5==>TWSTA <twi start>
untuk mengirim pulsa strat dengan cara menulis 1 diregister ini
bit4==>TWSTO <twi stop>
untup mengirim pulsa stop dengan mengirim 1 pada mode master
akan clear otomatis oleh hardware jika sudah dilakukan stop pulsa,
pada mode slave digunakan untuk menolak data apabila salah dalam
memberi alamat pada slave.
bit3==>TWWC < TWI Write Collision Flag>
Aakan set apabila ada data yang menunggu pada TWDR saat Twint
dalam keadaan low (ini berarti tugas belum diselesaikan sampai
menunggu terselaisaikan dengan bit 1 pada TWINT)
bit2==>TWEN <twi enable>
mengaktifkan twi dengan mengirim nilai 1 pada register ini.
bit1==>tidak digunakan
bit0==>TWIE <twi interupsi enable>
untuk mengaktifkan interupsi servisce routin twi
3.TWSR (twi status register)
bit7-3==>TWS <twi status>
berisi nilai yang selalu diupdate setelah melakukan tugas twi
misalnya setelah mengirim data stop/start maka nilai disini akan berubah
nilai ini nantinya akan digunakan untuk mengetahui apa pengiriman berhasil/tidak
dengan membandingakan nilai antara nilai tabel dan nilai register ini
bit2==>tidak digunakan
bit1-0==>TWPS <twi prescaler>
digunakan bersama dengan register TWBR untuk menentukan clock
pada twi misalnya jika ingin nilai clock rendah di nilai 10khz
maka dengan kristal 16mhz dan prescaler=4 maka nilai TWBR=198
4.TWDR (twi data register)
bit7-0==>merupakan nilai data dari komunikasi twi disipan disini mau
data yang dikirim atau data yang diterima
5.TWAR (twi address register)
bit7-1==>TWA: TWI (Slave) Address Register
ini digunakan untuk mode slave saja ,yaitu untuk memberi alamat 7 bit pada slave sedadangkan
bit kedelapannya nanti adalah tanda bit untuk menulis atau membaca
bit0==>TWGCE: TWI General Call Recognition Enable Bit
digunakan untuk untuk alamat umum atau hanya 1 slave dengan alamat 0x00.
mode twi
contoh komunikasi datanya twi
proses data twi |
mode master tranmiter
proses komunikasi data dan code yang harus dijalankan |
proses yang harus dijalankan dengan code c untuk gambar di atas
1.Langkah pertama dalam transmisi TWI adalah untuk mengirimkan kondisi START. Hal ini dilakukan dengan
menulis nilai tertentu ke TWCR, menginstruksikan perangkat keras TWI untuk mengirimkan MULAI a
kondisi. Yang nilai menulis dijelaskan nanti. Namun, penting bahwa
TWINT bit diatur dalam nilai tertulis. Menulis satu untuk TWINT membersihkan bendera. TWI akan
tidak mulai operasi apapun selama bit TWINT di TWCR diatur. Segera setelah
aplikasi telah dibersihkan TWINT, TWI akan memulai transmisi kondisi START
code c
2. Ketika kondisi START telah ditransmisikan, TWINT Flag TWCR diatur, dan
TWSR diperbarui dengan kode status yang menunjukkan bahwa kondisi START memiliki sukses-
sepenuhnya telah dikirim
code c
3. Perangkat lunak aplikasi sekarang harus memeriksa nilai TWSR, untuk memastikan bahwa
kondisi START berhasil ditransmisikan. Jika TWSR menunjukkan sebaliknya, applica- yang
software tion mungkin mengambil beberapa tindakan khusus, seperti memanggil rutin kesalahan. Berasumsi bahwa
kode status seperti yang diharapkan, aplikasi tersebut harus memuat SLA + W ke TWDR. Ingat
yang TWDR digunakan baik untuk alamat dan data. Setelah TWDR telah dimuat dengan
diinginkan SLA + W, nilai tertentu harus ditulis untuk TWCR, menginstruksikan hardware TWI
untuk mengirimkan SLA + W hadir di TWDR. Yang nilai menulis dijelaskan nanti.
Namun, penting bahwa bit TWINT diatur dalam nilai tertulis. Menulis satu untuk
TWINT membersihkan bendera. TWI tidak akan memulai operasi apapun selama bit TWINT di
TWCR diatur. Segera setelah aplikasi telah dibersihkan TWINT, TWI akan memulai
transmisi paket alamat
code c
4. Ketika paket alamat telah dikirimkan, TWINT Flag TWCR diatur, dan
TWSR diperbarui dengan kode status yang menunjukkan bahwa paket alamat telah berhasil
telah terkirim. Kode status juga akan mencerminkan apakah seorang budak diakui paket atau
tidak
5. Perangkat lunak aplikasi sekarang harus memeriksa nilai TWSR, untuk memastikan bahwa
paket alamat berhasil dikirimkan, dan bahwa nilai bit ACK adalah sebagai
diharapkan. Jika TWSR menunjukkan sebaliknya, perangkat lunak aplikasi mungkin mengambil beberapa khusus
tindakan, seperti memanggil rutin kesalahan. Dengan asumsi bahwa kode status seperti yang diharapkan,
Aplikasi harus memuat paket data ke TWDR. Selanjutnya, nilai tertentu harus
ditulis untuk TWCR, menginstruksikan hardware TWI untuk mengirimkan hadir paket data di
TWDR. Yang nilai menulis dijelaskan nanti. Namun, penting bahwa
TWINT bit diatur dalam nilai tertulis. Menulis satu untuk TWINT membersihkan bendera. TWI akan
tidak mulai operasi apapun selama bit TWINT di TWCR diatur. Segera setelah
aplikasi telah dibersihkan TWINT, TWI akan memulai transmisi paket data
6. Ketika paket data telah dikirim, yang TWINT Flag TWCR diatur, dan TWSR
diperbarui dengan kode status yang menunjukkan bahwa paket data telah berhasil dikirim.
Kode status juga akan mencerminkan apakah seorang budak diakui paket atau tidak
7. Perangkat lunak aplikasi sekarang harus memeriksa nilai TWSR, untuk memastikan bahwa
paket data berhasil dikirim, dan bahwa nilai bit ACK adalah sebagai
diharapkan. Jika TWSR menunjukkan sebaliknya, perangkat lunak aplikasi mungkin mengambil beberapa khusus
tindakan, seperti memanggil rutin kesalahan. Dengan asumsi bahwa kode status seperti yang diharapkan,
aplikasi harus menulis nilai tertentu untuk TWCR, menginstruksikan hardware TWI untuk mengirimkan
kondisi STOP. Yang nilai menulis dijelaskan nanti. Namun, penting bahwa
bit TWINT diatur dalam nilai tertulis. Menulis satu untuk TWINT membersihkan bendera. TWI
tidak akan memulai operasi apapun selama bit TWINT di TWCR diatur. Segera setelah
aplikasi telah dibersihkan TWINT, TWI akan memulai transmisi-kondisi BERHENTI
tion. Perhatikan bahwa TWINT TIDAK ditetapkan setelah kondisi BERHENTI telah dikirim
Ketika TWI telah selesai operasi dan mengharapkan respon aplikasi, TWINT Flag
diatur. Garis SCL ditarik rendah sampai TWINT dibersihkan
• Ketika TWINT Flag diatur, pengguna harus memperbarui semua TWI Register dengan nilai yang relevan
untuk siklus bus TWI berikutnya. Sebagai contoh, TWDR harus dimuat dengan nilai menjadi
ditransmisikan dalam siklus bus berikutnya
• Setelah semua pembaruan TWI Register dan menunggu tugas aplikasi perangkat lunak lainnya telah
selesai, TWCR ditulis. Saat menulis TWCR, sedikit TWINT harus ditetapkan. menulis
satu untuk TWINT membersihkan bendera. TWI kemudian akan memulai melaksanakan operasi apapun
ditentukan oleh pengaturan TWCR
code c dan asembli untuk gambar diatas
1
ldi r16, (1<<TWINT)|(1<<TWSTA)|
(1<<TWEN)
out TWCR, r16
TWCR = (1<<TWINT)|(1<<TWSTA)|
(1<<TWEN)
Send START condition
2
wait1:
in r16,TWCR
sbrs r16,TWINT
rjmp wait1
while (!(TWCR & (1<<TWINT)))
;
Wait for TWINT Flag set. This
indicates that the START condition
has been transmitted
3
in r16,TWSR
andi r16, 0xF8
cpi r16, START
brne ERROR
if ((TWSR & 0xF8) != START)
ERROR();
Check value of TWI Status
Register. Mask prescaler bits. If
status different from START go to
ERROR
ldi r16, SLA_W
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
out TWCR, r16
TWDR = SLA_W;
TWCR = (1<<TWINT) | (1<<TWEN);
Load SLA_W into TWDR Register.
Clear TWINT bit in TWCR to start
transmission of address
4
wait2:
in r16,TWCR
sbrs r16,TWINT
rjmp wait2
while (!(TWCR & (1<<TWINT)))
;
Wait for TWINT Flag set. This
indicates that the SLA+W has been
transmitted, and ACK/NACK has
been received.
5
in r16,TWSR
andi r16, 0xF8
cpi r16, MT_SLA_ACK
brne ERROR
if ((TWSR & 0xF8) !=
MT_SLA_ACK)
ERROR();
Check value of TWI Status
Register. Mask prescaler bits. If
status different from MT_SLA_ACK
go to ERROR
ldi r16, DATA
out TWDR, r16
ldi r16, (1<<TWINT) | (1<<TWEN)
out TWCR, r16
TWDR = DATA;
TWCR = (1<<TWINT) | (1<<TWEN);
Load DATA into TWDR Register.
Clear TWINT bit in TWCR to start
transmission of data
6
wait3:
in r16,TWCR
sbrs r16,TWINT
rjmp wait3
while (!(TWCR & (1<<TWINT)))
;
Wait for TWINT Flag set. This
indicates that the DATA has been
transmitted, and ACK/NACK has
been received.
7
in r16,TWSR
andi r16, 0xF8
cpi r16, MT_DATA_ACK
brne ERROR
if ((TWSR & 0xF8) !=
MT_DATA_ACK)
ERROR();
Check value of TWI Status
Register. Mask prescaler bits. If
status different from
MT_DATA_ACK go to ERROR
ldi r16, (1<<TWINT)|(1<<TWEN)|
(1<<TWSTO)
out TWCR, r16
TWCR = (1<<TWINT)|(1<<TWEN)|
(1<<TWSTO);
Transmit STOP condition
jika di rangkum untuk mode master transmiter adalah
1.kirim start
2.tunggu twint set
3.1.bandingkan nilai twsr dengan nilai start jika tidak sama berarti jump ke error();
3.2.masukan data ke twdr,clear flag twint
4.tunggu flag twint
5.1.cek status register apabila nilainya tidak sama dengan nilai status maka jump ke error
5.2 isikan data yang mau dikirim ke twdr register,clear flag twint untuk mengirim data
6.tunggu twint set sebagai tanda pengiriman berhail
7.1.cek status register jika nilai berbeda maka error
7.2.kirim stop tranmision
bus twi |
status code master tranmiter |
mode master reciever
Dalam modus Master Receiver, sejumlah byte data yang diterima dari Slave Transmitter
(Lihat Gambar 80). Dalam rangka untuk memasukkan modus Master, kondisi START harus dikirimkan. Itu
format paket alamat berikut menentukan apakah Guru Transmitter atau Master
modus penerima yang akan dimasukkan. Jika SLA + W ditransmisikan, modus MT dimasukkan, jika SLA + R adalah trans-
mitted, modus MR dimasukkan. Semua kode status disebutkan dalam bagian ini mengasumsikan bahwa
prescaler bit adalah nol atau bertopeng ke nol.
sytart
Twen harus ditulis untuk satu untuk mengaktifkan Dua-kawat Serial Interface, TWSTA harus ditulis untuk
satu untuk mengirimkan kondisi START dan TWINT harus diatur untuk menghapus TWINT Flag. TWI
maka akan menguji Dua-kawat Serial Bus dan menghasilkan kondisi START secepat bus
menjadi bebas. Setelah kondisi START telah ditransmisikan, TWINT Flag diatur oleh keras-
ware, dan kode status di TWSR akan 0x08 (lihat Tabel 66 pada halaman 173). Dalam rangka untuk masuk
Modus MR, SLA + R harus dikirimkan. Hal ini dilakukan dengan menulis SLA + R untuk TWDR. setelah itu
TWINT bit harus dibersihkan (dengan menulis ke salah satu) untuk melanjutkan transfer. Hal ini dilakukan
dengan menulis nilai berikut untuk TWCR:
Ketika SLA + R telah ditransmisikan dan sedikit pengakuan telah diterima, TWINT adalah
set lagi dan sejumlah kode status di TWSR yang mungkin. kode status mungkin dalam Guru
Modus yang 0x38, 0x40, 0x48 atau. Tindakan yang tepat harus diambil untuk masing-masing kode status ini
dirinci pada Tabel 67 di halaman 176. Diterima data dapat dibaca dari TWDR Register ketika
yang TWINT Flag diatur tinggi oleh hardware. Skema ini diulang sampai byte terakhir telah
diterima. Setelah byte terakhir telah diterima, MR harus menginformasikan ST dengan mengirimkan
NACK setelah yang terakhir diterima byte data. transfer berakhir dengan menghasilkan kondisi BERHENTI atau
kondisi START diulang. Sebuah kondisi STOP dihasilkan dengan menulis nilai berikut untuk
TWCR:
Setelah kondisi START berulang (negara 0x10) Dua-kawat Serial Interface dapat mengakses
Slave yang sama lagi, atau Slave baru tanpa transmisi kondisi STOP. diulang MULAI
memungkinkan Guru untuk beralih antara hamba-hamba, modus Master Transmitter dan Master Receiver
modus tanpa kehilangan kendali atas bus.
mode slave reciever
Dalam modus Slave Receiver, sejumlah byte data yang diterima dari Transmitter Guru
(Lihat Gambar 82). Semua kode status disebutkan dalam bagian ini mengasumsikan bahwa prescaler bit
nol atau bertopeng ke nol.
Untuk memulai modus Slave Receiver, Twar dan TWCR harus diinisialisasi sebagai berikut:
Bagian atas 7 bit alamat mana Dua-kawat Serial Interface akan merespon ketika
ditangani oleh Master. Jika LSB diatur, TWI akan merespon ke alamat panggilan umum (0x00),
selain itu akan mengabaikan alamat panggilan umum.
Twen harus ditulis untuk satu untuk mengaktifkan TWI. The TWEA bit harus ditulis untuk satu untuk mengaktifkan
pengakuan alamat slave perangkat sendiri atau alamat panggilan umum. TWSTA
dan TWSTO harus ditulis dengan nol.
Ketika Twar dan TWCR telah diinisialisasi, TWI menunggu sampai itu ditangani oleh sendiri
alamat slave (atau alamat panggilan umum jika diaktifkan) diikuti oleh bit data arah. Jika
arah bit adalah "0" (write), TWI akan beroperasi dalam mode SR, dinyatakan modus ST dimasukkan. Setelah
alamat slave sendiri dan sedikit menulis telah diterima, TWINT Flag diatur dan valid
kode status dapat dibaca dari TWSR. Kode status digunakan untuk menentukan lunak yang sesuai
tindakan ware. Tindakan yang tepat harus diambil untuk setiap kode status dirinci pada Tabel 68 di
Halaman 179. Slave Receiver Mode juga dapat dimasukkan jika arbitrase hilang sementara TWI di
modus Master (lihat negara 0x68 dan 0x78).
Jika bit TWEA adalah ulang saat transfer, TWI akan kembali "Tidak Akui" ( "1") untuk SDA
setelah byte data yang diterima berikutnya. Ini dapat digunakan untuk menunjukkan bahwa Slave tidak mampu
menerima lebih byte. Sementara TWEA adalah nol, TWI tidak mengakui budak sendiri
alamat. Namun, dua-kawat Serial Bus masih dipantau dan pengakuan alamat mungkin
melanjutkan setiap saat dengan menetapkan TWEA. Ini berarti bahwa bit TWEA dapat digunakan untuk sementara
mengisolasi TWI dari Dua-kawat Serial Bus.
Dalam semua mode sleep selain mode Idle, sistem jam ke TWI dimatikan. Jika TWEA
bit diatur, antarmuka masih bisa mengakui alamat slave sendiri atau alamat panggilan umum oleh
menggunakan dua-kawat Serial Bus jam sebagai sumber jam. bagian kemudian akan bangun dari tidur
dan TWI akan terus clock rendah SCL selama bangun dan sampai TWINT Flag dibersihkan
(Dengan menulis ke satu). penerimaan data lebih lanjut akan dilakukan seperti biasa, dengan jam AVR
berjalan seperti biasa. Perhatikan bahwa jika AVR sudah diatur dengan waktu yang lama start-up, garis SCL mungkin
diadakan rendah untuk waktu yang lama, memblokir transmisi data lainnya.
Perhatikan bahwa dua-kawat Serial Interface Data Register - TWDR tidak mencerminkan byte terakhir
hadir di bus ketika bangun dari mode Sleep tersebut.
Slave Transmitter
Mode
Dalam modus Slave Transmitter, sejumlah byte data yang ditransmisikan ke Master Receiver
(Lihat Gambar 84). Semua kode status disebutkan dalam bagian ini mengasumsikan bahwa prescaler bit
nol atau bertopeng ke nol.
Untuk memulai modus Slave Transmitter, Twar dan TWCR harus diinisialisasi sebagai berikut:
Bagian atas tujuh bit alamat mana Dua-kawat Serial Interface akan merespon ketika
ditangani oleh Master. Jika LSB diatur, TWI akan merespon ke alamat panggilan umum (0x00),
selain itu akan mengabaikan alamat panggilan umum.
Twen harus ditulis untuk satu untuk mengaktifkan TWI. The TWEA bit harus ditulis untuk satu untuk mengaktifkan
pengakuan alamat slave perangkat sendiri atau alamat panggilan umum. TWSTA
dan TWSTO harus ditulis dengan nol.
Ketika Twar dan TWCR telah diinisialisasi, TWI menunggu sampai itu ditangani oleh sendiri
alamat slave (atau alamat panggilan umum jika diaktifkan) diikuti oleh bit data arah. Jika
arah bit adalah "1" (baca), TWI akan beroperasi dalam mode ST, jika modus SR dimasukkan. Setelah
alamat slave sendiri dan sedikit menulis telah diterima, TWINT Flag diatur dan valid
kode status dapat dibaca dari TWSR. Kode status digunakan untuk menentukan lunak yang sesuai
tindakan ware. Tindakan yang tepat harus diambil untuk setiap kode status dirinci pada Tabel 69 di
Halaman 182. The Slave Transmitter modus juga dapat dimasukkan jika arbitrase hilang sementara TWI adalah
dalam modus Master (lihat negara 0xB0).
Jika bit TWEA ditulis ke nol selama transfer, TWI akan mengirimkan byte terakhir dari transformasi tersebut
fer. Negara 0xC0 atau negara 0xC8 akan dimasukkan, tergantung pada apakah Master Receiver
mentransmisikan NACK atau ACK setelah byte akhir. TWI dialihkan ke Slave tidak ditangani
modus, dan akan mengabaikan Guru jika terus transfer. Jadi Guru Penerima menerima
semua "1" sebagai data serial. Negara 0xC8 dimasukkan jika tuntutan Guru byte data tambahan (oleh
transmisi ACK), meskipun Slave telah ditransmisikan byte terakhir (TWEA nol dan diharapkan-
ing NACK dari Master).
Sementara TWEA adalah nol, TWI tidak merespon ke alamat budak sendiri. Namun, dua-kawat
Serial Bus masih dipantau dan pengakuan alamat dapat melanjutkan setiap saat dengan menetapkan TWEA.
Ini berarti bahwa bit TWEA dapat digunakan untuk sementara mengisolasi TWI dari Dua kawat
Serial Bus.
Twar TWA6 TWA5 TWA4 TWA3 TWA2 TWA1 TWA0 TWGCE
nilai Perangkat Sendiri Slave Alamat
TWCR TWINT TWEA TWSTA TWSTO TWWC twen - TWIE
Nilai 0 1 0 0 0 1 0 X
Perangkat 3 perangkat n
SDA
SCL
........ R1 R2
V CC
perangkat 2
MENGUASAI
PENERIMA
perangkat 1
BUDAK
PEMANCAR
182
2486AA-AVR-02/2013
ATmega8 (L)
Dalam semua mode sleep selain mode Idle, sistem jam ke TWI dimatikan. Jika TWEA
bit diatur, antarmuka masih bisa mengakui alamat slave sendiri atau alamat panggilan umum oleh
menggunakan dua-kawat Serial Bus jam sebagai sumber jam. bagian kemudian akan bangun dari tidur
dan TWI akan mengadakan jam SCL akan rendah selama bangun dan sampai TWINT Bendera
dibersihkan (dengan menulis ke satu). transmisi data lebih lanjut akan dilakukan seperti biasa, dengan
AVR jam berjalan seperti biasa. Perhatikan bahwa jika AVR sudah diatur dengan waktu yang lama start-up,
SCL baris dapat diadakan rendah untuk waktu yang lama, memblokir transmisi data lainnya.
Perhatikan bahwa dua-kawat Serial Interface Data Register - TWDR tidak mencerminkan byte terakhir
hadir di bus ketika bangun dari mode sleep ini
penting<>
Ada dua kode status yang tidak sesuai dengan keadaan TWI didefinisikan, lihat Tabel 70.
Status 0xF8 menunjukkan bahwa tidak ada informasi yang relevan tersedia karena TWINT Bendera tidak
set. Hal ini terjadi antara negara-negara lain, dan ketika TWI tidak terlibat dalam transfer serial.
Status 0x00 menunjukkan bahwa kesalahan bus telah terjadi selama dua-kawat Serial Bus transfer. Sebuah bus
kesalahan terjadi ketika memulai atau menghentikan kondisi terjadi pada posisi ilegal di format frame.
Contoh posisi ilegal tersebut selama transfer serial byte alamat, byte data,
atau mengakui bit. Ketika kesalahan bus terjadi, TWINT diatur. Untuk pulih dari kesalahan bus, yang
TWSTO Flag harus mengatur dan TWINT harus dibersihkan dengan menulis logika satu untuk itu. Hal ini menyebabkan
TWI untuk masuk ke modus Slave tidak ditangani dan untuk membersihkan TWSTO Flag (tidak ada potongan lain di
TWCR yang terpengaruh). SDA dan SCL baris dilepaskan, dan tidak ada kondisi STOP
ditularkan.
penting<combinasi mode twi>
Dalam beberapa kasus, beberapa mode TWI harus dikombinasikan untuk menyelesaikan tindakan yang diinginkan.
Pertimbangkan misalnya membaca data dari EEPROM serial. Biasanya, seperti transfer melibatkan
langkah-langkah berikut:
1. Transfer harus dimulai
2. EEPROM harus diinstruksikan apa lokasi harus dibaca
3. membaca harus dilakukan
4. Transfer harus selesai
Perhatikan data yang ditransmisikan baik dari Guru untuk Slave dan sebaliknya. Guru harus menginstruksikan
Slave apa lokasi yang ingin membaca, membutuhkan penggunaan modus MT. Selanjutnya, data yang
harus dibaca dari Slave, menyiratkan penggunaan modus MR. Dengan demikian, arah transfer harus
diubah. Guru harus tetap mengontrol bus selama semua langkah ini, dan langkah-langkah
harus dilakukan sebagai operasi atomical. Jika prinsip ini dilanggar dalam pendokumentasian multimaster
tem, Guru lain dapat mengubah pointer data dalam EEPROM antara langkah 2 dan 3, dan
Guru akan membaca data lokasi yang salah. Seperti perubahan arah transfer dilakukan dengan
transmisi MULAI BERULANG antara transmisi byte alamat dan penerimaan
dari data. Setelah MULAI BERULANG, Master terus kepemilikan bus. Pengikut
Angka menunjukkan aliran dalam transfer ini.
Gambar 86. Menggabungkan Beberapa Mode TWI untuk Mengakses EEPROM Serial
multi master<>
Jika beberapa master yang terhubung ke bus yang sama, transmisi dapat dimulai simultane-
menerus oleh satu atau lebih dari mereka. TWI standar memastikan bahwa situasi tersebut ditangani di
sedemikian rupa sehingga salah seorang guru akan diizinkan untuk melanjutkan dengan transfer, dan bahwa tidak ada data
akan hilang dalam proses. Contoh dari situasi arbitrase digambarkan di bawah ini, di mana dua
master mencoba untuk mengirimkan data ke Slave Receiver.
Beberapa skenario yang berbeda mungkin timbul selama arbitrase, seperti yang dijelaskan di bawah ini:
• Dua atau lebih master kinerja komunikasi identik dengan Slave yang sama. Didalam
kasus, baik Slave maupun dari master akan tahu tentang pertengkaran bus
• Dua atau lebih master yang mengakses Slave sama dengan data yang berbeda atau arah bit. Didalam
kasus, arbitrase akan terjadi, baik di BACA / TULIS bit atau bit data. master
mencoba untuk output satu di SDA sementara Guru lain output nol akan kehilangan arbitrase.
Kehilangan master akan beralih ke mode Slave tidak ditangani atau menunggu sampai bus gratis dan
mengirimkan kondisi START baru, tergantung pada tindakan aplikasi perangkat lunak
• Dua atau lebih master mengakses budak yang berbeda. Dalam hal ini, arbitrase akan terjadi di
SLA bit. Masters mencoba untuk output satu di SDA sementara Guru lain output akan nol
kehilangan arbitrase. Masters kehilangan arbitrase di SLA akan beralih ke mode Slave untuk memeriksa apakah
mereka sedang ditangani oleh Master menang. Jika ditangani, mereka akan beralih ke SR atau ST
modus, tergantung pada nilai BACA / TULIS bit. Jika mereka tidak ditangani, mereka
akan beralih ke mode Slave tidak ditangani atau menunggu sampai bus gratis dan mengirimkan baru
MULAI kondisi, tergantung pada tindakan aplikasi perangkat lunak
Ini diringkas dalam Gambar 88. nilai status Kemungkinan diberikan dalam lingkaran.
Tidak ada komentar:
Posting Komentar