Startseite Marjorie-Logo  

Roland Expansion Board Projekt Startseite
Voriges Kapitel
Nächstes Kapitel

11. Der Programmer

Zum Auslesen der Daten aus den Originalboards und zum Programmieren der Flash-Karte benötigt man einen Programmer. Diese spezielle Schaltung muß folgende Aufgaben erfüllen:

  • Bereitstellen von 21 unabhängig voneinander einstellbaren Adressleitungen
  • Bereitstellen von 8 bidirektionalen Datenleitungen
  • Bereitstellen der 4 Bank-Select-Signale
  • Bereitstellen von Output-Enable, Write-Enable und Ready-In
  • Senden und Empfangen der Daten vom und zum PC

Dafür habe ich eine Schaltung entworfen, bei der ein PIC16F73 die wesentlichen Aufgaben erledigt. Mit diesem Controller habe ich tagtäglich zu tun; bei der Programmierung konnte ich auf vorhandene Module zurückgreifen, wie z.B. RS232-Handler. Die Übertragung zum PC erfolgt über die serielle Schnittstelle. Zum Aufstecken der Boards wird der bereits erwähnte Gegenstecker Molex 52411-0401 verwendet.

 

Schaltplan

Für eine bessere Darstellung bitte auf die Abbildung klicken

Download Schaltplan Flash-Karte PDF (Vektorformat)

 

Kern der Schaltung ist der PIC16F73, welcher mit 20 MHz getaktet wird. Mit seinem Port A erzeugt er die 4 Bank-Select-Signale A...D, hier bank0...bank3 genannt. Der komplette Port B steht als bidirektionaler 8-Bit-Bus zur Verfügung und ist mit dem Stecker verbunden. Dieser Bus ist zum einen für den Datenaustausch mit dem Board zuständig, zum anderen aber auch für das Einstellen der Adressleitungen.

Dafür gibt es die 3 Busregister IC2, IC4 und IC4 vom Typ 74HC573A. Sie sind Eingangsseitig mit dem 8-Bit Bus verbunden, Ausgangsseitig werden die Adressleitungen für den Stecker bereitgestellt. Die Adressleitungen sind somit in 3 Blöcke aufgeteilt, die ich A-Low, A-Med und A-High genannt habe:

IC erzeugt Bereich
IC2 A0...A7 A-Low
IC3 A8...A15 A-Med
IC3

A16...A20
(nur 5 Ports belegt)

A-High

Die 3 Adressenregister haben unabhängige Clock-Leitungen, die mit dem Port C des Prozessors verbunden sind. Das Einstellen einer Adresse funktioniert so:

1. Anlegen von A-Low an den Datenbus
2. Clock für IC2 ausgeben
3. Anlegen von A-Med an den Datenbus
4 . Clock für IC3 ausgeben
5 . Anlegen von A-High an den Datenbus
6 . Clock für IC4 ausgeben

Anschließend können Daten von der eingestellten Adresse gelesen werden. Beim linearen Auslesen muß zwar IC2 bei jeder Adresse neu eingestellt werden, IC3 aber nur alle 256 Byte und IC4 nur alle 64 kB. Zum Schutz der Speicherkarten sind die Datenleitungen jeweils mit einem 220 Ohm Längswiderstand ausgestattet, falls es durch einen Programmfehler zu einer Kollision kommen sollte.

Die Zuordnung der Adressleitungen zu den Pins des Programmiersteckers entspricht wie bereits angesprochen den älteren Zweichip-Karten.

Port C des Prozessors stellt weiterhin die Read- und die Write-Leitung bereit, sowie den Ready-Eingang, an dem die Flash-Speicher den Abschluß einer Write-Operation melden. Schließlich sind noch RX und TX für die serielle Schnittstelle vorhanden. Diese werden über einen externen TLL/RS232 Pegelwandler mit dem PC verbunden. Verschiedene LEDs dienen als Statusanzeigen. Die Schaltung hat einen eigenen 5V-Spannungsregler, so daß sie bequem mit einem 12V-Steckernetzteil versorgt werden kann. Der Prozessor ist In-Circuit-Programmierbar.

Ich habe den Programmer auf einer 10 x 8 cm großen, einseitigen, selbstgeätzten Platine aufgebaut. Alle Bauteile stammen aus der Bastelkiste. Die folgende Abbildung zeigt die SMD-Seite mit dem Prozessor und den 3 Adressenregistern. Die 5 Lötpads oben links dienen zur In-Circuit-Programmierung des Prozessors. Rechts in der Mitte sieht man die Lötseite des 40-poligen Molex-Steckers.

Programmer Rückseite

Programmer Rückseite

Das Programm des Prozessors erledigt viele Abläufe selbsttätig, so daß der PC nur Steuerbefehle senden muß. Beim Auslesen werden z.B. immer komplette Blocks von 256 Byte mit einer einfachen Prüfsumme übertragen. Die Einstellung des Adressregisters A-Low übernimmt der Prozessor selbsttätig. Der PC teilt nur mit, ab welcher Med-Adresse ausgelesen werden soll. Ebenso übernimmt der Prozessor beim Programmieren die Abwicklung des Protokolls für die Flash-Bausteine.

Das Programm für den PC habe ich mit QBASIC geschrieben. QBASIC ist für mich noch immer die erste Wahl, um mal schnell ein einfaches Programm zu schreiben. Der Flaschenhals bei der Übertragung der Daten zum PC ist dabei die serielle Schnittstelle. QBASIC unterstützt Baudraten bis 9600 Bd. Der "OPEN COM"-Befehl akzeptiert noch 14400 Bd, allerdings eher inoffiziell, weil diese Baudrate in der Hilfe nicht mehr angegeben ist.

Von Frank Steinberg gibt es ein Tool, mit dem sich unter QBASIC beliebige Baudraten bis zu 115 kBd einstellen lassen. Das Programm ist Public Domain und kann hier heruntergeladen werden:

Download BAUDRATE.BAS (3kB)

Mit 115.000 Bd dauert das Auslesen der 8 MB auf einem Board ca. 15 Minuten. Wichtig ist dabei aber eine Fehlerabfrage im Basic-Programm. Die Routine von QBASIC für das Abholen der empfangenen Zeichen aus dem FIFO des PC's ist für diese Baudrate eigentlich nicht gedacht. Wenn ankommende Zeichen verlorengehen, wird der gerade übertragene Block einfach nochmal angefordert. Beim Senden von Daten mit 115.000 Bd gibt es keine Probleme. Am besten läuft das Programm natürlich unter reinem DOS; erstaunlicherweise funktioniert es aber auch im DOS-Fenster von Windows NT 4 sehr gut.

Das Basic-Programm hat in Verbindung mit der Programmerschaltung die folgenden Funktionen:

  • Anzeigen der Daten aus dem Expansion Board am Bildschirm
  • Auslesen aller Daten und speichern auf Festplatte. Dabei entsteht eine Binärdatei von 8 MB Größe. Wahlweise können die Daten auch als HEX-Listing gespeichert werden.
  • Programmieren der Flash-Karte mit den Daten von der Festplatte
  • Verify der Flash-Karte gegen Festplatte
  • verschiedene Testfunktionen für Programmer und Flash-Karte

Die auf diese Weise programmierte Flashkarte hat in meinem XP30 auf Anhieb funktioniert; alle Sounds konnten einwandfrei abgespielt werden.

Nächstes Kapitel

Stand: 17.1.2004 Email (Spam-Schutz) Anbieterangaben (C) Copyright B.Mock