msp430 i²C UND SPI

OP #1301958
Lesenswert?

Hallo,

mein verwendeter MSP hat eine gemeinsame I²C und SPI Schnittstelle. Das 
bedeutet doch, dass ich nicht mehr die möglichkeit habe, SPI und I2C- 
Teilnehmer parallel(zeitlich gesehen) zu betreiben.

Muss ich auf externe Schnittstellen als IC ausweichen?
Oder Gibt es fertige SW-Routinen, die eine gleichwertige Schnittstelle 
realisieren? Dann ist meine CPU-Auslasstung doch hoch oder? Will den 
Controller mit 32kHz ext. Clock laufen lassen.

Danke für Lösungen
#1301961
Lesenswert?

Da der nur eine CPU hat, kannst du eh nicht 2 Sachen gleichzeitig 
machen. Du kannst aber immer noch zwischen I2C und SPI umschalten, die 
Anschlüsse sind ja bei fast allen MSP430 extra rausgeführt. Was 
verstehst du denn unter gleichzeitig? Und 32kHz als MCLK ist wirklich 
nur in ganz besonderen Fällen sinnvoll, wenn es wirklich auf µW 
ankommt...ansonsten nimmt man den DCO dafür, der wacht extrem schnell 
auf, braucht wenig Strom. Bei einem ordentlichen MSP430 Design ist die 
CPU nur ganz kurz während der Interrupt-Abarbeitung aktiv, die restliche 
Zeit im LPM...
Persönliche Seite #1301983
Lesenswert?

"mein verwendeter MSP" - welcher?

Das hängt vom verwendeten MSP430-Derivat ab. Die "alten", wie 
beispielsweise der 'F16x, die können tatsächlich nur SPI oder I2C 
oder asynchron seriell.

In neueren MSP430-Varianten wird eine Kombination aus USCI_A und USCI_B 
verwendet, diese kann gleichzeitig SPI und I2C (oder asyn. UART und 
I2C oder asyn. UART und SPI).

> Will den Controller mit 32kHz ext. Clock laufen lassen.

Das sagt exakt gar nichts, denn damit lässt sich -je nach verwendeter 
Variante- auch der interne DCO betreiben. Und damit stehen -je nach 
verwendeter Variante- auch etliche MHz zur Verfügung.
Persönliche Seite #1301996
Lesenswert?

Ja, sorry, da hatte ich mich missverständlich ausgedrückt.
Es gibt sehr unterschiedliche Hardwarevarianten des MSP430, deswegen ist 
es wichtig, zu wissen, um welche Variante es geht.

Würde der Threadstarter beispielsweise einen 'F5438 verwenden, wäre 
seine Frage unverständlich, da dieser vier USCI_A/B-Paare aufweist und 
so simultan vier I2C- und vier SPI-Schnitttellen bedienen kann.
Persönliche Seite #1302072
Lesenswert?

Der '2274 verwendet dieselbe USCI_A und USCI_B-Kombination, wie sie auch 
im '5438 anzutreffen ist, halt nur einmal.

USCI_A0 ist für SPI zu verwenden, USCI_B0 ist für I2C zu verwenden.

Diese beiden kannst Du simultan verwenden.

Wenn Du noch zusätzlich eine UART benötigst, so muss USCI_A0 dran 
glauben bzw. je nach Bedarf umkonfiguriert werden. Oder Du verwendest 
eine Software-UART, was je nach zu übertragender Datenmenge auch kein 
Problem darstellen muss.
#1302107
Lesenswert?

Rufus t. Firefly schrieb:
> Der '2274 verwendet dieselbe USCI_A und USCI_B-Kombination, wie sie auch
> im '5438 anzutreffen ist, halt nur einmal.
>
> USCI_A0 ist für SPI zu verwenden, USCI_B0 ist für I2C zu verwenden.
>
> Diese beiden kannst Du simultan verwenden.
>
> Wenn Du noch zusätzlich eine UART benötigst, so muss USCI_A0 dran
> glauben bzw. je nach Bedarf umkonfiguriert werden. Oder Du verwendest
> eine Software-UART, was je nach zu übertragender Datenmenge auch kein
> Problem darstellen muss.

Oder die Timer UART, das ist ziemlich geschickt gemacht beim MSP430 mit 
dem Timer A.
OP #1303263
Lesenswert?

controller ist leider vorgeschrieben, also muss ich wohl eine der drei 
Interfaces via SW aufbauen.

  ODER:

Ich will die sensordaten alle was weiß ich vllt 10 min auslesen. Für die 
Zeit des Auslesens sind SPI und I2C aktiv.
Jede Stunde etwa ist die UART an für die Datenübermittlung via X-Port. 
Vllt hilft mir das auch, weil so kann ich die Schnittstellen zeitlich 
voneinander trennen, mal läuft es so, mal läuft es so, das wäre die 
Lösung für mich.
OP #1303471
Lesenswert?

"umschalten"

Heißt das, dass ich eine Art Wechselschalter (als Halbleiter) nutze, der 
mir entweder den einen oder den anderen Weg frei schaltet?

Weil wenn die doppelt genutzte Leitung einfach UART-Signale an 
SPI-Teilnehmer sendet, gibt es sicher nix gutes...
umgekehrt natürlich genauso.

Wie realisiere ich solch einen Wechsler am einfachsten? Ne 
Transistorschaltung? oder gibt es IC`s?
#1303894
Lesenswert?

>Ist der Programmieraufwand geringer?
Ja. Vor allem verbraucht man für SPI oder I2C keine kostbaren Timer :)
Für SPI musst du nur Portpins auf high-und low legen ohne dich groß um 
das Timing zu kümmern. Einfacher gehts nicht.

Z.B.
Lese-Schreibroutine für SPI (74HC165/74HC595)
1
unsigned char rw_74HC165_74HC595 (unsigned char data_out)
2
{
3
  unsigned char i;
4
  unsigned char data_in;
5
  
6
  data_in = 0;
7
  
8
  // 74HC165 Eingaenge in Shift Register uebertragen
9
  LOAD_L;
10
  LOAD_H;
11
  
12
  for(i = 0x80; i != 0; i >>= 1)
13
  {
14
    // Bit ausgeben
15
    if (data_out & i) MOSI_H;
16
    else              MOSI_L;
17

18
    // Bit lesen
19
    if (MISO_IN_H) data_in |= i;    
20
    
21
    // Takt ausgeben
22
    CLK_H;
23
    CLK_L;
24
  }
25
  
26
  // 74HC595 Ausgaenge setzen
27
  SET_H;
28
  SET_L;
29
  
30
  return data_in;
31
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren