Take out the LCD front panel from a SerComm SHG1500 router and interface it to any 3.3V development board using SPI and I2C.
The devices I’m talking about are SerComm SHG1500 routers, used for ADSL internet. They are based on Broadcom BCM6361 SoC and, although this platform is supported by OpenWrt, a specific build for this device or a way to upgrade firmware isn’t known. So I gave up this idea. But upon opening the case, the front panel with LCD display looked like a module that could be used for my projects. The LCD is color TFT, 2.8” size. Next to it there is a capacitive keypad with 5 keys. Front panel plugs into main board using a 2x15 pins, 1.27 mm pitch connector. It seemed good enough to start gathering information.
SerComm SHG1500 front panel with LCD and capacitive keypad |
I said earlier I own two pieces of this router model. Both main boards are visually identical. This isn’t true for the front panel circuitry too. First of all, let’s identify some ports on the main board.
Serial port and keypad I2C port |
Pinout of serial and I2C port |
Front panel connector - a 2x15 female pinheader |
I’ve only been able to control LCDv6 with a development board. The LCD on v6 is manufactured by Truly (you will see TRULY® printed on FPC connector). Information in this post only applies to this display and front panel type. I don’t have enough information to use the FPGA driven LCD yet (by the way, that one is manufactured by Giantplus).
In an attempt to identify the pinout of the front panel connector I used a logic analyzer. Although I set my $5 analyzer to its maximum sample rate (24MHz) I wasn’t able to get a readable protocol for the display. I guess it’s SPI though (this was later confirmed). The FPGA board used a serial protocol too. It could still be SPI, but data stream is probably different.
Without other information about LCD screens (no datasheets available) I focused on what I could use: the keypad. It is on a different PCB fitted into the front panel PCB using a pinheader of 9 pins (1 mm pitch). The keypad IC has “8646” printed on it. I found out it is Semtech SX8646 [Ultra Low Power, Capacitive Button Touch Controller (8 sensors) with Enhanced LED Drivers]. The datasheet is available from manufacturer’s website.
At this point I had a partial pinout of the front panel connector. But without information about LCD it was useless. Months passed. Until somebody got and made public the GPL source code for this router.
A document inside the archive lists all open source packages used for this router. I now knew that Disko UI framework was used for display and that SerComm driver for Truly LCD was named HX8347I. This was huge. The name of the library is the name of the controller IC used by LCD. Note that the same file mentions HX8347B driver for HHG1500, a similar router from Huawei. For both controllers there are Arduino libraries, but from what I’ve seen the modified UTFT library for the -I version configures the LCD with different parameters. When writing my own software, I will definitely use register values from the source code of the router.
Looking in the sources it seems some files are missing (probably not GPL code). They seem to be mixing Truly LCD with FPGA LCD, making me believe that FPGA emulates HX8347I (an early version, LCDv3 emulates the protocol of an IC that would be used in a future version, LCDv6 – didn’t seem very probable). Code for SX8646 doesn’t exist, although the IC is mentioned in some configuration files.
When sampling various pins of the front panel connector with the logic analyzer I noticed a strange transmission on one of the pins. C source for LCD confirmed the signal was for backlight control. I now have a – still partial, but working – pinout of the front panel.
Front panel connector pinout |
The pinout above is for the male connector on front panel board. The female connector on main board has it mirrored since the front panel plugs into it. Testing with the 1.27 mm pitch connector was difficult so I built my own adapter. I removed the female connector on main board and placed it on a home made adapter PCB. Now I have 2.54 mm pinheaders and I can plug the front panel even into the breadboard.
2.54mm to 1.27mm pinheader adapter for front panel |
Initial measurements with something displayed on LCD revealed about 12mA current on 3.3V line and 125mA on 5V line (current drawn by LEDs).
Initial test of front panel on breadboard, driven by STM32 bluepill |
Posts explaining in detail how to control the backlight, display on LCD and read key touches:
- Backlight control (backlight library no longer needed, functionality is included in HX8347-I library)
- HX8347-I LCD library
- SX8646 library
Links
- Sercomm SHG1500 on OpenWrt Table of Hardware (contains link to GPL source code)
- Other devices based on BCM6361 SoC on Wikidevi
- Semtech SX8646 product page
- UTFT library with support for HX8347-I (doesn't compile for STM32 blue pill)
- Connector adapter, KiCAD project
Hi, I'm updating the OpenWrt page for this gateway, I need your confirmation about the JP7 is not used/populated on both your boards. My board with the FPGA-driven LCD uses that JP7. You can see a big cable conneted to that port from the pictures available from OpenWrt wiki page. From your post it seems your other board with FPGA-driven LCD has that port unpopulated as like as the other one. is this correct?
ReplyDeleteHi! Both of the boards I own have this port unpopulated/unused.
Delete