Kerry Wong Salvages Uniden Cordless Phone Displays with a Little Clever Reverse Engineering

Using a logic analyzer to sniff out SPI, Wong was able to add some handy LCD displays to the spare parts pile.

Gareth Halfacree
3 years agoHW101 / Upcycling / Debugging

Engineer Kerry D. Wong has an expanded box of spare parts, courtesy of some clever reverse engineering on the LCD panel of soon-to-be-discarded Uniden cordless phones following a communications overhaul.

"I recently upgraded my home phone system and thus was left with a couple of old Uniden DCT648-2 handsets," Wong explains. "Most of the components inside are probably not salvageable but these handsets use 3×16 character LCDs, so it would be nice if I could reuse them in my other projects. The LCD inside the DCT648-2 handset has 8 pins. This suggests that it is using some kind of serial protocol. Unfortunately, I could not find any information on the LCD used here so I decided to hook it up to a logic analyzer and see if I could reverse engineering the protocol used to drive the LCD."

Old cordless handsets can be a source of handy spare parts, as Kerry Wong's work proves. (📹: Kerry D. Wong)

Phones are often a source of reusable displays — there are few makers who haven't put an old Nokia featurephone display at the front and center of a project - but this particular panel proved more problematical. For starters, nobody seemed to have tried to use it outside the phone before — and with no useful markings showing manufacturer, pinout, or controller details, getting it to display something would take work.

Wong started by identifying ground and power pins, discerning that the device runs on 3.3V logic levels and comes with a pin probably used for an external capacitor to feed the built-in charge pump which provides a needed negative voltage. "With this information, I hooked up pin 2 through pin 8 to my logic analyzer," Wong explains. "After looking at the captured data, it became clear that this LCD is using some kind of slightly modified SPI protocol."

Seeing the communications protocol captured on-screen identified pin 6 as the SPI clock pin, pin 7 as MOSI, and pin 8 as CS — with pin 5 failing to conform to the SPI standard but later discovered to send an initialization signal to the LCD. "So now we know the SPI mode the LCD is communicating with: CPOL=1 and CPHA=1. This corresponds to SPI_MODE3 in Arduino," Wong explains.

"Since the character LCD is 3×16 (48 bytes) but each frame contains 87 bytes and the actual character displayed on the LCD starts from the 40th byte so the first 39 bytes must be some kind of initialization data that prepares the LCD for data display. The first 39 bytes also do not seem to change when the display changes. The 39th byte corresponds to the last low-to-high transition of pin 2 so clearly pin 2 is used to signify the beginning of the display data."

With that information in hand, Wong was able to write a program for an ATmega328P and test the assumptions — successfully filling the display with ASCII characters and providing a basis for its reuse in future projects. "The 39 bytes header info is somewhat mysterious," Wong admits, "but it seems to be working just fine by sending these verbatim each time with the correct timing and command pin toggle."

The full project write-up is available on Wong's website.

Gareth Halfacree
Freelance journalist, technical author, hacker, tinkerer, erstwhile sysadmin. For hire: freelance@halfacree.co.uk.
Latest articles
Sponsored articles
Related articles
Latest articles
Read more
Related articles