Close

Some Protocol interpretation success

A project log for Reversing the Harman&Kardon Sound System Protocol

The goal of this project is to decode, reverse, and use the serial protocol used for controlling the tape deck, amp, CD, and Tuner.

ppPP 04/01/2024 at 14:120 Comments

Currently, I work on reversing the protocol.

For that, I use the cheap Saleae Logic Analyzer clone connected to DATA and GND (COM) of the ribbon cable. Thanks to the very well written (repair) manual of this old Sound System, I could get a hint how zeros and ones are encoded, as well as the framing and timing.
Based on that, I wrote a custom Low-Level Analyzer plugin for Saleae to decode the raw values (see repo for details).
I already got a preliminary table of commands and interpretation of payload data together.
Currently the Low-Level Analyzer also decodes the meaning, but later this should be done via a (python) High-Level Analyzer. This is 1. more clean, and 2. can be reused better, as I plan on the Microcontroller to just read/write raw commands, with the interpretation done separately (in the host computer).

Note: All numbers in Hex

Recorded IDs

|  ID  | Name  |
| ---- | ----- |
| `0`| Probably the Tuner (or display?) |
| `3`| Probably the Tape Deck |
| `4`| ?? Only acted as destination, perhaps CD, or AMP ?|
| `6`| only startup and off: `6->6 0x20` |
Commands `0 -> 3`
----

Missing to identify: Mute / unmute output

|  ID  | Description | (Data)
| ---- | ----------- | ------
| `05` | Stop ?? Comes directly after `0->4: 07` and after startup| 
| `07` | Eject ? |
| `08` | Increase FF speed |
| `09` | Increase FR speed |
| `0A` | Fast Forward ? |
| `0B` | Fast Reverse ? |
| `0E` | Dolby: B |
| `0F` | Dolby: C |
| `10` | Dolby: None |
| `11` | Reverse Playing direction
| `12` | ?? Comes directly after `08` or `09`|
| `13` | ?? Comes directly after startup
| `15` | Request to record
| `17` | Play |
| `16` | Pause (Mute?)|
| `1C` | ? Answer to `3->0 : 07`, so perhaps "Ok to output", or "request for playing direction"
| `1E` | RECORD "NORM"
| `1F` | Zero time counter
Commands `3 -> 0`
----

|  ID  | Description | (Data)
| ---- | ----------- | ------
| `05` | ? Comes sometimes after `13` (is it the broadcast stop?)|
| `06` | Status Un-Playable? Eject was pressed, tape coming out
| `07` | Status    playable? Eject was pressed, tape coming in and small wait time
| `0B` | Current FF/FR speed | _Only one byte!_ : lower nibble = speed (1-4), MSBit (`80`) = isReverse |
| `0C` | Set Time display | BCD-Like MM:SS, e.g. `0x0159` for 01:59 |
| `0D` | Set Time display Negative ? | like `0C` |
| `0F` | Tape deck is present (in Dolby: C mode?) |
| `10` | Is playing "to the right" |
| `11` | Is playing "to the left" |
| `12` | ?? comes sometimes as answer to `0 -> 3: 12`
| `13` | ? Came during FF, and after startup |
| `14` | Can not record (tape was not loaded) |
| `15` | Able to record (tape was just loaded) |

 
Broadcast commands `0 -> 0`
| Command | Direction | Type | Data |
| ------- | --------- | ---- | ---- |
|   `01`  |  `0->0`   | System On
|   `02`  |  `0->0`   | System Off
|   `05`  |  `0->0`   | Stop all?
 

Discussions