Forum: Mikrocontroller und Digitale Elektronik SPI CAN Controller mit tieferer Pufferung


von Michael S. (msb)


Lesenswert?

Wir benutzen momentan den mcp2515 an einer Linux CPU. Problematisch ist, 
dass der Baustein nur 2 Empfangspuffer hat, was bei hoher Baudrate zu 
Überläufen führt.

Gibt es eine SPI CAN Alternative mit tieferer Pufferung? Ich habe leider 
bisher nichts gefunden :(  Ein FPGA ist mir zu aufwendig.

Kennt Ihr einen passenden Baustein?

von Ich (Gast)


Lesenswert?

Eventuell mit einem kleinen Mikro-Controller?
Sowas wie der ATMega16M1?
Der hat schonmal 6 Message-Boxen.

von Gregor B. (Gast)


Lesenswert?


von Peter D. (peda)


Lesenswert?

Ich schrieb:
> Sowas wie der ATMega16M1?

Die AVR haben leider ein Krüppel-SPI ohne Puffer. Als Slave daher nicht 
geeignet.

Der AT89C51CC03 ist da besser. Dessen SPI kann ohne Pausen 
senden/empfangen:
"When a transmission is in progress a new data can be queued and sent as 
soon as transmission has been completed. So it is possible to transmit 
bytes without latency, useful in some applications."

Und er hat 15 CAN-Puffer.

von Ich (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Die AVR haben leider ein Krüppel-SPI ohne Puffer.

Das ist nicht ganz richtig, der SPI ist in Empfangs-Richtung gepuffert, 
wenn auch nur mit einem Byte.
Also abholen während das nächste geschrieben wird geht schon.

Aber angesichts des HI-3110 ziehe ich meinen Vorschlag zurück. :-)

von Michael S. (msb)


Lesenswert?

Der HI-3110 sieht sehr gut aus.

DANKE für eure Antworten.

Muss mal schauen ob der HI-3110 ins Budget passt. Avionics hört sich 
teuer an.

von Heinz-Jürgen O. (Firma: emtas) (hjo)


Lesenswert?

Michael S. schrieb:

> Muss mal schauen ob der HI-3110 ins Budget passt. Avionics hört sich
> teuer an.

Dafür kann ein Transceiver mit ziemlich guten Daten mit im Chip sein.
Kannte ich auch noch nicht.

von Michael S. (msb)


Lesenswert?

Kostet 5.09$ als Einzelstück, ich denke das sind ca. 3$ in grösseren 
Stückzahlen.
Mit eingebauem Tranceiver, 20MHz SPI, je 8 TX und RX Puffer und auch 
sonst Top-Funktionalität. Gefällt mir!

@Gregor: Danke Dir.

Weiss jemand, ob es bereits einen Linuxtreiber gibt?

von Heinz-Jürgen O. (Firma: emtas) (hjo)


Lesenswert?

>
> Weiss jemand, ob es bereits einen Linuxtreiber gibt?

Bin mir ziemlich sicher, dass das nicht der Fall ist.
Es müsste als erstes mal eine Hardware her. Bzw. kein kleines Board mit 
dem Chip welches man z.B. an einen Raspberry klemmen kann.

von Steffen H. (avrsteffen)


Lesenswert?

Ich kenne da noch den CC770 von Bosch oder Intel. Könnte da auch noch 
einige von besorgen. Der hat 14 TX/RX Buffer, kann 15 Message Objects, 
flexible CPU Interface (8bit/16bit paralell oder SPI).

http://www.rutronik.com/uploads/media/CC770.pdf

Hab allerdings keinen Distri gefunden. Muss es aber noch geben denn wir 
bekommen immer noch bestückte LP's mit diesem Controller geliefert.

Gruß Steffen

EDIT: HAb doch noch einen Lieferanten gefunden
http://www.futureelectronics.com/en/technologies/semiconductors/comm-products/can/Pages/2032928-0272240007001.aspx?IM=0

von Michael S. (msb)


Lesenswert?

Scheint wirklich keinen Linux Treiber zu geben :(

Die Hardware samt Rasberry Pie würde ich gern spendieren, wenn jemand 
Lust hat einen Linux Treiber für den Holt SPI CAN Chip "HI-3110" zu 
schreiben.

von Heinz-Jürgen O. (Firma: emtas) (hjo)


Lesenswert?

Michael S. schrieb:
> Scheint wirklich keinen Linux Treiber zu geben :(

Für can4linux nicht.
Ich habe bei SocketCAN nachgefragt - dort auch nicht.
Es kennt dort auch keiner einen.

Sowohl SocketCAN developer-list  als auch ich, wir empfehlen SPI 
generell nicht, wegen des geringen möglichen Durchsatzes. Höchstens bis 
125 kbit/s

von Michael S. (msb)


Lesenswert?

Nachdem ich nur SPI zur Auswahl habe, muss ich mit der 
Performanceeinbusse leben. Das ist für meine Anwendung auch OK. 
Allerdings kommt mir 128 KBit/s  etwas wenig vor.

Wir haben inzwischen festgestellt, dass die Registerstruktur des HI-3110 
dem des MCP2515 sehr ähnlich ist, so dass man mit dem Linux Treiber 
nicht bei Null anfangen muss.

von Heinz-Jürgen O. (Firma: emtas) (hjo)


Lesenswert?

Michael S. schrieb:
> Nachdem ich nur SPI zur Auswahl habe, muss ich mit der
> Performanceeinbusse leben. Das ist für meine Anwendung auch OK.
> Allerdings kommt mir 128 KBit/s  etwas wenig vor.

125kbit/s ist nicht so übel. Was willst Du denn machen? Wie viele Knoten 
haben wie viele Daten auszutauschen, etc?
UND: wie leistungsfähig ist Deine CPU?

>
> Wir haben inzwischen festgestellt, dass die Registerstruktur des HI-3110
> dem des MCP2515 sehr ähnlich ist, so dass man mit dem Linux Treiber
> nicht bei Null anfangen muss.

Ich kann ja mal schauen. Würde es aber für can4linux machen.

von H.Joachim S. (crazyhorse)


Lesenswert?

Hm, 2 Empfangsbuffer des MCP2515 ist doch schon mal mehr als nur einer 
:-)
Wo genau liegt denn das Problem, die Daten zeitnah abzuholen? Hast du zu 
hohe Interrupt-Latenzzeiten? Vielleicht kann man eher da was schrauben 
als zu versuchen, sich einen Treiber selbst zu schreiben? Blockiert das 
Betriebssystem zu lange den externen Interrupt?
Ich bin mit dem MCP2515 bisher immer zurechtgekommen, auch bei hohen 
Datenraten und hoher Buslast. Betriebssystem gabs zugegebenermassen 
keines.

von Frank K. (fchk)


Lesenswert?

Eine Alternative wäre ein dsPIC33FJ128MC802. Gibt es auch in SDIP28 für 
die Lochrasterverdrahter. 40MHz, im Gegensatz zu AVR sehr viel 
leistungsfähigeres SPI, ECAN-Controller mit 8 Tx und 32 Rx Buffers und 
DMA-Controller mit 8 Kanälen, der auch SPI und ECAN bedienen kann.

Die Idee dahinter ist, dass Du keinen Linux CAN-Treiber bauen musst, 
sondern einfach per SPI Deine Frames sendest und empfängst und der dsPIC 
die puffert und rauschickt bzw empfängt.

Und dsPICs wirst Du wohl einfacher bekommen als Deinen CAN-Controller.

fchk

von Michael S. (msb)


Lesenswert?

Meine Datenraten sind eher gering (schätze mal ca. 500 
Nachrichten/Sekunde auf 250KBaud) und es gibt auch nur 4 Teilnehmer. Das 
Problem ist,  dass bis zu 4 Nachrichten  auf einmal eintreffen können 
und da macht mir die Linux Interrupt Latenzzeit einen Strich durch die 
Rechnung.

Ein langsamer SPI CAN Controller ist für mich also OK, nur muss er >=4 
Empfangspuffer haben.

Der Aufwand einen Linux Treiber für der HI-3110 zu machen scheint mir 
niedriger als einen uC anzukoppeln. Zumal der HI-3110 auch weniger 
Komponenten und Platz sowie keine extra Software braucht verglichen mit 
der uC Lösung. Das ist übrigens keine Lochrasterlösung, sondern ein 
recht komplexes Serienprodukt, dass ab 2014 in 1000er Stückzahlen gebaut 
wird.

Verfügbar ist der HI-3110 wohl problemlos.

von Heinz-Jürgen O. (Firma: emtas) (hjo)


Lesenswert?

> Wir haben inzwischen festgestellt, dass die Registerstruktur des HI-3110
> dem des MCP2515 sehr ähnlich ist, so dass man mit dem Linux Treiber
> nicht bei Null anfangen muss.


Ich teile diese Einschätzung nicht.
Nicht mal das Bit Timing ist in gleichen oder ähnlichen Registern.
Auch Interrupts sind unterschiedlich wahrscheinlich auch das generelle 
Verhalten.
Trotzdem könnte man auf Basis des mcp2515 starten.

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.