In order to build a replacement display for the HP34970A data acquisition unit, I needed to understand the communication protocol between the CPU board and the front panel assembly.
The unit is built with four boards:
- A1 is the main bard, with the PSU, the main controller and the floating logic,
- A2 is the front panel with the display and the keypad,
- A3 is the backplane on which I/O modules are plugged,
- A4 is the (optional) internal 6.5 digits DMM.
The commnucation between the different system blocks is done with asynchronous serial links. They use the rather uncommon bit rate of 187500 baud, with a classic 8N1 schema.
The CPU <-> Display Panel communication protocol
The communication protocol between the main controller (CPU) board and the display panel (DP) consists in "datagrams" sent using the general pattern:
- when a device (CPU or DP) wants to take control of the communication bus, it sends a Start of Transmission (SoT) signal (0x66),
- each sent char (but the end of transmission) must be acknowledged (ack value may vary),
- at the end of a communication, the initiator send a "End of Transmission" (EoT, 0x55). This sent value is not acknowledged.
- the keyboard can interrupt a CPU->DP communication in progress by not acknowledge a received byte, but sending a SoT instead of the expected ACK value,
- acknowledge values are:
- 0x99 as a response to the SoT,
- 0x00 otherise
The CPU->DP transmission protocol looks like:
Two (or more) datagrams can be transmitted in a single "transmission", ie. without sending the EoT byte, eg.:
When the user press a key on the front panel, a slightly simpler "packet transmission" occurs:
Sending data to the main display
The main display consist in 13 17-segments digits, in which the character is displayed by a main 14-digits, and the punctuation with 3 segments (2 dots and a comma, allowing to represent the signs ".", ",", ":" and ";"). Punctuation signs are also very close to the preceding chracters.
The command used to send text to the main display is 0x00. The character 0x09 (tabulation) has a special meaning: it marks the beginning and the end of a part of the text to be displayed darker than the usual. This is used to emphasis a portion of the displayed text. Also, as the punctuation signs do not consume a digit, the displayed text can be larger than 13 characters.
Sending data to the Channels display
This area only allows to display 3 7-segments digits. The command is 0x0C, the payload is thus 3 bytes long.
The display also has several flags. Display flags are selected by sending the 0x0A command. The payload is 4 bytes long. Each bit of these 4 bytes represent a flag on the display.
Let's consider the following (we don't represent the acknowledgements here):
Then the flags I've identified so far are:
Note that the front panel sends a "key press event" and a "key released event", depending on the value of the bit 7:
The bit 8 of the key event byte is set high for the knob.
The key codes are:
For the knob (including the "Knob" bit): :0x80: Knob left :0x81: Knob right