Der Umgang mit einem reinen CAN BMS als "kompatible Blackbox" scheint immer klarer zu werden: Was für BMS mit RS485 funktioniert, sollte mit CAN äquivalent funktionieren. Zumindest für den Sonderfall von Linux (oder der Venus Variante von Victron Energy) bietet sich ein Umweg über das USB Protokoll an. Anstelle der LV-Hubs können für jede Master-Batterie eine exklusive CAN Schnittstelle an einen USB Hub angeschlossen werden. .Zusammenrechnen kann es ein auf Venus funktionierender Aggregator. Damit werden dann wirklich etwas größere Batterien mit 16,32,48 usw. BMS möglich. Für CAN muß man leider etwas tiefer in die jüngste Computergeschichte eintauchen um zu verstehen was man tut.
In Bad Liebenzell gab es in der Zeit von 2013 bis 2021 einmal eine Firma Geschwister Schneider Technologie Entwicklungs UG (HRB Stuttgart 745239) von Maximilian und Rebecca Schneider. Seit der Erfindung von CAN bei Bosch hat es schon immer Frickler gegeben, welche eine nicht vorhandene CAN Schnittstelle an ihrem PC benötigt hätten. Diese waren etwa von Vector Informatik damals aber noch sündhaft teuer. So sind die Geschwister Schneider auf die Idee gekommen, etwas bezahlbares für USB zu entwickeln. Damit mit den neuen USB2CAN Kabeln überhaupt irgendjemand irgend etwas anfangen kann, haben die Geschwist er Schneider dazu auch einen passenden Socket Treiber entwickelt. Dieser wurde bereits 2013 in der Linux-CAN Mailing Liste als Open Source Code gepostet.
 Im Jahr 2016 gab es nun einen gewissen Hubert Denkmaier, welcher ebenfalls das Problem einer fehlenden CAN Schnittstelle an seinem PC hatte. Er kam dazu auf die Idee, ein CAN Kabel mit dem STM32F072 zu bauen. Allerdings hatte auch er das Problem, daß es zu diesem Kabel keine passenden Treiber gegeben hat. Für USB unter Windows und Linux gab es bereits die CDC Communication Device Class. Diese Klasse war aber vorwiegend zum Betrieb von virtuellen RS232 COM Schnittstellen gedacht. Über die Unterklasse ACM-Abstract Controll Modell lassen sich mit dem seriellen slcan Treiber Dateninhalte einer CAN Schnittstelle auf seriell asynchron umbiegen. Das bringt aber Einschränkungen und Komplikationen mit sich. Deshalb hat Hubert D. dazu in der Linux-CAN Mailing Liste nach einem solchen CAN Socket Treiber angefragt. Die Antwort dazu kam von Max Schneider und man kann sie hier nachlesen. Hubert D. hat jedenfalls seinen STM32 so programmiert, daß genau dieser vorhandene Linux Treiber ohne Änderungen gepasst hat. Weiter hat Hubert D. in der Folge auch seine Hardware und Firmware als Open Source veröffentlicht. Ein gewisser Linus Torvalds  auch als Hüter des Linux Kernels bekannt, fand die Architektur dieses Projekts ebenfalls gut und hat es kurzerhand als GS_USB Socket in den Linux Kernel übernommen. 
So kommt es, daß man ein solches USB2CAN Kabel heute nicht nur in Ubuntu, sondern auch seit der Venus Version 2.90~18 einfach einstecken kann. Wie man in beiliegendem Screendump sieht, funktioniert dies dann auch sofort. Zwischenzeitlich gibt es von Hubert Denkmaiers Kabel hunderte Kopien und weiterentwickelte Forks mit neueren uC Typen. Dies können mitunter auch FD-CAN, mehrkanalige Einzelkabel oder Hardware-Zeitstempel für Bus-Debugger. Über eine gezielte Enumeration von mehreren CAN Schnittstellen hat sich für Venus  jemand mit passenden udev Regeln Gedanken gemacht. Beim Einsatz von mehreren gleichartigen CAN Interfaces werden hiermit feste Schnittstellennummern zugewiesen. Die Billigkopien in Alibaba & Co für CAN Interfaces sind unter diesem Hintergrund ziemlich unübersichtlich. Wahrscheinlich braucht man etwas Glück irgendwas brauchbares geliefert zu bekommen. 
Momentan konnte ich ganz grob die nachfolgenden Versionen für CAN Schnittstellen recherchieren:
 MCP2515 / 2518
 kommt zum Betrieb auf Raspberry über diverse CAN Aufsatzplatinen ohne USB zum Einsatz. Der MCP2515 ist ein reiner CAN Controller welcher über SPI an den Mikrokontroller angeschaltet werden muß. SPI hat im Gegensatz zu I2C von Haus aus keine Adressierung, weshalb das Konzept schlecht skalierbar ist. Bei mehreren CAN Schnittstellen müssen dafür die Chip Select der einzelnen MCP2515 zusätzlich über IO Pins angesteuert werden. Umgekehrt belegt jede CAN Schnittstelle auch eine eigene Hardware Interrrupt Leitung am Controller. Nachdem es längst uC mit einem oder mehreren eingebauten CAN Schnittstellen gibt, halte ich den Baustein zwischenzeitlich ebenso wie seinen Phillips Vorgänger SAJ 1000 und Nachfolger MCP2518 für veraltet.
 Allgemeines zu USB2CAN mit STM32 Controllern
 Der F103 ist so ziemlich der erste Cortex M3 welcher von ST überhaupt zur Markteinführung der 32 bit Cortex angeboten wurde. Er hat zwar USB und CAN an Bord, ist aufgrund einer Fehlkonstruktionen ím internen Taktgenerator für einen USB2CAN Adapter aber unbrauchbar. Die PLL im Clock Tree kann mit ihren nachfolgenden Teilern für die einzelnen USB und CAN Peripherien nicht so eingestellt werden, daß die vorgegebenen Baudraten auf beiden Schnittstellenarten gleichzeitig passen. ST hat dies aufgrund vielfacher Beschwerden einzelner Kunden im ST Forum an späteren Versionen der STM32 Serie deshalb korrigiert. 
 Ein weiteres Manko ist bei ST dann aber bei einigen kleineren STM32 Gehäusen als absichtlichen Kompromiss oder vielleicht auch nur versehentlich unterlaufen. Bei der Initialisierung der STM32 wird im Anwendungscode entschieden, welche Peripherieteile als Spezialfunktionen im uC intern auf welchen IO Pin geroutet werden. Üblicherweise können dies 2,3 oder noch mehr unterschiedliche Funktionen sein, welche für einem einzelnen uC Pin alternativ ausgewählt werden können. Einige kleinere Gehäuse der STM32F haben aber so wenig Anschlüsse, daß sich die durchaus intern gleichzeitig vorhandene CAN und USB Peripherie einen einzigen Pin nach Außen teilen muß. Ein gleichzeitiger Betrieb als USB2CAN ist damit ebenfalls nicht möglich.
 Firmware Updates für STM32 Controller
 Die auf den CAN Kabeln vorhandenen STM32 Controller müssen zwingenderweise die passende Firmware haben. Die Firmware ist dafür verantwortlich, daß das USB Device nach der Enumeration entweder vom slcan oder vom gs_usb Treiber erkannt wird. Sollte irgendein STM32 Kabel also vom gs_usb Treiber nicht erkannt werden, so muß darauf zunächst die passende Firmwere „Candlelight“ geflasht werden. Entwickler machen das nach dem Compilieren normalerweise mit einem JTAG Kabel über welches auch der Debugger läuft. Da „normale“ Anwender zumindest normalerweise weder compilieren noch debuggen, haben sie auch keinen Compiler, keinen Debugger und kein JTAG Kabel am Start. Nachdem ein USB2CAN Kabel aber zwingenderweise immer einen USB Anschluss hat, gibt es die Möglichkeit hier ohne zusätzliche Werkzeuge über die in Windows und Linux ohnehin vorhandene USB-DFU Klasse passende Device Firmware Updates zu machen. Hierzu aber ein extra Kapitel damit es nicht zu unübersichtlich wird. 
 
STM32F072 C8T6 
 oder auch STM32F042-C6 sind als Cortex M3 ist der ursprünglich auf den CAN Steckern verwendete Controller. 
Die passende Firmware dazu gibt es hier: https://github.com/candle-usb/candleLight_fw
Hardware Schaltung gibts von Hubert D: https://github.com/HubertD/candleLight
 STM32G0B1
 ist ein Low Cost Entry Level Cortex M1 Controller. Das Design stammt von der Linux Automations GmbH in Hildesheim und kann im Gegensatz zur F072 Variante auch CAN-FD. Die Flexible Datarate Variante CAN-FD wäre für höhere Anzahlen von Batterien zwar nützlich, ist momentan aber bis auf Weiteres nicht relevant. Es ist leider davon auszugehen, daß an den kompatiblen „closed source“ Protokollen sowieso nichts gedreht werden kann.
 https://github.com/linux-automation/candleLightFD/blob/main/release/candlelightfd-S01-R01/candlelightfd-S01-R01-V01/candlelightfd-S01-R01.pdf
 Auf dem STM32G0B1 läuft die Anpassung der Firmware von Marc Kleine-Budde (Pengutronix).
 STM32G431
 als Cortex M4 uC von der chinesischen Makerbase-MKS über Alibaba / Alibaba derzeit in der Version 2.0 verfügbar. Die Version 1.0 hatte noch einen STM32F072. Die V2.0 ist auf den neuen uC angepasst. Die Pro-Version ist zusätzlich optisch isoliert. Es scheint derzeit keine Firmware Quellen zu geben?