Forum: Mikrocontroller und Digitale Elektronik SPI in CAN per uC


von Ähem (Gast)


Lesenswert?

Hi an alle,

kurze Verständnisfrage.
kann ich ein SPI-Signal per uC in CAN wandeln?
Also kann ich einen Bausteine über siene SPI Schnitstelle mit der SPI 
Schnittstelle des uC verbinden, Daten auslesen und diese dann per CAN 
Interface des uC ausgeben?
Ich frage, weil es mich verunsichert, da es immer Wandler sind die 
irgendwo dazwischengeschaltet sind.

Das selbe auch per I2C. gehts das?

I2C--> uC --> CAN

Klingt vielleicht doof, mag es auch sein, aber ich muss das echt mal 
wissen.

von MaWin (Gast)


Lesenswert?

Ja

von Ähem (Gast)


Lesenswert?

MaWin schrieb:
> Ja

Danke.

von Dr. Sommer (Gast)


Lesenswert?

Ähem schrieb:
> Ich frage, weil es mich verunsichert, da es immer Wandler sind die
> irgendwo dazwischengeschaltet sind.

Was für Wandler genau?

Der µC braucht auch noch einen CAN-Controller und einen CAN-Transceiver. 
Viele µC haben einen CAN-Controller integriert (dies ist zu empfehlen, 
da effizient & einfacher zu programmieren), manche sogar den 
CAN-Transceiver; meist braucht es dafür aber einen externen IC. Somit 
kann man mit einem µC alleine i.A. nicht direkt SPI auf CAN umwandeln.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ähem schrieb:
> kann ich ein SPI-Signal per uC in CAN wandeln?
Woher kommt das "SPI-Signal"?
Warum steuerst du da nicht gleich einen MCP2515 an?

> Das selbe auch per I2C. gehts das?
Du hast aber auf den beiden Bussen ein völlig anderes Protokoll. Das 
solltest du dir m.E. nochmal genauer anschauen.

: Bearbeitet durch Moderator
von Ähem (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Ähem schrieb:
>> Ich frage, weil es mich verunsichert, da es immer Wandler sind die
>> irgendwo dazwischengeschaltet sind.
>
> Was für Wandler genau?
>
> Der µC braucht auch noch einen CAN-Controller und einen CAN-Transceiver.
> Viele µC haben einen CAN-Controller integriert (dies ist zu empfehlen,
> da effizient & einfacher zu programmieren), manche sogar den
> CAN-Transceiver; meist braucht es dafür aber einen externen IC. Somit
> kann man mit einem µC alleine i.A. nicht direkt SPI auf CAN umwandeln.

Also Wenn ich das Signal per CAN-Schnittstelle des uC an die Gegenstelle 
(auch CAN) sende, sollte es gehen. Oder?

von Ähem (Gast)


Lesenswert?

Lothar M. schrieb:
> Ähem schrieb:
>> kann ich ein SPI-Signal per uC in CAN wandeln?
> Woher kommt das "SPI-Signal"?
> Warum steuerst du da nicht gleich einen MCP2515 an?
>
>> Das selbe auch per I2C. gehts das?
> Du hast aber auf den beiden Bussen ein völlig anderes Protokoll. Das
> solltest du dir m.E. nochmal genauer anschauen.

Also mit dem  MCP2515 würde ich das Signal ja dann wandeln, oder?
Den setzte ich zwischen SPI Sender und uC.

von Falk B. (falk)


Lesenswert?

Ja, das geht und ist praktisch der Normalfall, denn es gibt kaum einen 
Sensor der direkt CAN spricht bzw. keinen CAN-Controller, der direkt 
Sensoren per I2C oder SP ansprechen kann. Das macht zu 99% immer ein uC.

Sensor <-SPI-> uC <-SPI-> CAN Controller

oder

Sensor <-I2C-> uC <-SPI-> CAN Controller

Die meisten CAN-Controller werden per SPI oder Parallelschnittstelle 
angesprochen. Mit I2C kenn ich keinen.

von Dr. Sommer (Gast)


Lesenswert?

Ähem schrieb:
> Also Wenn ich das Signal per CAN-Schnittstelle des uC an die Gegenstelle
> (auch CAN) sende, sollte es gehen. Oder?

Man kann CAN-Signale per CAN-Schnittstellen senden, ja. Oder was war die 
Frage?

Ähem schrieb:
> Den setzte ich zwischen SPI Sender und uC.

Was ist das für ein "SPI Sender"? Der MCP2515 kann nicht einfach 
irgendein SPI-Signal nach CAN wandeln. Dem muss man bestimmte Befehle 
geben. Diese kommen normalerweise von einem µC; m.W. gibt es keine 
Sensoren die das direkt ausgeben.

CAN ist ein Nachrichtenorientiertes Halb-Duplex-Protokoll, dessen 
Nachrichten Adressen und je 0-8 Datenbytes haben. SPI überträgt einfach 
nur Bits Voll/Halb-Duplex. Das kann man nicht einfach so 
zusammenstecken, da braucht es etwas Intelligenz für, eben in Form eines 
µC.

Falk B. schrieb:
> Die meisten CAN-Controller werden per SPI oder Parallelschnittstelle
> angesprochen. Mit I2C kenn ich keinen.

Die CAN-Controller, die im µC sitzen, über den internen Prozessor-Bus.

von Ähem (Gast)


Lesenswert?

> CAN ist ein Nachrichtenorientiertes Halb-Duplex-Protokoll, dessen
> Nachrichten Adressen und je 0-8 Datenbytes haben. SPI überträgt einfach
> nur Bits Voll/Halb-Duplex. Das kann man nicht einfach so
> zusammenstecken, da braucht es etwas Intelligenz für, eben in Form eines
> µC.
>
 Falk B. schrieb:
> Die meisten CAN-Controller werden per SPI oder Parallelschnittstelle
> angesprochen. Mit I2C kenn ich keinen.
>
> Die CAN-Controller, die im µC sitzen, über den internen Prozessor-Bus.

Wenn ich einen Sensor habe der SPI als Schnittstelle hat, kann ich den 
dann auslesen mit einem uC über die SPI Adresse un´d dann die Daten per 
CAN Schnittstelle des uC weitergeben an eine weitere CAN Gegenstelle die 
auch ein CAN Interface besitzt?

von Dr. Sommer (Gast)


Lesenswert?

Ähem schrieb:
> Wenn ich einen Sensor habe der SPI als Schnittstelle hat, kann ich den
> dann auslesen mit einem uC über die SPI Adresse un´d dann die Daten per
> CAN Schnittstelle des uC weitergeben an eine weitere CAN Gegenstelle die
> auch ein CAN Interface besitzt?

Ja, das geht und ist gängig, bis darauf dass SPI keine Adressen hat.

von Falk B. (falk)


Lesenswert?

Ähem schrieb:
> Wenn ich einen Sensor habe der SPI als Schnittstelle hat, kann ich den
> dann auslesen mit einem uC über die SPI Adresse un´d dann die Daten per
> CAN Schnittstelle des uC weitergeben an eine weitere CAN Gegenstelle die
> auch ein CAN Interface besitzt?

Ja sicher!

von Timo N. (tnn85)


Lesenswert?

Ähem schrieb:
>
> Wenn ich einen Sensor habe der SPI als Schnittstelle hat, kann ich den
> dann auslesen mit einem uC über die SPI Adresse un´d dann die Daten per
> CAN Schnittstelle des uC weitergeben an eine weitere CAN Gegenstelle die
> auch ein CAN Interface besitzt?

Achtung! CAN-Controller alleine reicht nicht. Man braucht auch einen 
CAN-Transceiver für die entsprechenden Pegel und mehr.


Variante 1: µC hat integrierten CAN-Controller:

        SPI                             CAN
Sensor <---> µC <-> CAN-Transceiver-IC <---> CAN-Transceiver-IC <-> µC

Variante 2: µC ohne integrierten CAN-Controller:

        SPI      SPI                                            CAN
Sensor <---> µC <---> CAN-Controller-IC <-> CAN-Transceiver-IC <--->
                                       SPI
CAN-Transceiver-IC <-> CAN-Controller <---> µC

Zwischen CAN-Controller und CAN-Transceiver wird zwar CAN-Protokoll 
gesprochen, aber der Spannungspegel z.b entspricht nicht dem 
Physical-Layer von CAN. Es wird auch nicht differenziell übertragen.

: Bearbeitet durch User
von Ähem (Gast)


Lesenswert?

Vielen Dank euch.
Das hilft mir sehr weiter.

LG

von Harald A. (embedded)


Lesenswert?

Noch hat keiner nach dem Datendurchsatz auf dem SPI gefragt, das ist bei 
einer Schnittstellenkonvertierung immer eine wichtige Frage. Bedenke, 
dass auf dem CAN das Verhältnis Brutto-/Nettodaten etwas weniger als 50% 
beträgt. Weiterhin kann CAN (ohne FD) max. 1MBaud, was aber nur auf dem 
Labortisch ratsam ist, in der Praxis max. 500kBaud auf kurzen Strecken 
von wenigen Metern.

Weiterhin kann das Puffern der Daten aus dem SPI anspruchsvoll werden, 
besonders dann wenn man auf das Protokoll keinen Einfluss hat. 
Theoretisch kann es passieren, dass die Daten im Burst kommen, dafür 
aber nur selten. Die Datenrate passt vielleicht im Durchschnitt, aber 
man muss die Daten aus dem Paket irgendwo bunkern und jederzeit 
empfangsbereit sein.

Wenn es sich aber tatsächlich nur um „normale“ Sensordaten handelt 
sollte das alles kein Problem sein.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Ähem schrieb:
> kann ich ein SPI-Signal per uC in CAN wandeln?

Du brauchst einen Protokollwandler. D.h. der MC muß wissen, wie er das 
IC am SPI anzusprechen hat und welches Protokoll Du auf dem CAN benutzen 
willst.
Typisch hat man dazu auf dem MC einen kleinen Kommandointerpreter, der 
dann Steuerbefehle (z.B. Konfiguration des SPI) und Datenpakete 
voneinander trennt.

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.