Der wohl größte Nachteil von I2C gegenüber dem CAN Bus ist die geringere Störfestigkeit.

Später soll der Bus auch Erweiterungskarten automatisch erkennen, und merken wenn eine bestimmte Karte nicht mehr da ist. Neue Karten sollen erkannt werden und sie sollen dem Bus irgendwie mitteilen könne wie er sie zu Steuern hat bzw was sie für Daten senden. Ist sowas möglich?
Was du da beschreibst entspricht ziemlich genau dem Funktionsumfang von CANopen, einem auf CAN basierenden Protokoll.

Leider ist CANopen relativ komplex, und du müsstest das Protokoll wohl selbst programmieren, denn ich möchte mal bezweifeln daß es das schon fertig für Bascom gibt.


Bei CANopen hat jedes Gerät ein sog. Objektverzeichnis, was im wesentlichen eine Liste ist mit allen Befehlen die das Gerät versteht, und noch ein paar anderen Kleinigkeiten.

Außerdem hat jedes Gerät eine NodeID, also eine eigene Adresse (ohne CANopen ist das beim CAN-Bus ja nicht der Fall)

Und dann gibt es verschiedene festgelegte Nachrichtentypen die zwischen den Geräten ausgetauscht werden können, nur daß die nicht Nachrichten genannt werden, sondern Objekte...

Die wichtigsten Objekte sind dabei PDOs (Process Data Object) und SDOs (Service Data Object), wobei erstere hauptsächlich für kurze Befehle mit wenig Daten genutzt werden die aber möglichst schnell am Ziel ankommen müssen, und letztere dienen eher zum Transport größerer Datenmengen bei denen es nicht so schlimm ist wenn es mal länger dauert.


kurz gesagt:
alles ein bischen kompliziert, aber vom Funktionsumfang her exakt das was du suchst