Tutorial: Datenübertragung zwischen Amiga und RaspberryPi

Die Datenübertragung von einem PC auf einen Amiga stellt manchmal eine Herausforderung dar. Nur die Amiga-Modelle 600 und 1200 verfügen über eine PCMCIA-Schnittstelle, in die eine CompactFlash-Karte eingesetzt werden kann. Eine Datenübertragung per USB-Stick wäre zwar ideal, jedoch sind USB-Controller für den Amiga kostspielig und nicht für alle Amiga-Varianten verfügbar. Das Gotek-Laufwerk eignet sich nicht für größere Datenmengen. Da jedoch viele Nutzer über einen Raspberry Pi verfügen, kann dieser als Schnittstelle zwischen Amiga und USB-Stick fungieren. Die Datenübertragung erfolgt hierbei über die serielle Schnittstelle, die in jedem Amiga-Modell integriert ist.

Um was geht es hier?

Diese Anleitung beschreibt nicht den Einbau eines Raspberry Pi als externes Amiga-Festplattenlaufwerk oder Diskettenlaufwerk, wie beispielsweise das Gotek. Vielmehr dient der Raspberry Pi als Massenspeicher, wobei die Daten auf einem USB-Stick gespeichert werden. Der Amiga kann über die serielle Schnittstelle auf den Raspberry Pi und dessen USB-Stick zugreifen und Daten übertragen. Die Übertragungsgeschwindigkeit ist entsprechend gering und von der verwendeten Hardware abhängig. Diese Anleitung wurde mit einem Raspberry Pi 3+ erstellt, sollte jedoch auch mit anderen Raspberry Pi-Varianten funktionieren.

Bevor es losgeht, noch ein paar Hinweise (Wichtig!)
  • Überprüfe die korrekte Verdrahtung. Eine falsche Verdrahtung kann den Raspberry Pi oder den Amiga beschädigen.
  • Verbinde oder trenne das serielle Kabel nur, wenn Amiga und Raspberry Pi ausgeschaltet sind.
  • Verbinde den Amiga niemals ohne den RS-232-TTL-Konverter mit dem Raspberry Pi.
  • Achte bei Verwendung des Raspberry Pi Imager auf das ausgewählte Laufwerk, da andernfalls das falsche überschrieben werden kann.
  • Sichere vor Beginn des Projekts alle Daten, da diese bei der Verwendung des Raspberry Pi Imager auf der SD-Karte überschrieben werden.
  • Um statische Aufladung zu vermeiden, sollte ein Antistatik-Armband verwendet werden.
  • Für Schäden, die direkt oder indirekt aus dieser Anleitung entstehen, wird keine Haftung übernommen.

Die serielle Schnittstelle

Der Amiga muss mit dem Raspberry Pi verbunden werden. Die serielle Verbindung bietet sich aufgrund ihrer Einfachheit für dieses Projekt an. Die Verbindung erfolgt über die GPIO-Pins des Raspberry Pi. Es wird lediglich ein RS-232 zu TTL Konverter benötigt, beispielsweise dieser.


Da der Amiga über eine serielle Schnittstelle mit 25-poligem Stecker verfügt, ist ein Adapter vom Typ DB9 (Buchse) auf DB25 (Stecker) erforderlich.


Wenn wir alle Komponenten haben, verbinden wir den RS-232-zu-TTL-Konverter mit dem Raspberry Pi gemäß folgendem Schema.


Der Raspberry Pi kann anschließend über den DB9/25-Adapter mit dem Amiga verbunden werden. Sowohl der Amiga als auch der Raspberry Pi müssen vor dem Anschließen ausgeschaltet sein.

Raspberry Pi Software-Vorbereitungen

Für die Konfiguration werden eine Tastatur und ein Bildschirm benötigt. Nach der Installation kann beides entfernt werden. Der Raspberry Pi arbeitet anschließend autonom. Obwohl die Lite-Version des Betriebssystems ausreichend wäre, installieren wir das Paket mit grafischer Benutzeroberfläche, die bei Bedarf aktiviert oder deaktiviert werden kann. Das Image wird auf eine MicroSD-Karte kopiert. Ein intuitives Programm zum automatischen Herunterladen und Kopieren von Images auf SD-Karten ist hier verfügbar: Raspberry Pi Imager. Ein weiterer Vorteil dieses Tools besteht darin, dass einige Einstellungen bereits vor der Installation des Betriebssystems vorgenommen werden können, was Zeit bei der Einrichtung spart.

Wir starten den Raspberry Pi Imager und wählen die Version unseres Raspberry Pi aus, in diesem Fall die Version 3. Als Betriebssystem wählen wir „Raspberry Pi OS (32-bit)“. Anschließend geben wir die SD-Karte an, auf die das Betriebssystem kopiert werden soll.

Achtung! Stelle sicher, dass das korrekte Laufwerk ausgewählt ist, um ein Überschreiben des falschen Laufwerks zu vermeiden. Eventuell vorhandene Daten auf der SD-Karte werden überschrieben!


Nach einem Klick auf „Weiter“ werden wir gefragt, ob wir das Betriebssystem anpassen möchten. Dies bestätigen wir mit „Einstellungen bearbeiten“. Im darauffolgenden Fenster nehmen wir Anpassungen an den WLAN-Informationen und den Spracheinstellungen vor.


Optional: Unter dem Reiter „Dienste“ besteht die Möglichkeit, SSH zu aktivieren und ein Passwort zu vergeben. Für unser Projekt ist SSH nicht erforderlich. Es kann jedoch nützlich sein, wenn später ein Zugriff auf den Raspberry Pi über das Netzwerk gewünscht wird. Nach Eingabe aller Angaben starten wir den Kopiervorgang mit „Weiter“. Anschließend stecken wir die SD-Karte in den Steckplatz des Raspberry Pi und starten diesen. Die Installation des Betriebssystems kann einige Zeit in Anspruch nehmen. Unterbreche diesen Vorgang nicht. Nun wird die grafische Benutzeroberfläche geladen. Öffne hier das Terminalprogramm und gib folgenden Befehl ein:

sudo raspi-config

Das Passwort lautet “raspberry”.


Zunächst stellen wir sicher, dass die serielle Schnittstelle über GPIO aktiviert und das Shell-Login deaktiviert ist. Andernfalls wäre die serielle Schnittstelle belegt und eine Datenübertragung nicht möglich. Unter „Interfacing Options -> Serial Port“ wählen wir „NO“…


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


Die grafische Benutzeroberfläche wird nun deaktiviert: Die entsprechende Option befindet sich unter „Systemoptionen -> Boot/Autologin -> Autologin in Konsole“. Sollte die grafische Benutzeroberfläche benötigt werden, kann diese Option jederzeit wieder aktiviert werden.


Jetzt verlassen wir raspi-config mit "Finish" und werden aufgefordert, den Rechner neu zu starten, was wir bestätigen. Ab dem Raspberry Pi 3 wurde das GPIO Overlay geändert. Dadurch kann der Server keine Daten über die Schnittstelle /dev/ttyAMA0 übertragen, da diese für das Bluetooth-Modul verwendet wird. Dies lässt sich aber leicht beheben, wie in der Raspberry Pi Dokumentation beschrieben:

sudo nano /boot/firmware/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 anschließend mit ENTER gespeichert. Mit STRG+X wird der Editor verlassen.

Raspberry Pi Software Installation

Im Folgenden wird die Serveranwendung näher erläutert. Für die Datenübertragung über die serielle Schnittstelle ist Kermit besonders geeignet. Dieses Programm ist für zahlreiche Betriebssysteme verfügbar und hat sich über die Jahre zu einem umfassenden Werkzeug entwickelt. Ein wesentlicher Vorteil von Kermit ist die Möglichkeit, einen Server zu betreiben, der Dateien sendet und empfängt. Genau diese Funktion wird benötigt. Das System wird aktualisiert und Kermit installiert:

sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install ckermit


Vor dem Start wird im Home-Verzeichnis eine neue Textdatei generiert, in der die Serverparameter konfiguriert werden. Diese Datei wird beim Laden des Kermit-Servers berücksichtigt.

nano ~/.kermrc

In diese Datei tragen wir folgende Befehle ein:

SET LINE /dev/ttyAMA0
SET SPEED 19200
SET CARIER-WATCH OFF
CD /mnt/usbstorage
SERVER


Die Übertragungsgeschwindigkeit wurde bewusst auf einen niedrigen Wert von 19200 Baud begrenzt, um eine zuverlässige Datenübertragung auch auf weniger leistungsstarken Amiga-Varianten zu gewährleisten. Eine Erhöhung des Wertes kann zu einem späteren Zeitpunkt geprüft werden.

Die erstellte Datei wird mit der Tastenkombination STRG+O und anschließend ENTER gespeichert. Mit STRG + X wird der Editor geschlossen. Um sicherzustellen, dass der Server stets automatisch gestartet wird, muss der Befehl „kermit“ am Ende der Datei .bashrc eingetragen werden. Somit entfällt ein manueller Startvorgang.

nano ~/.bashrc


Die Datei wird durch die Tastenkombination STRG+O und anschließend ENTER gespeichert. Mit STRG + X wird der Editor geschlossen.

Der USB-Stick

Um die Daten vom USB-Stick lesen zu können, muss dieser eingebunden werden. Dieser Vorgang erfolgt nicht automatisch, sondern muss manuell durchgeführt werden. Zunächst wird überprüft, ob der USB-Stick erkannt wurde. Der Befehl „sudo blkid“ liefert darüber Auskunft. Unter „/dev/sda1“ sollte das USB-Laufwerk angezeigt werden. Die UUID notieren wir uns.


Jetzt erstellen wir ein Verzeichnis für den Inhalt des USB-Sticks und weisen es dem Benutzer ‚pi‘ zu.

sudo mkdir /mnt/usbstorage
sudo chown -R pi:pi /mnt/usbstorage

Selbstverständlich ist die Verwendung eines USB-Sticks nicht zwingend erforderlich. Alternativ kann ein Ordner auf der SD-Karte angelegt werden. In diesem Fall ist der Pfad entsprechend anzupassen. Im letzten Schritt wird die FSTAB-Datei um unser Laufwerk ergänzt. Hierbei ist sicherzustellen, dass unter XXXX-XXXX die korrekte UUID angegeben wird.

Öffne die Datei mit dem Befehl sudo nano /etc/fstab und füge folgende Zeile hinzu (alles in einer Zeile).

UUID=XXXX-XXXX /mnt/usbstorage vfat auto,users,rw,uid=1000,gid=100,umask=0002 0 0


Nach dem nächsten Neustart des Raspberry Pi sollte der Server automatisch gestartet werden und der Zugriff auf den USB-Stick unter /mnt/usbstotage/ möglich sein.


Um den Server zu beenden, beispielsweise um zur Terminal-Eingabe zu wechseln, verwende die Tastenkombination STRG+C.

Amiga - Konfiguration der seriellen Schnittstelle

Der Amiga kann die Daten nur empfangen, wenn seine serielle Schnittstelle korrekt konfiguriert ist. Die entsprechenden Einstellungen befinden sich in AmigaOS unter „Prefs -> Serial“. Diese sind wie folgt anzupassen.

Baud Rate: 19200
Read Bits: 8
Write Bits: 8
Stop Bits: 1
Parity: None
Buffer Size: 4096
Handshaking: xON/xOFF

Der Kermit-Client auf den Amiga

Im Archiv kermit188 auf aminet.net befindet sich eine Datei namens „Kermit“. Diese Datei ist die einzige, die wir auf dem Amiga benötigen, da wir die Client-Software Kermit einmalig auf den Amiga übertragen müssen. Da die Übertragung auf den Raspberry Pi noch nicht funktioniert, müssen wir auf eine alternative Methode zurückgreifen. Eventuell könnte CrossDOS eine Lösung darstellen. Weitere Informationen sind hier zu finden: Amiga CrossDos. Daneben existieren zahlreiche weitere Übertragungsmethoden. 

Die erste Verbindung

Auf dem Raspberry Pi: Bevor wir den Raspberry Pi neu starten, kopieren wir einige Daten auf den USB-Stick, um eine Testübertragung durchführen zu können. Anschließend starten wir den Raspberry Pi mit sudo reboot neu. Der Kermit-Server sollte nach dem Neustart automatisch gestartet werden.

Am Amiga: Der Kermit-Client wird durch Doppelklick gestartet. Die Übertragungsgeschwindigkeit wird mit folgendem Befehl festgelegt:

SET SPEED 19200


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


Wenn dies erfolgreich ist, war die Vorgehensweise korrekt. Im nächsten Schritt übertragen wir eine Datei vom USB-Stick auf den Amiga.

GET [Dateiname]


Die Datei sollte nun in das gleiche Verzeichnis kopiert werden, in dem sich auch Kermit befindet. Natürlich können die Dateien auch auf den USB-Stick kopiert werden.

SEND [Dateiname]

Im Folgenden finden wir einige Befehle, die uns bei der Dateiverwaltung und Navigation behilflich 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

Es ist bedauerlicherweise nicht möglich, Ordner inklusive ihres Inhalts zu kopieren. Eine geeignete Lösung konnte ich bisher nicht finden.

Die Übertragungsgeschwindigkeit erhöhen (Optional)

Die Übertragungsgeschwindigkeit variiert in Abhängigkeit von der Leistung des Amiga. Daher ist es empfehlenswert, zunächst Tests mit einer niedrigen Baudrate durchzuführen. Es ist zu beachten, dass Kermit (Amiga) nur eine begrenzte Auswahl an Baudraten unterstützt. Diese werden mit dem Befehl SET SPEED … aufgelistet. Mit den Bordmitteln von AmigaOS ist eine Baudrate von 31250 Baud die maximale Einstellung. Mit SerialPrefs kann diese Grenze erhöht werden. Die maximale Baudrate, die ich mit SerialPrefs erreichen konnte, betrug 38400 Baud.


Bei einer Erhöhung der Übertragungsgeschwindigkeit ist derselbe Wert in der Datei ~/.kermrc, in den Einstellungen der seriellen Schnittstelle des Amigas und im Kermit-Client zu konfigurieren.

Den Raspberry Pi sicher herunterfahren (Optional)

Der Raspberry Pi meldet sich selbstständig an, mountet den USB-Stick und startet den Server. Daher werden weder Tastatur noch Bildschirm benötigt. Einzig das Problem des sicheren Herunterfahrens stellt sich. Denn ein einfaches Trennen der Stromversorgung kann die Daten auf der SD-Karte beschädigen. Eine eigene Tastatur für den Raspberry Pi ist hingegen unpraktisch. Daher installieren wir einen externen Taster, der das System bei Bedarf sicher herunterfährt. Dieser Taster wird an die GPIO-Pins 39 und 40 angeschlossen, wie in der folgenden Abbildung dargestellt.


Dann laden wir noch ein Skript vom Github-Projekt raspberry-pi-safe-off-switch herunter:

cd ~
wget https://raw.githubusercontent.com/TonyLHansen/raspberry-pi-safe-off-switch/refs/heads/master/python/shutdown-press-simple.py


Das heruntergeladene Skript muss nun ausführbar gemacht und bei jedem Systemstart geladen werden.

chmod a+x shutdown-press-simple.py

Im letzten Schritt erstellen wir die Datei rc.local im Verzeichnis /etc. Alle Inhalte dieser Datei werden beim Systemstart ausgeführt. Erstelle die Datei mit dem Befehl „sudo /etc/rc-local“ und füge folgendes Skript in die Datei ein.

#!/bin/sh -e
python /home/pi/shutdown-press-simple.py &
exit 0

Auch diese Datei muss als ausführbar gekennzeichnet sein:

sudo chmod +x /etc/rc.local

Die Datei wird mit der Tastenkombination STRG+O und anschließend mit ENTER gespeichert. Der Editor wird mit CTRL + X geschlossen. Beim nächsten Systemstart wird das Skript geladen, welches nun die GPIO-Pins 39 und 40 überwacht. Ab diesem Zeitpunkt sollte sich der Raspberry Pi ausschalten, sobald der Taster betätigt wird.

Troubleshooting

Es bestehen diverse potenzielle Fehlerquellen in diesem Projekt. Folgende Punkte könnten zur Eingrenzung der Fehlerquelle beitragen:

Es kann keine Verbindung zwischen Amiga und Raspberry Pi hergestellt werden:
- Ist die Verdrahtung des RS-232-TTL-Adapters korrekt?
- Sind die Einstellungen der seriellen Schnittstelle am Amiga korrekt?
- Wurde die serielle Schnittstelle des Raspberry Pi im Konfigurationstool raspi-config aktiviert? (Siehe „Vorbereitung der Raspberry Pi Software“)

Es besteht eine Verbindung, aber es werden keine Dateien gefunden:
- Wurde in der Datei ~/.kermrc der korrekte Mount-Point für den USB-Stick angegeben?

Der Kermit-Server beendet sich selbst und gibt eine Fehlermeldung aus:
- Das GPIO-Overlay des Raspberry Pi angepasst werden. (Siehe „Raspberry 3 GPIO Overlay“)

Im Kermit-Client werden kryptische Zeichen angezeigt:
- Ist die Baudrate falsch eingestellt? In der Datei ~/.kermrc, in den Einstellungen der seriellen Schnittstelle des Amigas und im Kermit-Client muss der gleiche Wert angegeben sein.

Die übertragenen Daten sind beschädigt:
- Dieses Phänomen tritt bei der Übertragung von Bilddateien auf. Laut Dokumentation unterscheidet Kermit automatisch zwischen Text- und Binärdateien. Dies scheint nicht vollständig korrekt zu sein, da Kermit (Amiga) dies als Textdatei erkennt. Abhilfe schafft der Befehl SET FILE TYPE BINARY.

Der Raspberry Pi fährt nicht herunter, wenn der Taster gedrückt wird:
Das Shutdown-Skript befindet sich im falschen Verzeichnis oder kann aufgrund fehlender Berechtigungen nicht ausgeführt werden. Um die Funktionsfähigkeit des Skripts zu testen, kann folgender Befehl verwendet werden:

cd /home/pi
sudo ./shutdown-press-simple.py

Das Skript sollte im Hintergrund ausgeführt werden und den Rechner herunterfahren, sobald der Button gedrückt wird.