Forum: Mikrocontroller und Digitale Elektronik Sensoren mit SPI-Schnittstelle über SSI auslesen?


von rene p (Gast)


Lesenswert?

Hallo,
bisher habe ich nur mit SPI (erste) Erfahrungen gesammelt.
Jetzt die zwei für mich wichtigen Fragen:
Könnte ich Sensoren die nur eine SPI Schnittstelle haben auch mit einem 
µC auslesen, der nur eine SSI-Schnittstelle hat?
Könnte ich hier dann auch die Daten von mehrere Sensoren über eine 
SSI-Schnittstelle einlesen?

Und jetzt noch meine dargelegte persönliche Verwirrung:
Ich hab hier ein bisschen rumgeschaut und anders herum scheint es zu 
gehen (also Sensor mit SSI über SPI auslesen)
Aber so ganz schlau werd ich ausdem SSI nicht.
Der eine sagt
SSI is ein abgespecktes SP
der andere sagt
SSI is ein abgespecktes I2C

und wieder einer sagt:
man kann mit SSI nur Datenempfangen, aber keine Daten senden (also keine 
Geräte konfigurieren)

Letzteres hört sich sehr dubios an :]

von Timmo H. (masterfx)


Lesenswert?


von rene p (Gast)


Lesenswert?

Ah ich sehe grad im Datenblatt von dem Stellaris ARM Cortex M3, dass man 
die SSI-Schnittstelle für SPI verwenden kann.
Insofern geht es wohl.
Aber klappt das dann auch noch mit mehreren Sensoren (z.B. zwei 
Beschleunigungssensoren) über diese "SSI als SPI 
eingestellte"-Schnittstelle?

von rene p (Gast)


Lesenswert?

The SSI allows to connect up to 3 slaves to a common clock. Therefore, 
it is possible to attain values from multiple sensors.

Timmo H. schrieb:
> http://en.wikipedia.org/wiki/Synchronous_Serial_Interface

Da steht nichts über SPI. Es beantwortet meine primären Fragen nicht.
Die dortige Aussage "The SSI allows to connect up to 3 slaves to a 
common clock. Therefore, it is possible to attain values from multiple 
sensors." hilft mir nicht, da ich ja wenn dann drei SPI-Slaves 
anschließen will.
Bei SPI kann man ja normalerweise beliebig viele Slaves an einen Bus 
hängen.

von Sunny (Gast)


Lesenswert?

Hallo,
es gibt ein paar identische Dinge zwischen SSI und SPI, weshalb 
sicherlich auch Verwirrung entsteht. Das ursprüngliche Protokoll ist 
eine synchrone unidirektionale Kommunikation. Somit etwas wie ein halbes 
SPI.
SPI benötigt jedoch bei mehreren Sensoren (Slaves) ein ein-eindeutiges 
Selektierungssignal. Somit muß zu den Sensoren ein Chip-Select geführt 
werden, oder vor dem µC ein entsprechender Multiplexer aufgebaut werden.
Welchen µC willst Du einsetzten ? Stellaris ARM Cortex M3 ?

von ggggggGast (Gast)


Lesenswert?

rene p schrieb:
> Ich hab hier ein bisschen rumgeschaut und anders herum scheint es zu
> gehen (also Sensor mit SSI über SPI auslesen)

Kommt auf die Datenbreite der SSI Schnittstelle an. SPI macht in der 
Regel 8, SSI bis zu 24 Bit. Man muss dann halt mehrmals einlesen.


> Aber so ganz schlau werd ich ausdem SSI nicht.

Prinzip ist simpel. Jeder clock toggle schiebt ein Bit aus dem SSI Gerät 
raus. Da das bei bei SPI genau so ist kann! man SSI über SPI empfangen.

> Der eine sagt
> SSI is ein abgespecktes SP

Nein, es ist eine Schnittstelle die speziell für Drehgeber entwickelt 
wurde.

> der andere sagt
> SSI is ein abgespecktes I2C

Der "andere" liegt falsch

>
> und wieder einer sagt:
> man kann mit SSI nur Datenempfangen, aber keine Daten senden (also keine
> Geräte konfigurieren)
Richtig, one way

von ggggggGast (Gast)


Lesenswert?

rene p schrieb:
> Aber klappt das dann auch noch mit mehreren Sensoren (z.B. zwei
> Beschleunigungssensoren) über diese "SSI als SPI
> eingestellte"-Schnittstelle?

SSI ist ein simples Schieberegister. Du kannst da nicht zwei Sensoren 
auf einen µC Eingang legen.

rene p schrieb:
> Die dortige Aussage "The SSI allows to connect up to 3 slaves to a
> common clock.

SSI Ausgang ist der slave, du bist immer master. Da steht nur das du 3 
slaves mit einem clock versorgen kannst.


> Therefore, it is possible to attain values from multiple
> sensors." hilft mir nicht, da ich ja wenn dann drei SPI-Slaves
> anschließen will.

Wie jetzt? Da SSI immer slave ist bist du (SPI) immer master.

von rene p (Gast)


Lesenswert?

Sunny schrieb:
> Welchen µC willst Du einsetzten ? Stellaris ARM Cortex M3 ?

Jop genau - und wie gesagt: Bei dem Stellaris kann man anscheinend über 
ein Register die SSI als SPI Schnittstelle konfigurieren - oder 
zumindest als solche verwenden.
Nur wäre es für mich halt echt wichtig, mehr als drei der SPI-Sensoren 
an einen der (nur) zwei vorhanden Busse anschließen zu können. Geht das 
?


ggggggGast schrieb:
> Richtig, one way

Ich denke es is nur nicht full duplex - aber sowie ich das Bild bei 
Wikipedia interpretiere, kann man da schon Daten schicken...

ggggggGast schrieb:
> Kommt auf die Datenbreite der SSI Schnittstelle an. SPI macht in der
> Regel 8, SSI bis zu 24 Bit. Man muss dann halt mehrmals einlesen.

Hm, mein ADU hier hat 32 bit und die Übertragung geht über ein 32-bit 
breites SPI-Register mit nem PIC.
Beschleunigungssensoren haben meistens 16-bit. Deshalb gibt es bei dem 
PIC den 16-bit Modus. Also ich würde nicht sagen, des SPI in der Regel 
8-bit macht :)

von rene p (Gast)


Lesenswert?

ggggggGast schrieb:
> Wie jetzt? Da SSI immer slave ist bist du (SPI) immer master.

wie jetzt ? :)
SSI ist nicht immer Slave ? Hä?
Hier liegt wohl ein Missverständnis vor. Nochmal:
Ich hab ein SSI-Interface am µC. Damit möchte ich verschiedene Sensoren 
einlesen, die alle SPI haben. Und zwar mehr als drei.

Mein Master sollte ja wohl auch mein µC sein. Sonst wird des glaub ich 
weng chaotisch.

von Sunny (Gast)


Lesenswert?

Hallo,

die typische Verwirrung über Master und Slave. Definieren wir einfach 
mal als Master, welcher den Takt ausgibt. Der Slave empfängt den Takt 
und schickt die Daten synchron raus. Aus diesem Bild ergibt sich quasi 
automatisch, das der µC der Master ist und die Sensoren die Slaves.
Die Diskussion über 8Bit oder 32Bit SPI ist unnötig, da mehrere 8Bit SPI 
Transfers ja wieder ein entsprechendes Vielfaches an Bits ergibt. Viele 
SPI Komponenten können darüber hinaus überzählige Takte "übersehen". 
Wichtig ist das Chip Select. Nochmal die Frage, wie erzeugst Du Dein 
Chip Select ( oder Slave Select ) für die Sensoren ?

von ggggggGast (Gast)


Lesenswert?

rene p schrieb:
> SSI ist nicht immer Slave ? Hä?
> Hier liegt wohl ein Missverständnis vor. Nochmal:
> Ich hab ein SSI-Interface am µC. Damit möchte ich verschiedene Sensoren
> einlesen, die alle SPI haben. Und zwar mehr als drei.

Dann ist das ein anders SSI. Das aufgeführte ist eine 
Automatisierungsschnittstelle für Drehgeber. Dein SSI wird ein 
universelles serielles Interface sein (z.b. USART bei PIC) und hat mit 
dem Industrie SSI nichts zu tun.

von rene p (Gast)


Lesenswert?

Sunny schrieb:
> Aus diesem Bild ergibt sich quasi
> automatisch, das der µC der Master ist und die Sensoren die Slaves

Genau.

Sunny schrieb:
> Nochmal die Frage, wie erzeugst Du Dein
> Chip Select ( oder Slave Select ) für die Sensoren ?

naja ich hätte halt gedacht, dass ich einfach pro Sensor jeweils einen 
der verfübaren GPIOs als Chip Select verwende. Naja und dann eben einen 
sternförmigen Aufbau (also alle SDOs von den Sensoren auf den SDI vom 
Master). Das sollte ja eigentlich kein Problem sein :]

Was bringt eigentlich dieser kaskadierte Aufbau, bei dem jeweils der SDO 
von einem Slave mit dem SDI von einem weiteren Slave verbunden wird?
Somit würden ja Messdaten erstmal in den SDI vom nächsten Sensor 
wandern.
Und der würde doch dann die Daten als Konfigurationseinstellungen 
ansehen...
..aso, das ist nur für Speicherbausteine sinnvoll, um höhere Wortbreiten 
zu erzielen? Hm, auch dann kapier ich nicht, was da los is, aber is ja 
auch worscht :]


ggggggGast schrieb:
> Dann ist das ein anders SSI. Das aufgeführte ist eine
> Automatisierungsschnittstelle für Drehgeber. Dein SSI wird ein
> universelles serielles Interface sein (z.b. USART bei PIC) und hat mit
> dem Industrie SSI nichts zu tun.

Kann gut sein.

von Hubert R. (Firma: MR Electronics Ltd) (huratz)


Lesenswert?

Hallo,

ich habe gerade das gleiche Problem. Du kannst nur eine Encoder an einer 
SPI Schnittstelle anschließen. Doch mit einem Multipexer am MISO kannst 
du auch dieses Problem losen.
Lies dir den AN
http://www.posital.sg/sg/products/POSITAL/AbsoluteEncoders_Context/AbsoluteEncoders_Context_Technology_SSI_AppNote.pdf
durch. Dort ist auch der Sourcecode für einen SPI mit ATmega.
Hat mir auch geholfen!

von rene p (Gast)


Lesenswert?

Hubert Reiter schrieb:
> Du kannst nur eine Encoder an einer
> SPI Schnittstelle anschließen.

Versteh ich nicht - ich will keinen Encoder sondern ICs mit digitalen 
Ausgängen anschließen (Druck, Beschleunigung, ADCs).
Über logische Leitungen zu den einzelnen Devices kann man über Chip 
Select oder Slave Select (wie auch immer man es nenne mag) bestimmen, 
von wo gerade die Daten gelesen werden sollen (bzw. wohin 
Konfigurationseinstellungen gesendet werden sollen).
Man benötigt somit für jedes Device noch einen GPIO vom µC. Sollte doch 
echt kein Problem sein :]

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.