Datenübertragung zwischen Amiga und RaspberryPi
- Amiga mit 1Mb RAM
- RaspBerryPi
- RS-232 zu TTL Konverter
- DB9/25-Adapter
- Workbench 1.3 oder neuer
- ckermit (Linux)
- Kermit Client (Amiga)



Wenn Daten von einem PC zum Amiga übertragen werden sollen, stehen wir vor einem Problem. Nur der Amiga 600 und 1200 haben eine ❏ PCMCIA-Schnittstelle in der eine CF-Karte gesteckt werden kann. Ideal wäre die Datenübertragung mittels USB-Stick, aber USB-Controller für den Amiga sind recht kostspielig und das Gotek-Laufwerk ist nicht besonders geeignet, wenn es um größere Datenmengen geht. Da aber viele einen Raspberry Pi sein Eigen nennen, kann dieser als Schnittstelle zwischen Amiga und USB-Stick dienen. Die Daten werden über den serielle Port übertragen, mit den jeder Amiga ausgestattet ist.

Klicke auf das Bild zum Vergrößern
Diese Anleitung wurde mit einem Raspberry Pi3+ durchgeführt, sollte aber auch auf älteren Raspberry Pi Varianten funktionieren.
Bevor es los geht, noch ein paar Hinweise (Wichtig!)
- Kontrolliere ob die Verdrahtung korrekt ist. Eine falsche Verdrahtung kann den Raspberry Pi oder den Amiga beschädigen.
- Vermeide statische Ladungen durch das Berühren eines geerdeten Objektes, wie beispielsweise einen Heizkörper. Oder verwende ein antistatisches Armband.
- Verbinde oder trenne das serielle Kabel/Adapter nur wenn der Amiga und der Raspberry Pi ausgeschaltet sind.
- Verbinde niemals den Amiga mit den Raspberry Pi ohne RS-232-TTL Konverter.
- Erstelle ein Backup aller Daten bevor du mit diesen Projekt beginnst.
- Ich übernehme keine Verantwortung über Schäden die direkt oder indirekt durch diese Anleitung entstanden sind.
Vor- und Nachteile
+ Kostengünstig wenn man bereits einen Raspberry Pi besitzt
+ Die Daten werden mittels USB-Stick zwischen PC und Amiga ausgetauscht
+ Funktioniert bereits auf einem Amiga 500 mit 1Mb RAM
- Langsame Übertragungsgeschwindigkeit
- Keine grafische Oberfläche
Die serielle Schnittstelle
Der Amiga muss irgendwie mit den Raspberry Pi verbunden werden. Die serielle Verbindung ist sehr einfach aufgebaut und eignet sich gut für dieses Projekt. Und zwar wird sie über die GPIO-Pins des Raspberry Pi verbunden. Wir benötigen lediglich einen RS-232 zu TTL Konverter, z.B. diesen hier.

Klicke auf das Bild zum Vergrößern
Da der Amiga mit einer 25 poligen seriellen Schnittstelle ausgestattet ist, brauchen wir einen Adapter DB9(W) auf DB25(M), beispielsweise diesen.

Klicke auf das Bild zum Vergrößern
Haben wir diese Komponenten, verbinden wir den RS-232 zu TTL Konverter mit den Raspberry Pi nach folgenden Schema.

Klicke auf das Bild zum Vergrößern
Anschließend kann der Raspberry Pi mittels DB9/25-Adapter an den Amiga angeschlossen werden.
Raspberry Pi Software-Vorbereitungen
Für die Konfiguration wird eine Tastatur und ein Bildschirm vorausgesetzt. Nach vollendeter Installation kann beides entfernt werden. Der Raspberry arbeitet dann autonom.
Als Betriebssystem reicht die Lite-Version von Raspbian Stretch (Download: raspberrypi.org) vollkommen aus. Das Image kopieren wir auf eine MicroSD-Karte. Ein intuitives Programm mit den Images auf SD-Karten kopiert werden können, finden wir hier: etcher.io.
Achtung: Eventuell vorhandene Daten auf der SD-Karte werden überschrieben!

Die SD-Karte stecken wir anschließend in den Slot des Raspberry Pi und starten diesen. Wir loggen uns ein (Username: pi, Passwort: raspberry) und laden das Raspberry Konfigurations-Tool. Dazu geben wir in der Kommandozeile den Befehl "sudo raspi-config
" ein.

Klicke auf das Bild zum Vergrößern
Dort stellen wir als erstes die Tastaturbelegung ein, mit "Localisation Options -> Change Keyboard Layout". Folge den Anweisungen.

Klicke auf das Bild zum Vergrößern
Dann sorgen wir dafür, dass der User pi automatisch nach den Bootvorgang eingeloggt wird. Dies wir unter "Boot Options -> Desktop / CLI -> Console Login" eingestellt.

Klicke auf das Bild zum Vergrößern
Als nächstes konfigurieren wir die WLAN-Verbindung. Die entsprechenden Einstellungen finden wir unter "Network Options -> Wi-Fi". Folge den Anweisungen.
Bei einem Raspberry Pi 3 oder neuer, wird dadurch das integrierte WLAN-Modul verwendet, bei älteren Versionen wird hingegen eine Internetverbindung über Netzwerkkabel oder USB-WLAN-Stick benötigt der selbst eingerichtet werden muss.

Als letztes stellen wir sicher, dass die serielle Schnittstelle über GPIO aktiv und das ❏ Shell-Login deaktiviert ist. Denn sonst wäre die Schnittstelle belegt und wir könnten keine Daten übertragen. Unter "Interfacing Options -> Serial" wählen wir "NO"...

...und bei der nächsten Frage "YES".

Jetzt verlassen wir die raspi-config Optionen mit "Finish" und starten den Raspberry neu, mit "sudo reboot
".
Raspberry 3 GPIO Overlay
Ab den Raspberry Pi 3 und neuer, wurde das GPIO Overlay abgeändert. Somit kann der Server über die Schnittstelle /dev/ttyAMA0 keine Daten übertragen, da diese für das Bluetooth-Modul verwendet wird. Das kann aber ohne Probleme rückgängig gemacht werden, so wie es in der Raspberry Pi Dokumentation erläutert wird. Wir müssen dazu lediglich eine Datei editieren:
sudo nano /boot/config.txt
Wir fügen am Ende dieser Datei den Befehl "dtoverlay=pi3-miniuart-bt
" ein.

Die Datei wird mit der Tastenkombination STRG+O und dann mit ENTER gespeichert. Mit STRG + X wird der Editor verlassen.
Raspberry Pi Software Installation
Jetzt geht es zur eigentlichen Server-Applikation. Für die Datenübertragung über die serielle Schnittstelle, eignet sich Kermit sehr gut. Dieses Programm, das für viele Betriebssysteme verfügbar ist, hat schon einige Jahre auf den Buckel und hat sich im Laufe der Zeit zu einem sehr umfangreichen Tool entwickelt. Eine der vielen Vorteile dieses Programmes, ist die Möglichkeit einen Server laufen zu lassen der Dateien sendet und entgegennimmt. Und genau das benötigen wir. Wir aktualisieren das System und installieren Kermit:
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install ckermit

Bevor wir diesen starten, legen wir eine neue Text-Datei im Home-Verzeichnis an in der die Einstellungen des Servers festgelegt werden. Diese wird berücksichtigt wenn der Kermit-Server geladen wird.
nano ~/.kermrc
In dieser Datei schreiben wir folgende Befehle:
SET LINE /dev/ttyAMA0
SET SPEED 19200
SET CARIER-WATCH OFF
CD /mnt/usbel
SERVER

Die Geschwindigkeit wurde bewusst auf eine recht langsame Rate von 19200 eingestellt, damit die Datenübertragung auch auf schwache Amiga-Varianten funktioniert. Später können wir versuchen den Wert zu erhöhen.
Die so erzeugte Datei wird mit der Tastenkombination STRG+O und dann mit ENTER gespeichert. Mit STRG + X wird der Editor verlassen. Und nun sorgen wir dafür, dass der Server immer automatisch gestartet wird. Somit müssen wir ihn nicht jedes mal manuell laden. Dazu muss am Ende der Datei .bashrc der Befehl "kermit" eingetragen werden.
nano ~/.bashrc

Mit der Tastenkombination STRG+O und dann mit ENTER speichern wir die Datei ab. Mit STRG + X wird der Editor verlassen.
Wenn der Raspberry das nächste mal neu startet, sollte der Server automatisch geladen werden.

Klicke auf das Bild zum Vergrößern
Möchte man diesen aus irgend einen Grund beenden, z.B. um zur Terminal-Eingabe zu geladen, genügt es die Tastenkombination STRG+C zu drücken.
Der USB-Stick am Raspberry Pi
Damit die Daten vom USB-Stick gelesen werden können, muss dieser eingebunden werden. Das geschieht nicht automatisch, sondern muss manuell erledigt werden. Da es bereits eine sehr gute Anleitung auf posts.danharper.me gibt, verweise ich auf dieser.
Hinweis: Wenn wir genau nach dieser Anleitung gehen, sollte der USB-Sticks unter /mnt/usbel eingebunden werden. Dies ist auch der Grund wieso der Eintrag "CD /mnt/usbel" in der Datei ~/.kermrc zu finden ist. Denn der Server soll später die Daten des USB-Sticks zu Verfügung stellen. Wenn der USB-Stick unter einen anderen Verzeichnis gemountet wurde, muss dieses in der Datei ~/.kermrc angegeben werden.

Amiga - Konfiguration der seriellen Schnittstelle
Der Amiga kann die Daten nur entgegennehmen, wenn dessen serielle Schnittstelle korrekt konfiguriert wird. Die entsprechenden Einstellungen sind in AmigaOS unter Prefs -> Serial zu finden. Diese müssen so angepasst werden wie im folgenden Bild zu sehen ist.


Kermit auf den Amiga
Im Archiv das wir auf aminet.net finden, befindet sich eine Datei namens "Kermit". Dies ist die einzige Datei die wir auf den Amiga benötigen.
Nun kommen wir zum Henne / Ei Problem. Wir müssen nämlich einmalig die besagte Client-Software Kermit auf den Amiga transferieren. Da die Übertragung über den Raspberry noch nicht funktioniert, muss auf eine andere Möglichkeit ausgewichen werden. Wenn man im Besitz eines PC's mit Disketten-Laufwerk ist, dann dürfte CrossDOS eine Lösung sein. Siehe hier: Amiga CrossDos
Ansonsten gibt es zahlreiche weiterer Übertragungsmethoden. Einige davon sind hier aufgelistet: Amiga Tutorials
Die erste Verbindung
Am Raspberry Pi: Bevor wir den Raspberry Pi neu starten, kopieren wir ein paar beliebige Daten auf den USB Stick, damit wir eine Test-Übertragung durchführen können. Haben wir das erledigt, starten wir den Raspberry Pi mit "sudo reboot
" neu. Der Kermit-Server sollte am Ende des Boot-Vorganges selbständig starten.
Am Amiga: Der Kermit-Client wird ganz normal mit einem Doppelklick gestartet. Die Geschwindigkeit mit der die Daten übertragen werden, wird mit folgenden Befehl angegeben:
SET SPEED 19200

Wenn wir jetzt REMOTE DIR
eingeben, sollten wir den Inhalt des USB-Sticks sehen.

Hat das geklappt, dann haben wir alles richtig gemacht. Und nun übertragen wir eine Datei vom USB-Stick auf den Amiga:
GET [Dateiname]

Die Datei sollte nun übertragen werden und im selben Verzeichnis abgelegt werden in den sich Kermit befindet. Dateien können selbstverständlich auch auf den USB-Stick kopiert werden:
SEND [Dateiname]
Es folgen einige Befehle die bei der Verwaltung der Dateien bzw. Navigation hilfreich sind.
SEND - Sendet eine Datei vom Amiga auf den Raspberry Pi
GET - Kopiert eine Datei vom Raspberry Pi auf den Amiga
GET * - Alle Dateien im aktuellen Verzeichnis auf den Amiga kopieren
REMOTE CD - wechselt das Verzeichnis des Raspberry Pi. Beispiel REMOTE CD /home/pi
CD - wechselt das Amiga Kermit Arbeits-Verzeichnis
REMOTE PWD - Zeigt das Verzeichnis an von den/in das Daten kopiert werden
REMOTE DIR - Zeigt den Inhalt des Ordners des Servers an
Leider ist es nicht möglich Ordner samt Inhalt zu kopieren, zumindest habe ich keine geeignete Lösung gefunden.
Die Übertragungsgeschwindigkeit erhöhen
Die Übertragungsgeschwindigkeit variiert je nach Leistung des Amigas. Deshalb ist es immer ratsam, einige Tests mit einer geringen Baudrate durchzuführen. Allerdings scheint es nur eine begrenzte Auswahl an Baudraten zu geben die von Kermit (Amiga) unterstützt werden. Diese werden mit "SET SPEED ?
" aufgelistet. Ob eine alternative Version von serial.device diese Werte erweitert, habe ich nicht getestet.
Mit AmigaOS-Bordmittel ist nach 31250 Baud Schluss. Mit SerialPrefs kann diese Grenze erhöht werden. Die maximale Baudrate die ich mithilfe von SerialPrefs erreichen konnte, war 38400 Baud.

Wenn die Geschwindigkeit erhöht wird, muss der selbe Wert in der Datei ~/.kermrc, in den Einstellungen der seriellen Schnittstelle des Amigas und im Kermit-Client angegeben werden.
Den Raspberry Pi sicher runterfahren
Der Raspberry Pi loggt sich selbständig ein, mountet den USB-Stick und startet den Server. Wir brauchen also keine Tastatur und keinen Bildschirm. Wäre da nicht das Problem mit den Runterfahren. Denn einfach die Spannungsversorgung zu trennen, kann die Daten auf der SD-Karte gefährden. Eine eigene Tastatur für den Raspberry Pi ist aber wiederum unpraktisch. Deshalb installieren wir einen externen Taster, der das System bei Bedarf sicher runterfährt. Diesen Taste schließen wir wie im folgenden Bild zu sehen ist, an den GPIO-Pins 39 un 40 an.

Klicke auf das Bild zum Vergrößern
Dann installieren wir noch die benötigte Software, die den Taster überwacht:
sudo apt install python-gpiozero python3-gpiozero -y
cd ~
wget https://raw.githubusercontent.com/TonyLHansen/raspberry-pi-safe-off-switch/master/python/shutdown-press-simple.py

Klicke auf das Bild zum Vergrößern
Das runtergeladene Script muss nun ausführbar gemacht und bei jeden Start des Rechners geladen werden.
chmod a+x shutdown-press-simple.py
sudo nano /etc/rc.local
Über der Zeile "exit 0" geben wir nun folgendes ein:
~pi/shutdown-press-simple.py &

Die Datei wird mit der Tastenkombination STRG+O und dann mit ENTER gespeichert. Mit STRG + X wird der Editor verlassen.
Beim nächsten Neustart des Systems, wird das Script geladen. Von nun an sollte der Raspberry Pi runterfahren sobald der Taster gedrückt wird.
Troubleshooting
Bei diesen Projekt kann so einiges schief laufen. Vielleicht kann einer der folgenden Punkte dabei helfen den Fehler einzugrenzen:
Es kann keine Verbindung zwischen Amiga und Raspberry Pi aufgebaut werden:
- Ist die Verdrahtung des RS-232 zu TTL Adapters korrekt?
- Die Einstellungen der seriellen Schnittstelle am Amiga sind falsch. Siehe Bild unter "Amiga - Konfiguration der seriellen Schnittstelle".
- Die serielle Schnittstelle am Raspberry Pi wurde im Konfigurationstool raspi-config deaktiviert. Siehe "Raspberry Pi Software-Vorbereitungen".
Eine Verbindung besteht, aber es werden keine Dateien gefunden:
- Wurde der richtige Mount-Point zum USB-Sick in der Datei ~/.kermrc angegeben?
Der Kermit Server beendet sich von selbst und gibt eine Fehlermeldung aus:
- Das GPIO Overlay beim Raspberry Pi muss angepasst werden. Siehe "Raspberry 3 GPIO Overlay".
Es werden kryptische Zeichen im Kermit Client angezeigt:
- Das ist typisch für eine falsch angegebene Baudrate. In der Datei ~/.kermrc, in den Einstellungen der seriellen Schnittstelle des Amigas und im Kermit-Client muss der selbe Wert angegeben werden.
Die übertragenen Daten sind korrupt:
- Dieses Phänomen ist mir bei der Übertragung von Bild-Dateien aufgefallen. Laut Dokumentation unterscheidet Kermit automatisch zwischen Text- und Binärdateien. Dies scheint nicht ganz korrekt zu sein, denn Kermit (Amiga) erkennt diese als Text-Datei. Abhilfe schafft der Befehl SET FILE TYPE BINARY
.
Der Raspberry Pi fährt nicht runter wenn der Taster betätigt wird:
- Das Shutdown-Script liegt im falschen Ordner oder es kann mangels Berechtigung nicht ausgeführt werden. Beim Bootvorgang sollte der Fehler bzw. der Grund für die Fehlfunktion (kurz) angezeigt werden.
- GPIOZERO ist nicht vorhanden.
