Zusammenfassung
TL;DR 10 PCBs BPi CANBus (Thickness -> 1.6mm)
Aufbau eines Servers mit CAN Interfaces zur Nutzung der Gleisbox als Zentrale

Die Kombination bietet einen preisgünstigen Einstieg in die digitale Modellbahnsteuerung. Im Gegensatz zu anderen, preiswerten Zentralen wird auch mfx unterstützt.
Den BananaPi kann man mittlerweile so günstig bekommen, das ein externes CAN-Interface preislich unterboten wird. Obendrein erhält man noch ein netzwerkfähigen Linux Einplatinen-Computer, den man z.B. als Rocrail-Server verwenden kann.
Im Gegensatz zu einem RaspberryPi mit einem über SPI angebundenen MCP2515 ist diese Lösung wesentlich einfacher nachzubauen und läuft zudem stabil - keine verlorenen oder vertauschten CAN-Frames und kein Hängen im Vergleich zum RPi.
Auch wenn versucht wird, alles so einfach wie möglich zu machen, sind etwas Löterfahrung und Linux-Grundkenntnisse für den Nachbau erforderlich.
Benötigte Komponenten
- Gleisbox (60112, 60113 oder 60116)
- BananaPi M1(für die Platine)
- SDHC-Karte (2GByte reichen)
- Netzteil Micro USB
- MCP2562 + 2x 100nF Kondensatoren und Lochrasterplatine
alternativ kann auch ISO1050 zur galvanischen Trennung benutzt werden
- USB2Seriell Wandler
- ggf. Stecker vom CdB Projekt
- Streifen Lochrasterplatine oder industriell gefertigte Platine (siehe unten)
CAN-Bus Interface
Der auf dem BananaPi verbaute SoC (Allwinner A20) hat einen eingebauten CAN-Controller. Es fehlt nur noch ein CAN-Transceiver. Als einfachstes verwendet man einen MCP2562 und verbindet CANH, CANL und GND (Masse) mit der Gleisbox Buchse. Hier der prinzipielle Aufbau, den man auch auf einer Lochrasterplatine umsetzen kann:

Alternativ kann man das Interface auch mit einem ISO1050 aufbauen. Dadurch ist der CAN-Bus galvanisch vom Rest der Schaltung getrennt.
Wer den Mini-DIN10 Stecker einsparen will, baut eine Steckverbindung nach eigener Vorstellung in die Gleisbox ein.
Ich habe eine Platine entworfen und diese fertigen lassen:
CAD Modell:

Gefertigte Platinen:

Da noch Platz auf der Aufsteck-Platine vorhanden war, wurden noch zusätzliche Interfaces untergebracht:
- CAN-BUS mit
- DIL MCP2562 oder
- SMD MCP2562 oder
- ISO1050 incl. Spannungsregler
- USB-Seriell RS232 Console
- RS232 mit RTS/CTS
- RS485
- I2C über ADUM1251 galvanisch getrennt
- S88 über Optokoppler galvanisch getrennt
- Sniffer-Eingang über Optokoppler galvanisch getrennt
- SPI für einfache LCD Display
PCB und Minimal-Bestückung
Die Platine kann von mir bezogen werden oder direkt von einem Aufragsfertiger (10 Stück für 17$ + Versand). Gewünschte Farbe auswählen (ich bevorzuge gelb) und Dicke auf 1.6mm stellen

Die Platine ist modular aufgebaut; nicht benötigte Interfaces müssen nicht bestückt werden.
Die alte Version 1.0 enthält leider einen Fehler im USB Teil. Für den normalen Betrieb ist USB aber nicht notwendig - einfach unbestückt lassen.
Hier die Bauteile-Liste der Minimal-Version (nur CAN-Bus ohne galvanische Trennung) wie oben abgebildete Platine (ohne USB):
Reichelt Bestell-Liste
Das sind:
U1 MCP2562
R1 120 Ohm
R21,R22,R23 Drahtbrücken
C1,C2 100nF
P1 2x13 Buchsenleiste (auf der Rueckseite)
P3 1x4 Buchsenleiste (auf der Rueckseite)
P4 1x6 Buchsenleiste (auf der Rueckseite)
P5 1x2 Steckerleiste + Jumper
P12 1x5 Anreihklemme 3.5mm
P21 1x3 Steckerleiste
Über P12 müssen folgende Verbindungen zur Gleisbox hergestellt werden:
CANH
CANL
GND
Zusammen mit einem BPi und einer Gleisbox ist damit das digitale Steuern der Modellbahn bereits möglich.
Alternative: mit galvanischer Trennung
Alternativ kann die Platine incl. galvanischer Trennung bestückt werden:
U12 ISO1050
R20 120 Ohm SMD 1205
C18,C19 100nF SMD 0805
P1 2x13 Buchsenleiste
P3 1x4 Buchsenleiste
P4 1x6 Buchsenleiste
P12 1x5 Anreihklemme 3.5mm
P19 1x2 Steckerleiste + Jumper
P21 1x3 Steckerleiste
# für ext. Versorgung des Transceivers (z.B. über Gleisbox)
C3,C4 100nF
U2 7805
# Anzeige der 5V Spannung
D5 3mm LED
R12 330 bis 470 Ohm (bei 2mA LED 1,5 kOhm)
# alternativ
D4 LED SMD 0805
R11 330 bis 470 Ohm SMD 0805
R21, R22 und R23 nicht bestücken !
Wenn man die notwendigen 5V nicht extern über P12 zuführt, dann besteht auf der Platine die Möglichkeit, die Spannung mit U2, C3 und C4 zu generieren (z.B. aus den 18V der Gleisbox über P12-Vcc). Ausserdem sind noch ein Widerstand und eine LED (bedrahtet R12 und D5 oder SMD R11 und D4) nahe U2 untergebracht, die eine Versorgungsspannung am CAN-Transceiver signalisiert.
Über P12 müssen folgende Verbindungen zur Gleisbox hergestellt werden:
CANH
CANL
GND
VCC
Option: Integrierter USB-Serial Wandler (ab Platinen-Version 1.1)
Ab der Platinen Version 1.1 besteht die Möglichkeit, einen USB2Serial Wandler auf der Platine aufzubauen. Gerade zum Debuggen (z.B. bei fehlender Netzwerkverbindung) ist diese Erweiterung nützlich.

U13 FT230XS
D2, D3 LED rot SMD 0805
R16, R17 27 Ohm SMD 0805
R18, R19 220 - 330 Ohm SMD 0805
C23, C24 47pF SMD 0805
C20, C25 100nF SMD 0805
C22 10nF SMD 0805
C26 4,7uF SMD 0805
F1 Ferrit Perle MI0805K601R-10
P13 USB-B Socket
Es handelt sich nur um eine Option. Es kann natürlich auch ein preiswerter USB2Serial Wandler (3V3) an P21 verwendet werden.
Hinweis
Lötbrücken lassen sich einfach mit Flußmittel und Entlötlitze entfernen. Zwischen Pin 10 und Pin 11 des FT230X ist aber auch auf dem Schaltplan eine Brücke ;-)
Option: S88 mit galvanischer Trennung
Auf der Adapter-Platine befindet sich auch eine S88(N) Schnittstelle. Dazu müssen folgende Bauteile aufgelötet werden:
U3,U4,U5,U6 6N137
R2,R3,R4 270 Ohm
R5 390 Ohm
R6 330 Ohm
R7,R8,R9 1k5 Ohm
C5,C6,C7,C8 100nF
P6 1x6 Anreihklemme 3,5 mm
Die Adapter Platine liefert nicht die 5V Versorgungsspannung für die S88-Module. Diese muss extern zugeführt werden.
Software
Es gibt mittlerweile drei Images, um den BPi zu nutzen:
- Michael Bernsteins Image
- OpenWRT Image
- Armbian Image (Linux Erfahrung notwendig - nur Basis-Image)
OpenWRT Image
Das Openwrt-Image enthält alles um starten zu können:
- Init Skript für das CAN Interface
- can2lan
- Rocrail (wird nicht automatisch gestartet)
Software Aktualisierung
Die Software wird laufend aktualisiert. Wenn das Basis-System nicht zu alt ist kann man Updates wie folgt einspielen:
opkg update
opkg list-upgradable
# Liste der Programme für die neue Versionen bereit stehen
# Beipiel can2udp updaten
opkg upgrade can2udp
Vorbereitung SDHC-Karte
Ist die SD-Karte schon mal benutzt worden, sollte die Karte einmal komplett gelöscht werden. Dazu ist der SDFormatter geeignet.
Das Image muss entpackt und dann auf die SDHC Karte gespeichert werden:
# DHCP Client (BPi bekommt eine IP-Adresse aus dem Heim-Netzwerk)
cd tmp
wget http://lnxpps.de/bpi/openwrt-sunxi-cortexa7-sun7i-a20-bananapi-ext4-sdcard.img.zip
unzip openwrt-sunxi-cortexa7-sun7i-a20-bananapi-ext4-sdcard.img.zip
sudo dd if=openwrt-sunxi-cortexa7-sun7i-a20-bananapi-ext4-sdcard.img of=/dev/sdX bs=1M status=progress # X anpassen
Unter MacOS kann dazu auch der ApplePi-Baker verwendet werden.
Windows Benutzer verwenden z.B. Win32DiskImager.
Konfiguration auf dem BPI anpassen
Die SDHC Karte sollte nur im abgeschalteten Zustand des BPis eingesteckt werden.
Das Root-Passwort lautet "knaller". Bitte ein neues Passwort über die Weboberfläche oder per 'passwd' auf der Console setzen.
HDMI wird vom Image nicht unterstützt. Der Bootloader zeigt zwar eine Grafik, aber danach bleibt der HDMI Ausgang ohne Funktion. Eine über USB angeschlossene Tastatur bleibt unberücksichtigt.
Nachdem die Karte eingesteckt und das Netzteil eingeschaltet wurde, ist das Einloggen über serielle Schnittstelle (115200 8N1 kein Handshaking) möglich:

Mit Aufsteckplatine:
GND TX RX
J12 o o o o o o
{SD slot} o o o o
Mit Aufsteckplatine:

Achtung ! Die serielle Schnittstelle des BPis verträgt nur 3V3 !
Prinzipiell kann man auch die Erst-Konfiguration über Netzwerk durchführen. Änderungen sind aber mit Bedacht vorzunehmen - man sägt am eigenen Ast :-)
Auf dem Adapterplatine liegen GND, TX und RX auf P21. TX und RX sind im Normalfall mit dem USB2Serial Wandler zu kreuzen.
Hier die Anpassung als DHCP Client - sofern nicht das Client Image genommen wurde:
# Stopp DHCP Server
/etc/init.d/odhcpd stop
/etc/init.d/odhcpd disable
/etc/init.d/dnsmasq stop
/etc/init.d/dnsmasq disable
vi /etc/config/network
# "option proto 'static'" aendern in "option proto 'dhcp'"
# "option ipaddr ..." loeschen
# "option netmask ..." loeschen
Nutzung eines externen WiFI Adapters
Das BPi-Board besitzt keinen internen WLAN Controller. Über USB kann man aber einen Standard USB-WiFi Sticks verwenden.
Die Konfiguration kann über die integrierte Web-Schnittstelle erfolgen. Dazu entweder mit dem Kabel ins bestehende Netzwerk verbinden (DHCP-Client) oder über Kabel sich mit dem BPi verbinden (DHCP-Server).
Die Webschnittstelle ist über http://<ip-adresse> erreichbar. Die IP-Adresse ist beim DHCP-Client Image vom zentralen Router vergeben worden - beim DHCP-Server Image ist das die IP-Adresse des Default-Gateways.
Nutzung
Rocrail automatisch starten (Einzustellen über serielle Console oder Putty - SSH Port 22; das root Passwort lautet knaller):
cp /root/roc* /etc/init.d/
# automatisch starten (nur einmal notwendig)
/etc/init.d/rocnetnode enable
/etc/init.d/rocrail enable
# jetzt starten
/etc/init.d/rocnetnode start
/etc/init.d/rocrail start
Erweiterungen
LinkS88 60883
Kleines Programm zur Verwendung des LinkS88 60883 : wake-up-links88
root@Modellbahn-BPi:/# wake-up-links88 -h
Usage: wake-up-links88 -i <can interface>
Version 1.21
-c <config_string> config string "B1=1,T1=10,B2=3"
-i <can int> can interface - default can0
means: B1=1 -> bus 1 length one module
T1=10 -> bus 1 cycle time 10ms
B2=3 -> bus 2 length three modules
-d daemonize
-e #no_of_links88 exit after no of LinkS88 responded - default 1
Hardware Test - einfache Variante
Falls keine Verbindung zum CAN-Bus (can state BUS-ERROR) aufgebaut wird, bitte folgende Verbindungen im stromlosen Zustand überprüfen:

Im abgeschalteten Zusand misst man ein Widerstand von 60 Ohm zwischen CAN-High und CAN-Low.
Debugging
anbei ein paar Befehle zum Debuggen:
# alle CAN Frames auf Console anzeigen
candump -tA -xe can0,0:0,#FFFFFFFF
# CAN Interfaces Statistik
ip -s -d link show can0
3: can0: mtu 16 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 10
link/can promiscuity 0
can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
bitrate 250000 sample-point 0.875
tq 250 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
sun4i_can: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp-inc 1
clock 24000000
re-started bus-errors arbit-lost error-warn error-pass bus-off
0 0 0 0 0 0
RX: bytes packets errors dropped overrun mcast
34314 4399 0 0 0 0
TX: bytes packets errors dropped carrier collsns
25259 4284 0 0 0 0
# ERROR-ACTIVE ist richtig: alles OK
zur Info - nicht nur für Profis
Aktuelle Version
Schaltplan V1.6
Gerber Daten V1.6
V1.0
- first version
V1.1
- moved R12 to avoid short
- fixed USB to serial
- add I2C pullup
- made SMD 0805 footprint handsoldering smaller
- changed LED from 1206 to 0805
- changed DIL housing a little bit by using less F.Skills lines
V1.2
- fix MiniDIN10 sockets
- optimized routing
V1.3
- optimized routing
- add I2C pin header
V1.4
- optimized routing
- add more headers
V1.5
- add jumper for PI3/PH2 select
V1.6
- add UART2 header
CON3 GPIOs

UARTS
uart0: serial@01c28000
uart1: serial@01c28400
uart2: serial@01c28800
uart3: serial@01c28c00
uart4: serial@01c29000
uart5: serial@01c29400
uart6: serial@01c29800
uart7: serial@01c29c00
Default:
ttyS0(UART0) -> Console
ttyS1(UART3)
ttyS2(UART7)
geändert auf:
ttyS0(UART0) -> Console
ttyS1(UART2) - mit RTS/CTS
ttyS2(UART3)
Erstellung des Image
Infos zur Erstellung der Images - für das Nutzen der Software nicht notwendig.
Basis ist Openwrt, ein für Router optimierte Linux Distribution. Ein Vorteil dieser Distributionen: das System kann zu jeder Zeit ausgeschaltet werden, ohne das Daten verloren gehen. Zusätzlich ist das File-System ext4 - ein sog. Jornalizing File-System.
Selbstbau Kurzanleitung
Reduced to the max
Impressum:
