Verwendung einer MCU mit eingebautem CAN-Controller im Vergleich zu einem externen CAN-Controller

Ich plane, den Atmel ATSAMC21J18A Mikrocontroller in einem Automatisierungsprojekt zu verwenden, das über einen eingebauten CAN-Controller verfügt. Das CAN-Bus-Netzwerk kann 32 Geräte enthalten, die jeweils Datenpakete in 1-Sekunden-Intervallen generieren. Es wird 16 solcher CAN-Bus-Netzwerke geben, die mit einem einzigen Gateway-Knoten verbunden sind, der über eine NXP LPC1768 MCU (Cortex M3) verfügt.

  1. Welche Faktoren und Parameter sollten bei der Entscheidung, ob der eingebaute CAN-Controller oder ein externer CAN-Controller verwendet wird, berücksichtigt werden?
  2. Gibt es Vor-/Nachteile/Einschränkungen bei der Verwendung des eingebauten CAN-Controllers?
  3. Da der CAN-Gateway-Knoten den Verkehr aus allen 16 Netzwerken handhaben wird, wäre es eine gute Idee, einen externen CAN-Controller zu verwenden, um Pufferüberläufe zu vermeiden?

Beachten Sie, dass ich ohnehin plane, einen externen isolierten CAN-Transceiver zu verwenden.

Externe CAN-Controller sind veraltet, da Sie bereits MCUs mit integriertem haben. Es gab einmal keine MCUs mit CAN.

Antworten (3)

  1. Ein externer CAN-Controller ähnelt dem internen CAN-Controller, ist jedoch über einen langsameren Bus verbunden (höhere Latenz, langsamere Bitrate). Es gibt keinen Grund, einen externen zu verwenden, wenn Sie einen leistungsfähigen CAN-Controller auf dem Chip haben (SAM C21):

    • Unterstützung für CAN-FD
    • Bis zu 64 dedizierte Empfangspuffer und bis zu 32 dedizierte Sendepuffer
    • Direct Message RAM-Zugriff für die CPU
  2. Bei einigen Chips reserviert die Verwendung der CAN-Peripherie einen Teil des SRAM. Aber es gibt keinen wirklichen Nachteil bei der Verwendung einer On-Chip-Variante. Nur wenn Sie mehr als zwei Controller benötigen, wäre es aus Sicht des Softwaredesigns sinnvoll, viele externe Controller zu verwenden. Sie haben jedoch zusätzliche Latenz, da die Frames nicht speicherzugeordnet werden. Der direkte Speicherzugriff ist ein großer Vorteil von On-Chip-CAN mit 32-Bit-Controllern.

  3. Wenn Ihr Gateway mit 16 unabhängigen CAN-Bussen verbunden werden muss, ja. Ansonsten, wenn es nur ein Bus ist, nein. Der LPC1768 sollte viel Speicher haben. Wenn Sie sich Ihre Geschichte ansehen, erhalten Sie durchschnittlich 512 Nachrichten pro Sekunde . Was bei 100 kbit/s erreichbar ist.

Der einzige Haken dabei ist, dass Sie nicht innerhalb kurzer Zeit zwei identische IDs haben können, sonst gibt es einen Überlauf in der Messagebox. Das von Ihnen verwendete übergeordnete Protokoll sollte jedoch bereits Regeln bezüglich der Mindestzeit zwischen zwei Frames derselben ID haben.

Das einzige, worauf Sie bei einem On-Chip-Controller achten müssen, ist der Hardware-FIFO . Wenn Sie nur einen dreifach tiefen Hardware-FIFO haben, wie bei den meisten STM32-Controllern, können Sie den Puffer mit einem kurzen Burst von Frames mit zu viel Interrupt-Latenz überlaufen. Sie müssen ein zusätzliches Software-FIFO obendrauf setzen.

Wenn das Gateway mit einem PC verbunden werden soll, erfinden Sie das Rad bitte nicht neu. Holen Sie sich etwas von Kvaser oder IXXAT.

Welche Faktoren und Parameter sollten bei der Entscheidung, ob der eingebaute CAN-Controller oder ein externer CAN-Controller verwendet wird, berücksichtigt werden?

Meistens gehören diese der Vergangenheit an, da es heutzutage viele MCUs mit eingebauten Controllern gibt. Der einzige Grund, warum Sie einen externen CAN-Controller verwenden würden, ist, wenn Ihre MCU ihn nicht auf dem Chip unterstützt. Zum Beispiel, wenn Sie aus anderen Gründen eine Art spezialisierter MCU verwenden müssen.

Gibt es Vor-/Nachteile/Einschränkungen bei der Verwendung des integrierten CAN-Controllers?

Es ist dem externen Controller überlegen, da Sie einen schnelleren Registerzugriff, keine Overhead-Schnittstelle (keine Notwendigkeit für SPI, I2C usw.) und keine externen Komponenten erhalten. Günstigere Stücklisten, weniger Dinge, die kaputt gehen können, weniger EMI-Bedenken usw.

Da der CAN-Gateway-Knoten den Verkehr aus allen 16 Netzwerken verarbeiten wird, wäre es eine gute Idee, einen externen CAN-Controller zu verwenden, um Pufferüberläufe zu vermeiden?

Ich verstehe wirklich nicht, wie Sie 16 verschiedene CAN-Bus-Netzwerke mit einem Knoten verbinden können ... das klingt nach einem völlig unsinnigen Systemdesign. Sind Sie sicher, dass Sie nicht 16 CAN- Knoten in einem einzigen Netzwerk meinen? Weil es keine vernünftige Möglichkeit gibt, dieses System jemals mit nur einer einzigen Mainstream-MCU zu bauen.

Angenommen, Sie meinen 16 Knoten, sollten Sie überlegen, wie leistungsfähig der CAN-Controller ist. Es gibt im Allgemeinen zwei Arten: die einfachen, die nur einen RX-Puffer-FIFO mit einer bestimmten Anzahl von CAN-Frames haben, und die "Mailbox", die sowohl RX-FIFO als auch dedizierte Tx/Rx-Mailbox-Slots für Nachrichten mit höherer Priorität haben. Wenn Sie viele verschiedene Arten von CAN-Frames erwarten, sollten Sie einen CAN-Controller mit „Mailbox“-Funktionalität auswählen.

Ihr spezieller CAN-Controller scheint die Mailbox-Funktionalität zu haben, also sollten Sie gut sein. "Bis zu 64 dedizierte Empfangspuffer und bis zu 32 dedizierte Sendepuffer"

Könnten Sie erläutern, warum Sie es für eine schlechte Idee halten, verschiedene CAN-Bus-Netzwerke mit einem einzigen Gateway-Knoten zu verbinden? Was sind die Einschränkungen/Herausforderungen, die es unmöglich machen?
@ravihansa3000 Zunächst einmal, wie wirst du zwischen ihnen wechseln? Und warum hast du 16 verschiedene Netzwerke??? Ich kann mir nicht einmal eine Anwendung vorstellen, bei der 16 verschiedene Netzwerke vorhanden sind und deren Verbindung sinnvoll ist.
Ich kommentiere keine Vor- oder Nachteile des hier beschriebenen Systemdesigns, nur dass jedes durchschnittliche Auto, wie zum Beispiel Mercedes, Gateways hat, die mehrere Netzwerke (wie 8) handhaben und sie auf einen einzelnen Diagnose-CAN-Bus (OBDII) leiten. Es wird verwendet, um die Sicherheit, den Durchsatz usw. zu erhöhen, aber es wird auch durch die Verwendung dedizierter Gateway-Controller erleichtert.
@EmbeddedGuy Sie können mehrere Busse für Redundanzzwecke verwenden. Es gibt einen Unterschied zwischen einer einzelnen MCU, die die Eingabe von 8 verschiedenen Bussen verarbeitet, und einem "Relais" -Knoten, der nur Nachrichten von einem Bus zum anderen schaufelt, ohne eine tatsächliche Entscheidungslogik zu enthalten.

Da die von Ihnen verwendete MCU nicht über 16 CAN-Controller verfügt, müssen Sie einen der folgenden Schritte ausführen:

  1. Verwenden Sie eine MCU pro Bus und vernetzen Sie sie dann irgendwie miteinander.
  2. Verbinden Sie 16 externe CAN-Controller mit einer einzigen MCU.
  3. Verwenden Sie ein FPGA, um 16 CAN-Controller in einem Chip zu implementieren.
  4. Verwenden Sie einen Multiplexer, um Ihren CAN-Controller zwischen den 16 CAN-Transceivern umzuschalten, die an den 16 CAN-Bussen angeschlossen sind.