MSP430 EXP-FG4618/F2013 und I2C

Gast #987167
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 ;)
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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.