Maßnahmen gegen Kaperung meiner Bluetooth-Box
Es kann der Frömmste nicht in Frieden leben,
wenn es dem bösen Nachbar nicht gefällt.
(Friedrich Schiller, Willhelm Tell)
Vorne weg: Ich habe nette Nachbarn. Es geht in diesem Fall nur um eine Bluetooth-Box, die im eingeschalteten Zustand permanent im Kopplungsmodus ist (ohne Pin), aber als Computerlautsprecher verwendet werden soll. Nachdem monatelang alles gut ging, kam es dazu, dass vermutlich ein Nachbar versehentlich die Box auswählte. Dies führte im Folgenden immer mal wieder zu einer Unterbrechung der Tonwiedergabe, da Bluetooth priorisiert wird. Abgespielt wurde nichts und sicherlich hätte man das Problem auch mit menschlich lösen können, doch eine technische Lösung ist auch mit Blick in die Zukunft die sinnvollere Lösung. Mögliche Ansätze:
- Unterbindung des permanent aktiven Kopplungsmodus
- Einrichtung einer PIN
- Bypass-Modifikation, sodass auf Wunsch immer Line-IN immer abgespielt wird.
Schaltungsanalyse der Bluetoothbox
Herzstück des Bluetooth-Lautsprechers ist eine kleine Platine, die sowohl Audio-Funktion übernimmt, als auch Ladereglung und Powerbankfunktion (dafür die USB-A Buchse) der Box. Lautsprecher und Akkus sind für dieses Projekt nicht relevant.
Die Bluetooth-Funktion wird von dem Qualcomm-Chip CSR8635 übernommen. Ein erstes Googeln brachte die Erkenntnis, dass dieser Chip häufig als Modul im Bastelbereich anzutreffen ist. Programmierung, bzw. Konfiguration geschieht über eine proprietäre Software und speziellem SPI-Adapter. Anleitungen für Namensänderung und Pin-Einstellungen finden sich an mehreren Stellen. Dazu später mehr.
Für eine weitergehende Beurteilung eines geeigneten Ansatzes galt es, den Audiopfad von Line-IN zu verfolgen und den Mechanismus des Quellenwechsels zu erkunden. Für Messungen mit Multimeter und Oszilloskop musste jedoch eine kaum sichtbare Kolophonium-Schicht über vielen Lötstellen gründlich mit Platinenreiniger entfernt werden. Das Ergebnis ist im Folgenden dargestellt:
- Passive Filter hinter der Line-IN Buchse
- Analogswitch SGM4717 (Funktion unbekannt, war immer auf Line-IN geschaltet, auch im Bluetooth-Betrieb)
- AD-Wandlung im CSR8635, Ausgabe als analoges, differenzielles Signal
- Umwandlung in Single-ended Signal durch Operationsverstärker PT2308
- Audioprozessor NPCA110P – Lautstärkeregelung, möglicherweise Audioverbessserung
- Endverstärker CS8508E
Der Weg des Audiopfad durch den Bluetooth-Chip schloss eine Deaktivierung dieses, bzw. eine Bypass-Modifikation mit vertretbarem Aufwand aus.
Umprogrammierung CSR8635
Für die Programmierung des Bluetooth-Chips CSR8635 gibt es eine Vielzahl an Anleitungen, z.B. Youtube – How to Rename a CSR8645 Bluetooth Module und tinyosshop – Enable Bluetooth Audio Amplifier Pin Code. Im EEV-Blog fand ich dann einen Hinweis auf eine Programmiermöglichkeit mit handelsüblichen Serial-Wandler: Github – CSR-SPI-FTDI
Benötigt wird die Software CSR BlueSuite, die sich anscheinend früher vom Hersteller nach Registrierung herunterladen ließ. Mittlerweile ist man auf andere Quellen angewiesen, eine Diskussion dazu findet sich hier. Vereinzelte Kommentare deuten darauf hin, dass die FTDI-Lösung nicht mehr funktioniert. Zur bestmöglichen Kompatibilität habe ich mich für ein älteres 32-bit Windows in Virtueller Box entschieden (XP hatte ich noch da) und CSR BlueSuite 2.5 installiert.
Glücklicherweise waren auf der Rückseite der Platine entsprechende Pads mit MISO, MOSI, CLK, CSB beschriftet. Ein unbeschriftetes Pad stellte sich – dem Youtube-Video entsprechend – als SPI Enable heraus, dieser muss auf VDD gelegt werden. Spannung wurde den Anleitungen gemäß auf 1,8V gesetzt. Nachfolgend ist der Aufbau abgebildet – leider habe ich kein Foto mit angelöteten Drähten.
Namen setzen
Erster Schritt war der Box einen individuellen Namen zu geben, um in Zukunft Verwechselungen zu vermeiden. Der Name ist aber nur für Menschen relevant, untereinander kommunizieren die Geräte mit der Hardware-Adresse. Ist ein Gerät bereits gekoppelt, wird es lediglich umbenannt.
Eintrag in CSR-BlueSuite: Local device's "user friendly" name
Pin setzen
Zweiter Schritt war das Setzen eines Pin-Codes. Dazu muss zum einen die Authorisierung durch Pin aktiviert und zum anderen eine Pin gesetzt werden.
Für das Aktivieren der Pin muss das entsprechende Bit gesetzt werden, dieses befindet sich im Feld: Local supported features block. Eine Erklärung der Bits zeigt das Programm an. Gemäß Anleitung wurde: ffff fe8f ffdb 875b zu ffff fe8f ffdb 8757 geändert.
Die Pin selbst findet sich im Feld Fixed Pin. Die Werte sind als 16-bit Hex-Zahlen dargestellt, die Pin besteht jedoch aus ASCII-Zeichen der jeweils unteren 8 Bit. Also Pin „0000“ entspricht: „0030 0030 0030 0030“
Hardware-Adresse setzen
Leider reichte auch das Setzen der Pin nicht aus, um eine bereits gekoppelte Verbindung zu verhindern. Vermutlich wird sie nur für den ersten Verbindungsaufbau benötigt. Die Änderung der Hardwareadresse führte schließlich zum erwünschten Resultat, dass dem keine unerwünschten Kopplungen mehr stattfinden. Leider habe ich diesen Schritt nicht dokumentiert.