[elektro] AVR TWI nyug

Szima Gábor sygma at tesla.hu
Thu Mar 13 08:46:02 CET 2008


Sziasztok!

Kuzdok a TWI (I2C)-vel ket AVR kozott. Mega16 a Master, Mega8 a Slave.

A kovetkezo szerint van felepitve a kod:

http://hubbard.engr.scu.edu/avr/avrlib/docs/html/i2c_8c-source.html

Elmeletileg oda-vissza mennek az adatok, csak van egy kis gond. Megpedig 
az, hogy amikor a Slave-en TX eseten elfogynak a kuldendo adatok, hiaba 
kuldok NAK-ot, a Masterhez ez el sem jut (status valtozatlan), es 
mindaddig gyotri szegenyt, amig a veteli oldalon (Master RX) be nem telik 
a puffer (akkor kapcsolja csak le a vetelt).
Ebben az esetben a Slave biztosan nem ad, mert FF-ek jonnek.

A kerdeses kodreszlet (Slave TX)

00545     case TW_ST_DATA_ACK:                // 0xB8: data byte has been transmitted, ACK has been received

00551         // transmit data byte
00552         outb(TWDR, I2cSendData[I2cSendDataIndex++]);
00553         if(I2cSendDataIndex < I2cSendDataLength)
00554             // expect ACK to data byte
00555             outb(TWCR, (inb(TWCR)&TWCR_CMD_MASK)|BV(TWINT)|BV(TWEA));
00556         else
00557             // expect NACK to data byte
00558             outb(TWCR, (inb(TWCR)&TWCR_CMD_MASK)|BV(TWINT));
00559         break;

Illetve (Master RX)

00404     case TW_MR_DATA_NACK:               // 0x58: Data received, NACK reply issued
00410         // store final received data byte
00411         I2cReceiveData[I2cReceiveDataIndex++] = inb(TWDR);
00412         // continue to transmit STOP condition
00413     case TW_MR_SLA_NACK:                // 0x48: Slave address not acknowledged
00414     case TW_MT_SLA_NACK:                // 0x20: Slave address not acknowledged
00415     case TW_MT_DATA_NACK:               // 0x30: Data not acknowledged
00421         // transmit stop condition, enable SLA ACK
00422         i2cSendStop();
00423         // set state
00424         I2cState = I2C_IDLE;
00425         break;

A TW_MR_DATA_NACK (0x58) statusz akkor jon, amikor a Master az RX-puffer 
elfogyasakor kuld en NAK-ot (sajat maganak?).

A sebesseg 100 es 400 kHz, az SCL/SDA labakon Master oldalon aktiv 
aramgeneratoros (kb. 15-15 mA) felhuzas van, a vezetek kb. 2 meter.


Mi lehet a problema?


 								-Sygma



More information about the Elektro mailing list