CAN-Buffer - wieso so viele?

Gast #4270161
Lesenswert?
• ▲
▼
Hallo,
ich habe jetzt eine CAN-Kommunikation mit 5 Teilnehmer aufgebaut. Dies 
funktioniert auch schon. Also ich kann Daten an bestimmten Teilnehmern 
senden. Was ich aber nicht verstanden habe, sind die Anzahl der Buffer.
Jetzt hat mein Controller 2 Sendebuffer und 3 Empfangsbuffer. Wozu sind 
diese da? eigentlich benötige ich doch nur einen oder? Weil beim Senden 
wird doch eh immer der erste Buffer rausgesendet. Wozu sind die anderen 
gut?

Karsten
#4270170
Lesenswert?
• ▲
▼
Weil die Leute, die CAN machen irgendwie glauben, das Ding macht 
magische Dinge. Deshalb glauben die auch, dass man nur ein 
Datentelegramm senden muss, und es kommt dann garantiert an.

Da CAN aber auch nur mit Wasser kocht (sogar eher nur mit lauwarmen) 
gibt es Dinge wie Kollisionen oder Übertragungsfehler. Die fängt zwar 
der Controller bis zu einem gewissen Grade ab, es kann aber trotzdem 
sein, dass es relativ lange dauert, bis der Controller sein 
Datentelegramm abschicken kann und er eine positive Bestätigung bekommt. 
So lange muss das gespeichert werden. Und da sind halt Sendebuffer sehr 
angenehm, weil Du dann schon mal 2 Telegramme rein schreiben kannst, bis 
Du warten musst.

Dazu kommt noch, dass CAN halt im Automotive-Bereich eingesetzt wird, 
und da verstehen die Leute häufig nicht was sie machen, was dazu führt, 
dass das Betriebssystem durch Fehlbenutzung schon mal 90% der Zeit mit 
Taskswitches verbringt. Da ist es gut, wenn die Hardware mal etwas 
zwischenspeichern kann, und die Buffer nicht gleich voll laufen.
Gast #4270210
Lesenswert?
• ▲
▼
Christian B. schrieb:
> Dazu kommt noch, dass CAN halt im Automotive-Bereich eingesetzt wird,
> und da verstehen die Leute häufig nicht was sie machen, was dazu führt,
> dass das Betriebssystem durch Fehlbenutzung schon mal 90% der Zeit mit
> Taskswitches verbringt. Da ist es gut, wenn die Hardware mal etwas
> zwischenspeichern kann, und die Buffer nicht gleich voll laufen.

Kannst du dazu eine Quelle nennen? Würde mich sehr interessieren.

Vielen Dank und Gruß
Gast #4281519
Lesenswert?
• ▲
▼
Im Automitive-Bereich gibt es sogar viel mehr Buffer so ca. 60 - 64. Man 
konfiguriert hier oft für Rx-Messages einen Buffer pro Message. Damit 
versucht man zu vermeiden, dass der Controller Messages verliert, falls 
er gerade mit irgendwas anderem beschäftigt ist. Die Buffer sind ja 
Hardware mit ner ID-Maske davor und werden ohne die Beteiligung der CPU 
durch die CAN-Zelle im Controller erstmal automatisch mit der aktuellen 
Message vom Bus befüllt. Anschließend kann die CPU sich diese Message 
auch etwas zeitversetzt abholen.
Gast #4281609
Lesenswert?
• ▲
▼
R.B. schrieb:
> Anschließend kann die CPU sich diese Message
> auch etwas zeitversetzt abholen.
Könnte man nicht einfach dem Empfangs-Interrupt eine hohe Priorität 
verpassen, sodass er den Prozessor bei seinen Tätigkeiten unterbricht 
und die Nachricht in einen (fast beliebig großen) RAM-Puffer kopieren 
kann? Von da kann der "Hauptprozess" die Nachrichten dann abholen wenn 
er Zeit hat.
Gast #4290129
Lesenswert?
• ▲
▼
Programmierer schrieb:
> Könnte man nicht einfach dem Empfangs-Interrupt eine hohe Priorität
> verpassen, sodass er den Prozessor bei seinen Tätigkeiten unterbricht
> und die Nachricht in einen (fast beliebig großen) RAM-Puffer kopieren
> kann? Von da kann der "Hauptprozess" die Nachrichten dann abholen wenn
> er Zeit hat.

Welche MCU man wählt mit wievielen Buffer ist je nach Usecase bzw. 
Steuergerät unterschiedlich. Habe ich ein Motorsteuergerät oder ein 
Bremssteuergerät - dann will ich auf keinen Fall vom CAN in meinem 
Hauptprozess / Hauptfunktion (z.B. Bremsvorgang) gestört werden. Hier 
verpasse ich lieber eine der Botschaften, die mir irgendeine aktuelle 
Statusinformation mitteilt oder irgendwelche Sensorwerte von der 
langsamen Sorte (z.B. Temperatur) übermittelt.

Bei einem reinen Gateway (gibt es im Auto selten) - wo der Schwerpunkt 
tatsächlich auf der Kommunikation liegt - verwendet man eher weniger 
Buffer.

Ich kann einige Beispiele nennen von den Steuergeräten - die ich 
mitentwickelt habe:

Klimaanlage 16 Buffer
Scheinwerfer 64 Buffer
Kamerasystem 16 Buffer
Anhängersteuergerät 5 Buffer
BCM (Body Control Module) mit Gateway 16 Buffer pro CAN, 1 Buffer pro 
Lin

Die Entscheidung für einen Controller ist sehr stark davon beeinflusst - 
welcher Hersteller im Unternehmen bereits eingesetzt wird wegen Tools 
und bereits vorhandener Erfahrung. Man versucht dann auch möglichst bei 
einem Hersteller zu bleiben um die ganzen Treiber nicht neu schreiben zu 
müssen.
Ein Wechsel wird meistens nur aus Kostengründen vollzogen.

Die Entscheidung welche Buffer man wie konfiguriert und wieviele für Rx 
und Tx verwendet werden wird nicht einfach so "from scratch" getroffen, 
sondern aus der Sicht der Applikation festgelegt und während der 
Entwicklung optimiert.

Es gibt controller, bei denen ich einen Buffer als Full-Can oder als 
Basic-Can konfigurieren kann (Die Terminologie ist auf den hier bereits 
erwähnten PPC bezogen). Full-CAN empfängt genau eine einzige Botschaft 
und Basic emfängt mehrere - sozusagen gemultiplexed. Hierbei habe ich 
die Freiheit alles so zu konfigurieren - wie ich es gerne mag. Hier ist 
auch die Konfiguration von 5 Buffer mit nem Interrupt möglich.
Gast #4290139
Lesenswert?
• ▲
▼
H.Joachim S. schrieb:
> Hm, von welchen Prozessoren redest du da? Hauptsächlich begegnen mir
> immer wieder C167 und XC167.

Aber in Serie immer weniger, oder?

Am meisten verbreitet sind wirklich die PPC von Freescale. Zunehmend 
sehe ich aber auch Arm-Basierte MCUs im Automotive. Seitdem Hersteller, 
wie Freescale und Fujitsu den Arm anbieten sowieso.

Von Infineon selbst wird sehr gerne der Tricore genommen, ist aber nicht 
so stark verbreitet wie MPC.

Generell verwendet man selbst für kleine Steuergeräte zunehmend gerne 
32-Bit Controller. Freescale hat hier sehr kleine Power-PCs zu sehr 
günstigen Preisen auf dem Markt. Die ganzen Arms von NXP STM usw. gibt 
es ja auch in sehr kleinen Packages.

Von Infineon werden aber auch sehr gerne Stromaufbereitende Bausteine im 
Automotive-Bereich eingesetzt.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.