Close
0%
0%

MIPI-HDMI Bridge RE

Reverse-Engineering a random MIPI-HDMI bridge from China

Similar projects worth following
You can get these interesting MIPI-HDMI bridge modules from China, usually with a display of some sort. They are based around the Toshiba TC358870XBG chip, which is quite a powerful beast - it can power a 4K OLED over HDMI 1.4b, or even dual 2K displays!

This project details my efforts in reverse-engineering the board, in hopes it can be used for generic MIPI display experimentation. It's obvious that the board is intended to fit a large variety of displays.

The Toshiba TC358870XBG MIPI-HDM bridge chip is very powerful, and supports dual MIPI channels! This makes it perfect for VR headsets, which is why you can find it in the Oculus CV1, Razer OSVR HDK2, HTC Vive, and the Open Source Relativ project.
  • On the left you can see a large ribbon connector. This allows you to connect a range of different types of display using one or both MIPI channels. It has multiple voltage rails, and bi-directional GPIOs at 1.8 & 3.3V. These are usually used for power-sequencing the display.
  • On the right is the HDMI 1.4b connector.
  • And at the top is the controlling MCU, which is an STM32 clone. This initializes the bridge chip via I2C.
  • There are also some unpopulated pads, which seem to be for an optional I2S audio output.

Each board comes pre-configured for the displays that it comes with, but I have not yet figured out how to reconfigure a board to support an abitrary display. Mine came with support for these interesting round OLEDs, presumably intended for some kind of smartwatch...

See the project log for reverse-engineering details...

octet-stream - 32.00 kB - 10/29/2019 at 06:18

Download

hex - 154.15 kB - 10/29/2019 at 06:18

Download

  • 1 × Toshiba TC358870XBG MIPI-HDMI Bridge Chip
  • 1 × GigaDevices GD32F103C8T6 (STM32 clone)

  • OLED Breakout

    Jared Sanson10/29/2019 at 06:03 0 comments

    Here is the breakout board that came with my unit:

    This consists of a specialized OLED driver chip, a 2.8v LDO, and two OLED connectors that utilize only 1 MIPI data pair on each channel:
    I was unable to find a datasheet for my specific displays, but I determined the pinout for each display is roughly:

  • MCU

    Jared Sanson10/29/2019 at 05:25 4 comments

    As explained in previous logs, the MCU is the brain of the board. It configures the HDMI bridge chip, and handles power-sequencing of the display.

    Out of curiousity, I connected an STLink to the SWD pads on the PCB, and behold, the chip is unlocked!


    This allowed me to extract the firmware. I plan to reverse-engineer the firmware to determine how it configures the system, and how it could be configured via USB.

    GPIO map:

    Read more »

  • Display Connector

    Jared Sanson10/29/2019 at 05:19 0 comments

    The connector provides two independent MIPI channels, each with 4 data pairs & 1 clock pair. The 5V rail is always powered, but the other rails can be individually sequenced and controlled by the MCU. The GPIOs can be used to control additional regulators or enable control signals on the display board. They are output only.

    Read more »

  • Board Overview

    Jared Sanson10/29/2019 at 05:17 0 comments

    To start reverse-engineering the circuit behind this board, I started by taking photos of the bottom and top layers, and inking over with my Surface:

    Read more »

View all 4 project logs

Enjoy this project?

Share

Discussions

ellimtl wrote 05/14/2020 at 20:14 point

Hi Jared,

I already saw and tried the extracted .hex and .bin files for the STM32 of this board. Have you tried a C/C++ program that can implement the functionality of these files to be able to upload on any other STM mictocontroller? I think the STM32 for this board might not have a complex programming because seems that it only initializes the TOSHIBA 358870XBG bridge. I am looking for such C/C++ program.

Thanks for your help.

Regards,
Daryon

  Are you sure? yes | no

Jared Sanson wrote 05/15/2020 at 07:53 point

No, I haven't yet attempted this. But I believe it shouldn't be too complex as all of the initialization is done via I2C. I imagine you could do it all with a standard Arduino...

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates