Dell D991CN Plus Screen Reverse-Engineering

2017-12-29

/uploads/blog/2017/1514519613669-DSC_4018_small.jpg

It has been more than a year since the launch of the ClassWiz calculators. And the very first ClassWiz calculator has emerged. Also came with 192x63 high resolution screen and graphical menu. I spent sometime to reverse engineer the protocol of this screen. The protocol seemed weird at first, as the command doesn't match common controllers. I didn't ended up finding the controller, but I was able to guess the instruction use by referring to other controllers.

Basic Information

Controlling

Initialization

  LCD_WriteCmd(0x88);
  LCD_WriteCmd(0x88);
  LCD_WriteCmd(0x88);
  LCD_WriteCmd(0x88);
  LCD_WriteCmd(0x93);
  LCD_WriteCmd(0xE3);
  LCD_WriteCmd(0xF8); 
  LCD_WriteCmd(0x00);  
  LCD_WriteCmd(0x81);
  LCD_WriteCmd(0x3C); 
  LCD_WriteCmd(0x2E); 
  Delay_ms(500);
  LCD_WriteCmd(0x81); // Set Vop
  LCD_WriteCmd(0x27); // Vop
  LCD_WriteCmd(0x82); // Enter partial display mode
  LCD_WriteCmd(0x3F); // Set partial display bias
  LCD_WriteCmd(0x83); // Exit partial display mode
  LCD_WriteCmd(0x10); // Set col address high
  LCD_WriteCmd(0x00); // Set col address low
  LCD_WriteCmd(0xA0); // Set framerate
  LCD_WriteCmd(0xAF); // Turn on display
  LCD_WriteCmd(0xA4); // Disable all pixel on
  LCD_WriteCmd(0xAF); // Turn on display

Setting address

  LCD_WriteCmd(0xB0 | page); // page range 0-7 
  LCD_WriteCmd(0x10);
  LCD_WriteCmd(0x00);

Setting contrast

  LCD_WriteCmd(0x81); // Setting Vop
  LCD_WriteCmd(0x20 | contrast); // contrast range 0-0x1F

??

  LCD_WriteCmd(0xE0); // Enter RMW mode
  LCD_WriteCmd(0xB7);
  LCD_WriteCmd(0x1A);
  LCD_WriteCmd(0x0F);
  res1 = LCD_ReadCmd(); //0x00?
  res2 = LCD_ReadCmd(); //0x00?
  LCD_WriteCmd(0x00);
  LCD_WriteCmd(0xEE); // Exit RMW mode

Shutdown

  LCD_WriteCmd(0xAE); // Turn off display
  LCD_WriteCmd(0xA5); // All pixel on

Pinout

  1. NC
  2. Vo
  3. C1P
  4. C1N
  5. V1
  6. C2P
  7. C2N
  8. V2
  9. C3P
  10. C3N
  11. V3
  12. C4P
  13. C4N
  14. V4
  15. VDD
  16. GND
  17. D7
  18. D6
  19. D5
  20. D4
  21. D3
  22. D2
  23. D1
  24. D0
  25. RD
  26. WR
  27. RS
  28. RST
  29. CS
  30. NC

Note: WR and RD are low active, sample on rising edge, RST is low active, RS low = command, RS high = data