Open-B5 eine Erweiterung für den R&S UPL

Wed 18 March 2026

Audio, Elektronik, Messtechnik

Übersetzungen: EN

Hier wird die Entwicklung eine Erweiterungskarte für den UPL Audio-Analyzer von R&S vorgestellt.

HINWEIS: Bei diesem Hobbyprojekt handelt es sich um einen Prototypen einer Idee und nicht um ein fertiges Produkt. Nachbau und Verwendung erfolgen auf eigenes Risiko!!!

Allgemeines

Ein Audiomessplatz UPL von R&S wurde mir zu einem günstigen Preis zum Kauf angeboten, da er aus einer Insolvenzmasse stammte.

Diese Maschine aufgrund ihrer Architektur, nämlich sehr präzise und klirrfaktorarme A/D und D/A Wandler mit extrem aufwendiger analoger Signalkonditionierung und hunderten intelligenter Designentscheidungen hochwertigsten Komponenten usw. eine hervorragende Erweiterung für den Messgerätepark eines Audio-Hobbyisten. Auch die Möglichkeit der schnellen Auswertung am Gerät, flexibler Messungskonfiguration, Scripting auf dem Gerät, digitale Audio I/Os, usw. lassen viele Messungen zu, die sonst nur mit einer ganzen Burg von verschiedenen Geräten in Kombination möglich wären.

Wäre da nicht der stolze Preis, den man bei R&S seinerzeit für solch ein Schätzchen bezahlen musste.

Auch heute noch zahlt man für ein solches Gerät gesalzene Preise, oder bekommt eine absolute Bastelbude, wenn das Gerät “durch” ist.

Glücklicherweise kam der UPL in einem dem Alter angemessenen Zustand, bis darauf dass auf dem integrierten PC-Mainboard tatsächlich vier Elektroyltkondensatoren einfach schlicht fehlten, direkt im Spannungsregler für die CPU-Corespannung! Der Apparat lief dennoch problemlos. Für ein Audiomessgerät war dessen Betriebsgeräusch, das einer defekten Schlagbohrmaschine in einem Abrisshaus glich, welches vom CPU-Lüfter herrührte, etwas unwürdig.

Beide Probleme wurden dann prompt beseitigt, in der Tat bekommt man für endliches Geld brauchbare CPU-Lüfter aus aktueller Produktion.

Nun kam, das was kommen musste: Es fehlten ganze zwei Optionen in der Maschine um diese wirklich absolut universell zu machen.

Die Option B5, der Mithörausgang um den es hier gehen soll, und die B1 der High-Precision Oscillator.

Die Gebrauchthandelsplätze spülten keine der Optionen zu Tage und die vergangenen Verkaufspreise waren horrend. Dankenswerterweise befand sich im Lieferumfang des Geräts ein Service-Manual. Damals (tm) hatte man wohl noch das Ethos, dass man wenn man schon so viel Geld ausgab, man es auch wirklich besaß und es sogar selbst zu reparieren versuchen durfte. Etwas was heute leider zu sehr der geplanten Obsoleszenz zum Opfer gefallen ist.

Wie dem auch sei: Es gab einen Schaltplan, einen Bestückungsplan, eine Bauteilliste und sogar eine Bestückungskoordinaten-Liste.

Dann mal ran ans Bauen, oder? Wenn da nicht die Mondpreise für abgekündigte Halbleiter wären, von denen es in dem Design mindestens vier Stück gab. Und so nahm es seinen Lauf…

Im Projektverlauf kam der Kontakt zu Bjirre, einem sehr aktiven Mitglied der diyaudio-Community. Ohne seine Hilfe, Orginalleiterplatten zum Kreuztesten, Logicanalyzer-Traces usw. wäre dieses Projekt wohl irgendwann wegen überbordender Frustration unvollendet aufs Abstellgleis gewandert. Hier nochmal Danke für alle Hilfe!

DAC an den Port hängen

Beim betrachten der Signalleitungen des Verbinders für die B5 Option stellte sich heraus, dass der I2S-Datenstrom auf dem Stecker im Normalbetrieb, d.H. unterer Frequenzbereich im Analyzer, ständig anliegt.

Um einen schnellen “proof of concept” zu haben, wurde kurzerhand ein günstiges Modul aus der Arduino/ESP32-Welt an den Analyzer gehängt. Die Pegelwandlung von 5V auf 3.3V wurde mittels eines primitiven Spannungsteilers realisiert und funktionierte tadellos.

Solch ein schneller Erfolg ermutigt ja, weiter zu forschen.

Ein günstiges DAC Modul mal schnell an den UPL gesteckt

Original Schaltplan abzeichnen

Zunächst wurde der original Schaltplan abgezeichnet, die Board-Outline zurecht gerückt und dann erst einmal alles auf “Original” gezeichnet und die Bauteile grob platziert.

Aber gerade der verwendete Audio D/A Wander von Crystal Audio war nur von windigen Händlern aus China im Angebot. Eine gute Chance, Geld für defekte, umgelablete Chips die irgendwas tun, oder ähnlichen Schrott auszugeben.

Auch die Audio-Lautstärkereglung machte keine haben Sachen: 12bit multiplizierende A/D-Wandler wurden hier verwendet, diese waren auch bei Analog Devices nur noch gegen viel Geld und nur von wenigen Distributoren erhältlich.

Ersatzbauteile finden

Der Audio DAC war schnell identifiziert: Ein PCM5101 von Ti hatte ja schon eine Kompatibilität mit dem System erwiesen, auch unterstützt er mindestens ein alternatives Format (das der Analyzer theoretisch wählen könnte). Vermutlich wird der DSP das Format im Betrieb nicht unnötig wechseln.

Subsitut für den Audio DAC

Die 12bit multiplizierenden DACs waren da schon schwieriger, der im Original verwendete DAC8143 von Analog Devices kostete zur Zeit der Recherche 25 Eur pro Stück. Davon waren im Original zwei Stück, je einer für links und rechts im Einsatz.

Der stattdessen verwendete LTC1590CS, welcher praktischerweise gleich zwei solche 12bit D/A-Wandler inklusive richtig verschaltetem Schieberegister enthält kostete 22 Eur, pro Stück versteht sich. Also halber Preis und weniger Verdrahtungsaufwand. Das Risiko des ungewollten Kopplung von Audiosignal wurde aufgrund der Anwendung als reines akustisches Kontrollsystem wurde akzeptiert.

Vereinfachung des Lautstärkekontrollsystems

Der Audio-Endstufen IC TDA1013B von ST war für den Lautsprecher gedacht, dieser wäre nur als grauen Quellen mit zweifelhafter Zuverlässigkeit verfügbar gewesen. Stattdessen wurde der TDA2003 gewählt, den es immerhin von 2nd-Source Herstellern heute noch neu für Centbeträge gibt.

Audioverstärker für den Lautsprecher

In der Kopfhörerendstufe fanden sich zwei AD844, Stückpreis ~20Eur. Auch hier wurde etwas an den Kosten gearbeitet und ein TL082 eingeplant. Ja, auf Kosten von Ausgangsimpedanz/Leistung. Da der Chip gesockelt wurde, ist ein Upgrade von der Holzklasse immer möglich.

Verstärker für Kopfhöhrer

Der Kondensator C42 war ein Nachtrag, da der kapazitive Belag des Ausgangsfilters den OPV zum Schwingen gebracht hatte. Damit wurde die Verstärkerschleife stabilisiert.

Schieberegisterkette auf Steckbrettern

Bevor man sich auf solch einen Weg begibt, sollte man verstehen wie die Maschine drumherum tickt. Zumindest war das der Plan, als ein Steckbrett mit 74HC165 und 74HC166 und vielen bunten, farbcodiert gewählten, Leitungen zum ersten Testmuster für den neu gegliederten SPI Bus wurde.

SPI-Kette im Test

Aufbau der SPI-Kette

Um eine Übersicht der Bauteile und deren Funktion im System zu erhalten, wurde eine Übersicht der Register innerhalb der B5-Erweiterung erstellt.

Register der Karte

Interessant ist, dass die beiden multiplizierenden DACs zusammen wieder an eine “normale” 8-bit Wortgrenze kommen. So wird die SPI-Kette halbwegs mit der 8-bit Organisatation kompatibel, nur das aufbauen des Steuerworts für die Lautstärke ist dann entsprechend etwas komplexer, da man die zwei Lautstärkewerte auf drei Byte aufteilen muss.

Schaltplan und Layout fertigstellen

Erste Muster

Bis zu diesem Punkt lief das Ganze schon ein/zwei Monate und im Rahmen der Möglichkeiten schnell.

Die vierlagige Leiterplatte kam im Fünferpack an, inklusive Siebdruckschablone. Die Bestückung war, bis auf einen falsch herum montierten IC problemlos, hier war einfach nur der Chip 180 Grad gedreht auf die Pads platziert worden. Das bleifreie Lot machte das Überarbeiten einen Krampf, dank Bleilot konnte dieser einfache Fehler schnell behoben werden.

Inbetriebnahme - Teil 1: Testen mit PiPico

Eine selbstgebaute Leiterplatte, auch wenn der Eingangszweig und die Stromaufnahme noch so oft geprüft waren, einfach so an ein Gerät im Wert eines gebrauchten Fahrzeugs anzuschließen war keine Option. Zunächst wurde mithilfe eines Raspberry PI Pico und ein paar 74HCT14 als Pegelwandler eine kleine Testhardware auf einem Steckbrett aufgebaut.

Erste Tests am Pico

Micropython ermöglichte eine komfortable Inbetriebnahme, man hat eine mächtige Kommandozeile direkt in die Hardware. Kein Compiler, Toolchain-Ärger, wilde Pointer und Register-Urwald. Nichts für Produktionshardware, aber zur Inbetriebnahme ein perfektes interaktives Debugging-Tool.

Inbetriebnahme - Teil 2: Am UPL geht nix!

Leider war der UPL von seiner neuen Erweiterung nicht soo begeistert. Die Erweiterung wurde nicht erkannt. Dieses Troubleshooting war dann der Zeitfresser des Projekts.

Insgesamt wurden fünf Monte lang diverse Abende und sonstige beruflich arbeitsfreie Stunden investiert um die Ursache zu finden.

Rabbithole 1: SPI-Bus

Zunächst wurde die SPI-Kette und die Antworten mit einem Logic Analyzer angesehen.

Die Erkennung der Erweiterung durch den UPL erfolgt anscheinend über den IC U3, indem erst einmal die Strobe in Form von Pin 1 (/PL = Inverted Parallel Load) gesetzt und dann per Clock-Pulsen herausgeschoben wird.

Wichtig zu wissen ist, dass /PL während des Low-Pegels permanent die an den Eingängen anliegende Werte in das Register übernimmt. Dies wird gleich noch einmal wichtig.

SH/LD CLK CLK INH Function
L X X Parallel load
H H X No change
H X H No change
H L Shift
H L Shift

Das Signal /LD gelangt als das Signal B5RD vom UPL auf die Karte und wird dann über das XOR-Glied U5B auf die Leiterplatte gebracht und dann als READ weitergereicht an U3.

Board-ID Logik

Der Vergleich der Signale aus den Schieberegistern zeigte, dass die Original-Erweiterung beim ersten Takt-Burst bereits eine gültige, wenn auch andere ID herausschob. Die Selbstentwickelte Version gab diesen ersten gelesenen ID-Wert um genau ein Bit verschoben aus. Allerdings wurde dann nach dem ersten Shift nun noch ein B5RD Signal vom UPL gesendet. Dieser zweite Datensatz war dann aber gleich der auf dem Board angelegten ID.

Eingangszweig des `READ`-Signals

Ein Ändern des Idle-Pegels mittels eines Pull-Ups R18 brachte dann den Strobe auf auf einen null-Pegel. Damit wurde die Board-ID zwar korrekt ausgegeben, allerdings war ergab sich in der Funktion, oder auch deren Fehlen, keine Änderung.

Des Weiteren fiel auf, dass die steigenden Flanken von READ und CLK quasi zeitgleich kamen, sodass das Verhalten der HC165-Schieberegister laut Datenblatt damit quasi undefiniert ist.

Ausgabe SPI-Kette in erster Konfiguration

Der nächste Versuch, das Signal CLK, minimal gegenüber dem READ Signal zu verzögern brachte zwar auch eine korrekte board-ID im dem ersten Burst ausgegeben. Auch das ergab immer noch keine Erkennung seitens des UPL.

Ausgabe der SPI-Kette mit verzögertem `READ`

Auch die Anpassung an die an Bjirre’s Modul ID 0xD2 wurde versucht. Hiermit kam noch immer keine der Besserung, in Form dessen dass immer noch keine Erkennung durch den UPL funktionierte.

Also wurde versucht, die UPL Software zu untersuchen, wie der UPL die Erkennung genau funktioniert.

Rabbithole 2: UPL Software

Der nun folgende Versuch, sich mit der Software auf dem UPL auseinander zu setzen. Zunächst wurde die UPL-UI.EXE in Ghidra geöffnet. Bei der Analyse des Codes fanden sich die Routinen, die den sogenannten SERPA-Chip im UPL benutzten.

Ziel war es, die Werte aus dem SPI-Bus auszulesen um herauszufinden, ob der UPL die Board-ID korrekt versteht.

Allerdings stelle sich heraus, dass Ghidra massive Probleme mit der doch sehr speziellen Segmentierung unter klassischem x86-Speichermanagement hatte. Die Aufrufketten konnten leider nicht vollständig rekonstruiert werden. Damit war es nicht möglich, die eigentliche Erkennung des Moduls zu identifizieren.

Ein weiterer “Hybrider”-Versuch war, die Adressierung des SERPA-Chips im Schaltplan zu verstehen.

Reverse engineering der SERPA-Adressierung

Mit all diesen Informationen konnte zumindest ein grober Plan erstellt werden, wie man auf den SPI zugreifen könnte.

Darauf hin wurde ein kleine Programm in QBASIC geschrieben, dass den SERPA-Chip per i86-Port I/O anzusprechen versuchte. Leider fehlte Kontext um diese zu komplettieren bzw. diesen richtig zu initialisieren, das führte dazu, dass zwar ein Relais schaltete aber der SPI-Bus blieb still.

Fehlversuch mit QBASIC

Im Rahmen von Verzweiflung wurde sogar eine Emulation eingerichtet, um die leider zähe statische Analyse zu verbessern.

Emulation mittels QEMU

Um von Page-Mappings usw. unabhängiger zu sein. Dazu wurde bei jeder CPU-Instruktion ein kompletter Zustand des Registersatzes und der Instruktionen geschrieben. Die resultierende 2GB große Textdatei wurde mittels AWK ausgewertet. Hierbei kamen nur die Erkennungsroutinen für die gesamte UPL-Hardware entdeckt. Die Initialisierung des SERPA konnte dabei leider auch nicht gefunden werden.

Inbetriebnahme - Teil 3: Eine neue Hoffnung

Diese Erfahrungen waren alle nicht besonders ermutigend, es schien, als gäbe es irgendetwas, das den UPL darin hindern würde, die B5-Erweiterung zu erkennen. Mal wieder in einem verzweifelten Versuch, das Gerät doch noch zum Laufen zu bringen, wurden die Datenblätter der substituierten Chips mit den originalen verglichen, insbesondere in der SPI-Kette.

Hierbei fiel auf, dass die brav durch die SPI-Kette getakteten Daten genau am Ausgang des D/A-Wandlers für die Lautstärkereglung (U8) nicht mehr ankamen.

Ein Blick in dessen Datenblatt offenbarte, dass die Annahme der Polarität während des Layouts leider doch invertiert war.

Diese musste also während des ganzen Bus-Zyklus High sein, und durfte nur für den Moment der Datenübernahme in den Chip auf Low gehen. Ansonsten kamen nämlich keine Bits durch den DAC und wurden damit nicht durch die ganze SPI-Kette weitergereicht.

Kaum war der 2. Eingangspegel des XOR-Gatters U4C auf high gezogen, erkannte der UPL die Erweiterung anstandslos.

Erfolg, die Karte ist erkannt und macht auch Ton

Jetzt war nur noch UN8 ein Sorgenkind, dieser wurde, wenn eingesteckt, glühend heiß und schluckte Unmengen an Strom. Zunächst war ein Layoutfehler im Verdacht, doch ein kurzer Blick mit dem Oszilloskop zeigte, dass der Ausgang mit einigen MHz fröhlich schwang.

Das Ausgangsnetzwerk, dass R&S hier wohl sowohl aus Gründen der EMV als auch ESD-Sicherheit eingebaut hatte war doch viel zu kapazitiv für den armen Feld-Wald und Wiesen OPV. Der Original OPV von Analog Devices war als Ausgangstreiber mit viel Phasenmarge für solch heftige kapazitive Belege gedacht. Eine Bandbreitenbegrenzung bzw. Phasenkorrektur in Form eines Parallel dem Feedbackwiederstand geschalteten Kondensators brachte Stabilität und niedrige Betriebstemperaturen.

Nacharbeiten für Revision A

Diese Änderungen müssen auf Rev. A Leiterplatten gemacht werden, damit diese zuverlässig im UPL erkannt werden und funktionieren.

Pull für WREN

Das Signal WREN muss mittels R18 nach +5V gezogen werden, nicht nach GND wie zuerst gezeichnet.

+5V gibt's in der Nachbarschaft

Strobe invertieren

Dankenswerterweise besteht der digitale Eingangspuffer aus XOR-Gattern, damit wurde das Invertieren des Signals sehr erleichtert, es muss nur der Pin 9 des U4 auf high, z.B. an R16 angeschlossen werden. Schon ist das Signal invertiert, da alles XOR 1 genommen invertiert wird.

+5V gibt's auch hier in der Nachbarschaft

Verstärker stabilisieren

Um den als Kopfhöhrerverstärker betriebenen UN8 am Schwingen zu hindern, müssen parallel zu R61 und R68 jeweils 330pF eingelötet werden.

SMD-Bauteile lassen sich gut stapeln

Ausblick

Es war eine ziemliche Reise, die Erweiterungskarte in Betrieb zu bekommen. Ein Servicemanual hat geholfen, diese initial zu erstellen. Die mittlerweile unverschämt teuren Komponenten zwangen zu Substitution und diese war dann auch der Grund für eine lange Reise durch’s UPL-Land.

Die Schaltpläne sind bereits auf dem aktuellen Stand im Repository, ein neues Layout ist erstmal nicht geplant. Als nächstes muss die neue Komponente in den UPL eingebaut werden. Die mechanische Konstruktion des Geräts ist ähnlich komplex und kompromisslos wie die Elektronik. Daher steht jetzt auch die Konstruktion eines lasergeschnittenen Blechbiegeteils an. Sobald dies alles im Gerät verbaut ist, geht das UPL-Abenteuer weiter.

Quellcode

Das Ganze als Open Source Hardware unter der BSD-Lizenz verfügbar: https://codeberg.org/d2887/UPL-B5