The Motorola F3/MOTOFONE was the first (and still is the only?) mobile phone with an e-paper display. Although this is not a pixel-based display, like found in eBook-readers (e.g. the Amazon Kindle or the B&N nook), it is still quite nice for experimenting with low power microcontroller projects.
E-paper/bistable displays have the ability to retain the display content even without the supply of power, so the initial idea I had was to build something like a clock, only powering the display when updating it every minute.
The display consists of 182 individually drivable segments, which form a row of six 14-segment characters, a row of six 8-segment characters, and many symbols used for user notification and the menu.
As you can see from this picture, the used display controller is a Solomon Systech SSD1621. Unfortunately there is no public datasheet, so I had to sniff the (32 bit) SPI communication between the TI Locosto baseband processor and the display. The protocol turned out not to be very difficult, just some initialization, some commands for actually writing the display content, and a command to refresh the display with the just transmitted content.
The most time has been spent for actually finding out which bit was for which segment, since all segments are wired up at random to the segment outputs of the controller. This is not surprising though, given that you need a circuit path to each and every segment - “just get them wired already, we can handle the rest in software” seemed to be the motto
By the way, since I mentioned the TI Locosto baseband: Maybe someone wants to reverse-engineer the serial rom-bootloader of this ARM7-based processor, so we can drive the display directly from the phone
Normally, the baseband board and the display/keypad pcb are connected with a 32-pin connector (exact model unknown). Luckily there are pull-up resistors and capacitors for every needed signal, so I decided to solder some wires there, instead of directly to the connector. The schematics of this phone are floating around the web, just search for f3_schem.rar.
This is the pinout of the connector, signals that were used are highlighted:
| pin | signal | pin | signal | |
|---|---|---|---|---|
| 01 | SPKPA | 02 | TEMP_SENSOR | |
| 03 | SPKNA | 04 | DISPLAY_BUSY1 | |
| 05 | HS_SPK_CHARGE | 06 | HSMIC_OUT | |
| 07 | GND | 08 | VLED | |
| 09 | HSSPK_CHG_N | 10 | LED_C | |
| 11 | GND | 12 | DISPLAY_32K | |
| 13 | DISPLAY_BUSY0 | 14 | SYS_RESET | |
| 15 | SPI_nCS0 | 16 | SPI_CLK | |
| 17 | SPI_MOSI | 18 | SPI_MISO | |
| 19 | VIO | 20 | VBAT | |
| 21 | PWON | 22 | KBR(0) | |
| 23 | KBR(1) | 24 | KBR(2) | |
| 25 | KBR(3) | 26 | KBC(0) | |
| 27 | KBC(1) | 28 | KBC(2) | |
| 29 | KBC(3) | 30 | KBC(4) | |
| 31 | GND | 32 | PCHGAC | |
| 33 | RF_ANT | 34 | GND | |
To drive the display, I'm using a TI MSP430G2231 low-power microcontroller on the TI Launchpad. The Launchpad has been populated with the external 32KHz crystal oscillator that comes with it. The connection between display and Launchpad is as follows:
| MSP430 | display | ||
|---|---|---|---|
| port | signal | pin | signal |
| P1.0 | ACLK 32KHz clock output | 12 | DISPLAY_32K |
| P1.1 | display supply | 19+20 | VIO+VBAT |
| P1.2 | busy input | 04 | DISPLAY_BUSY1 |
| P1.3 | display reset | 14 | SYS_RESET |
| P1.4 | SPI slave-select | 15 | SPI_nCS0 |
| P1.5 | SPI clock | 16 | SPI_CLK |
| P1.6 | SPI MOSI | 17 | SPI_MOSI |
Note: even though the MISO signal is connected in the original phone, there's no activity at all, so I left it unconnected. Also, DISPLAY_BUSY0 and 1 seem to be identical.
I've uploaded a video, demonstrating the display and Launchpad being used as a low-power clock.
A few notes on the video:
The sourcecode can be found on github: https://github.com/steve-m/epaperclock, and can be cloned with
git clone git://github.com/steve-m/epaperclock.git
I used msp430-gcc 4.4.5 to compile the code, and mspdebug 0.14 for flashing it. There's a great how-to on Hackaday: Launchpad programming with Linux
Discussion
Hi Steve! This is very interesting. I've got a question, though. When I look at your photo of the PCB of the display above, I can see the electrodes running the characters etched in. Does it mean that the front of the e-ink foil has a single continuous electrode in front? As far as I know e-ink runs at 15v, so theoretically can you create a custom pcb with your choice of electrodes and use the e-ink foil from this phone to display other characters? Have you thought about this? I would be grateful if you could reply. Regards, Koray.
I thought this, every time I tried to seperate the e-ink from the backing I managed to destroy the e-ink.
You would need exactly the right solvent to remove the bonding between e-ink and PCB without damaging the e-ink.
Ive not managed it yet, and it gets expensive destroying e-ink screens all the time.
Thanks for the reply! What you say makes sense. Regards, K.
Hi, Just came across this. What would be the requirements when using a different micro-controller? Thanks
Well, a hardware SPI peripheral would be nice, but of course you just could bitbang it. Apart from that it should be straight forward, just reimplement spi_write_32() for your specific microcontroller and use the functions of display.c. But one thing: on the AVR for example it would make sense to put the segment mappings to flash, as I pointed out here: http://git.steve-m.de/epaperclock/tree/src/segments.h#n380