Forum: Mikrocontroller und Digitale Elektronik MSP430 EXP-FG4618/F2013 und I2C


von Chris (Gast)


Lesenswert?

Hallo,

Ich versuche gerade auf dem Experimenter Board von TI (ein FG4618 und 
ein F2013 MSP430 drauf) eine Kommunikation zwischen den beiden per I2C 
aufzubauen.
Der FG4618 soll der Master sein, und da ich anfangs nicht wusste wie die 
Addresse des F2013 ist hab ich den Adressraum durchsucht und die Adresse 
auf dem LCD anzeigen lassen, hat auch wunderbar geklappt. Bis ich dann 
angefangen hab den F2013 zu programmieren... Jetzt findet er nichts 
mehr, das seltsame daran ist, wenn der F2013 (ebenfalls) als Master 
gesetzt ist durchsucht der FG4618 den Adressraum (extra eine Anzeige 
dafuer programmiert) findet aber nichts mehr.
Wenn ich jetzt aber den F2013 als Slave schalte, was auch so sein 
sollte, wird nichts mehr durchsucht. Dh. die Anzeige bleibt stehen, auch 
wenn ich das JTAG vom F2013 abziehe (die Pins werden ja gemultiplexed, 
koennte sich ja beissen)

Meine Frage ist jetzt nur, was fuer moegliche Gruende koennte es denn 
geben dass ein Slave den I2C blockiert. Der FG4618 sagt naemlich dass 
der Bus busy ist... Register sollten richtig gesetzt sein, hab das mit 
Codesamples abgeglichen. Nichtsdesto trotz:

FG4618:
1
UCB0CTL1 |= UCSWRST;  //Softwarereset ein => USCI aus
2
P3SEL |= 0x06;  //P3.1 = SDA, P3.2 = SCL initialisieren
3
UCB0CTL0 |= UCMM + UCMST + UCMODE_3 + UCSYNC;    //Master, I2C, Sync Modi
4
UCB0CTL1 |= UCSSEL_3;  //SMCLK 
5
UCB0BR0 |= 0x10;    //div 16
6
UCB0BR1 |= 0x00;
7
UCB0I2CSA |= 0x00;    //adress wird gesucht
8
UCB0I2CIE &= ~(UCNACKIE + UCSTPIE + UCSTTIE);    //NACK, START, STOP Interrupts aus
9
UCB0I2CIE &= ~UCALIE;  //Arbiration Interrupt aus
10
UCB0CTL1 &= ~UCSWRST;


F2013
1
USICTL0 |= USISWRST;  //Softwarereset rein
2
P1OUT |= 0xc0;  //P1.6, P1.7 Pullups
3
P1REN |= 0xc0;  //P1.6, P1.7 Pullups
4
  
5
USICTL0 &= ~USIOE;
6
USICTL0 |= USIPE6 + USIPE7;    //Port & USI mode setup
7
USICTL1 |= USII2C + USIIE + USISTTIE;//Enable I2C mode & USI interrupts
8
USICKCTL |= USIDIV_4 + USISSEL_2 + USICKPL;  //Setup USI clocks: SCL = SMCLK/16
9
USICTL0 &= ~USISWRST;  //Enable USI
10
USICTL1 &= ~USIIFG;

Kann sein dass kleine Ungereimtheiten jetzt im Code auftauchen, hab 
vorhin nochmal rumgespielt ;)

von Jörg S. (joerg-s)


Lesenswert?

Also vom USI hab ich bisher nur mal das User Guide gelesen, aber soweit 
ich mich erinnere stand da recht häufig das das I2C Interface auf SCL 
Low stehen bleibt. Man muss da also reht häufig das SCL Low aufheben 
damit es weiter geht.
Wie schaut der I2C denn auf dem Oszi aus? Beide Leitungen gehen immer 
schön auf high zurück?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.