Diese Schaltung wurde im Laufe der Entwicklung meiner Info-Zentrale für die F800 nötig. Dieser kleine Bordcomputer verbindet sich über die Diagnoseschnittstelle mit der Elektronik des Motorrads und ermittelt von dort allerlei interessante Betriebsdaten wie z.B. Temperatur der Kühlflüssigkeit, Kraftstoffdruck und weiteres.
Im Falle meiner F800 besteht die Diagnoseschnittstelle im Wesentlichen aus einem K-Line Interface, einem asynchronen halb-duplex Zugang. Halb-duplex bedeutet, dass die bidirektionale Kommunikation zwischen dem Bordcomputer und dem Motorrad auf einem einzigen Kabel stattfindet - abwechselnd als Request und Response. Eine solche Art der Kommunikation ist hardwareseitig sehr günstig und für den Zweck auch völlig ausreichend, zum Debuggen bereitet sie aber einige Schwierigkeiten.
Natürlich ließe sich die Konversation auf dem Kabel recht einfach belauschen, aber dadurch dass sowohl Request als auch Response auf dem selben Kabel stattfinden, lässt es sich nicht ohne Weiteres herausfinden, ob ein abgehörtes Datenpaket nun ein Request vom Bordcomputer oder eine Response vom Motorrad ist. Im speziellen Fall der K-Line ließe sich das zwar aus dem Protokoll der Datenframes ermitteln, aber gerade in der Debug-Phase eines Systems sind Datenframes nicht unbedingt immer vollständig korrekt.
Diese Schaltung spaltet Request- und Response-Daten aus dem halb-duplex Datenstrom in zwei getrennte Leitungen und übermittelt diese an einen PC zur Aufzeichnung und Analyse.
Die Aufteilung in zwei Leitungen erfolgt über die beiden NOR-Gatter des CD4001(IC1). So altertümlich CDxxxx-Logik inzwischen auch sein mag - manchmal lohnt es sich einfach, auch die ältesten Teile noch aufzuheben. CD-Logik hat den großen Vorteil, dass sie auch die 12V eines K-Line Interfaces aushält und daher Eingangs- und Ausgangsbuffer unnötig werden.
Im Idle-Zustand wird eine K-Line über einen Pull-up-Widerstand auf 12V gehalten, Low-Bits werden aktiv nach 0V getrieben. Im Idle-Zustand liegen also beide NOR-Ausgänge zwangsläufig auf 0V, da der jeweilige K-Line-Eingang der NOR-Gatters high ist. Der andere Eingang der NOR-Gatter liegt durch die Verschaltung auf low.
Sendet nun z.B. das Testgerät ein Low-Bit auf die K-Line, wechselt das entsprechende NOR Gatter (IC1B) an seinem Ausgang auf high und leitet damit über den Transistor T1 den Low-Level an das Fahrzeug weiter. Gleichzeitig wird aber auch der "untere" Eingang des NOR-Gatters IC1A auf high gesetzt, was verhindert, dass das low-Signal in der K-Line auf Fahrzeugseite dieses NOR-Gatter schaltet - was eine unerwünschte Rückkopplung wäre. Sendet das Testgerät nun wieder ein high auf die K-Line, wird auch dieses auf die andere Seite des Splitters, also an das Fahrzeug übertragen und gleichzeitig dessen NOR-Gatter durch low-Setzen des unteren Eingangs wieder "empfangsbereit" gemacht.
Die Beschaltung aus D2/R6/C3 bzw. D1/R5/C4 ist nötig, um die high-low-Flanken etwas zu verzögern bevor sie zum NOR-Gatter gelangen. Ohne diese Verzögerung würde dieser NOR-Eingang bereits mit einem low-Signal belegt, bevor der andere Eingang auf high ist, was zu kurzen Glitches im Signal führen würde.
An den beiden Ausgängen der NOR-Gatter liegen damit die jeweiligen invertierten Bit-Ströme vom Testgerät zum Fahrzeug bzw. vom Fahrzeug zum Testgerät. Diese werden noch über die beiden Transistoren T2 und T4 auf die ursprüngliche Polarität zurück-invertiert, auf ein Spannungslevel von 5V reduziert und an Testpins sowie einen PIC-Mikrocontroller geleitet. Dieser Controller empfängt die jeweiligen Datenströme und leitet diese Byte für Byte über ein UART-Interface an den PC weiter. Das Ganze geschieht über eine 9-Bit-Übertragung, wobei das 9. Bit dem PC signalisiert, auf welcher Leitung (Request oder Response) der Controller das jeweilige Byte empfangen hat. Der PC protokolliert diese Bytes zusammen mit einem Zeitstempel für die weiterführende Analyse.
Schaltplan des K-Line Splitter/Sniffers
PIC-Code des K-Line Splitter/Sniffers
PC-Code des K-Line Splitter/Sniffers

Screenshot der PC-Software des K-Line Splitter/Sniffers. Von unten nach oben werden die empfangenen Daten-Frames angezeigt, zusammen mit Zeitstempeln in ms, die den Beginn bzw. das Ende des Frames markieren und der Angabe der Kommunikations-Richtung (Request oder Response).