MIPI DSI Display Shield/HDMI Adapter

A controller for LCD/OLED screens with MIPI DSI interface. Arduino shield format, HDMI-to-DSI adapter & built-in framebuffer.

Similar projects worth following
A simple controller for MIPI DSI displays, based on a Xilinx Spartan-6 FPGA.

MIPI DSI is a high speed packet-based interface for delivering video data to LCD/OLED displays. In a way it is similar to DisplayPort, with a more power-conscious (and thus complex) physical layer. DSI is mostly used in mobile devices (smartphones & tablets).

I started this project as the base for building a low-cost HD projector. Later on I realized it could be also useful for VR applications and as a general-purpose graphics card for small uCs - that's why it comes in Arduino shield format.


  • Supports 3/4 lane MIPI DSI displays.
  • DSI controller supports resolutions of up to 1080x1920 at 60 Hz refresh rate.
  • Converts HDMI video to DSI - letting you connect any MIPI DSI screen to your PC, Raspi or similar devices. Conversion works up to 720p@60 Hz or 1080p@48 Hz.
  • Built-in framebuffer with simple graphics stack, allowing to interface small microcontrollers, such as Arduino through 8-bit parallel or SPI busses
  • Sub-$50 BOM, including 4-layer PCB (@100pcs).
  • Powered through mini USB connector.
  • Embedded 32-bit CPU, available for user applications.

Project history

  • 12/2013: Schematics & PCB done.
  • 12/2013: Initial version of the firmware, works with Iphone4/4s screens on a FPGA dev kit.
  • 02/2014: Got the PCBs and components.
  • 02/2014: Test PCB assembled, drive both 3- and 4-lane screens.
  • 07/2014: Started work on HDMI <> DSI conversion.
  • 08/2014: HDMI convesion working for 640x960 Iphone4 screen.
  • 08/2014: DSI core achieves 1080p @ 60 Hz (48 Hz with HDMI conversion).
  • 08/2014: Rev 1.1. PCB design, schematics and firmware released.
  • 06/2015: Prototypingr rev 2.0.

To do

  • Arduino interface/drawing commands (depending on demand).
  • Test external HDMI decoder with displays larger than 1080p.
  • Port Doom to run on the softcore CPU.


The diagram below shows the main blocks of the design:

  • The FPGA: Xilinx Spartan-6-SLX9. Highlights: amateur-friendly TQFP144 package and built-in SerDes rated up to 1080 Mbits/s. The FPGA does pretty much everything in this project, hosting the MIPI DSI core, framebuffer controller with DDR memory, HDMI/DVI decoder. Everything is managed by an embedded Lattice Mico32 CPU.
  • DSI Level adapter: a bunch of resistors interfacing the FPGA's 1.8 V SSTL/LVCMOS I/O to DSI levels. More info in the FPGA section.
  • DSI connector: a standard 2x15pin 2mm pitch female connector with all DSI signals, power supplies and some GPIO pins for interfacing with the display. Since connector pinouts differ between displays the idea here is to use a tiny adapter board hosting the particular LCD's connector and its wiring.
  • DDR SDRAM, providing memory for the framebuffer, since most smartphone DSI displays don't have one.
  • HDMI input: slow version, using FPGA's ISERDES blocks (up to 1080p @ 48 Hz) or a fast one (1080p @ 60 Hz), based on Analog Devices' ADV7611 chip. The external HDMI decoder shares some pins with the SDRAM chip and the host interface, so the full HD - 60 Hz version can only work as a HDMI to DSI adapter.
  • Host interface: 12 pins wired to Arduino shield's IOH/IOL headers. Exact functions are not defined yet, I'm thinking about a 4-wire SPI interface and an 8-bit parallel bus.
  • USB UART a CP2102 chip providing USB UART, software bootloader and JTAG functionality for the FPGA.
  • Main power supply: integrated PMIC (TI/National LM26480). Voltages are: +3.3 V (HDMI input, USB, host I/F), +2.5 V (SDRAM and FPGA Vccaux), +1.8 V (DSI), +1.2 V (FPGA core).
  • LCD bias/backlight power suply: Most displays need some higher positive/negative votlage to operate. The board has a simple DC/DC converter for that purpose, producing symmetric voltage of up to +/- 6 V. The voltage can be adjusted for the particular panel by connecting a resistor between one of the DSI connector pins and ground. There is also a separate current driver for backlight LEDs, programmable by another resistor. Both DC/DC converters use a TPS61041 chip.

PCB Design

The DSI shield consists of two PCBs - the main board, where all the cool stuff is and a small adapter board, usually different for each display, connected through a 30 pin 2mm pinhead.

The main board is a typical Arduino shield. I routed the design on 4 layers, with the signals on the 2 outer layers, a contiguous ground plane and a split power plane. The DDR is placed right under the FPGA to simplify routing. SSTL to DSI level translator resistors are placed right next to the FPGA output pins to avoid stubs. All differential pairs are calculated for Z0=100 Ohm.

The adapter boards simply route the DSI lanes,...

Read more »

  • 1 × XC6SLX9-4TQ144 Spartan-6 FPGA
  • 1 × LM26480 Power Management ICs / Switching Regulators and Controllers
  • 1 × CP2103 Interface and IO ICs / USB
  • 1 × M25P80 Memory ICs / FLASH Memory
  • 1 × Molex 500254-1927 (or similar) HDMI SMD connector

View all 11 components

  • Announcement

    twl01/16/2018 at 19:54 7 comments

    As you've probably noticed, there hasn't been too many activity on the DSI Shield project during the past year. Many people were asking me where to buy the boards, how to set them up for a particular display and so on.

    Unfortunately, the amount of my spare time does not allow me to contribute to the DSI Shield enough to make it a viable product - that is manufacturing and shipping the boards, providing user support or adding new features. It's just too much for a single person doing this sort of stuff in free time (most of which is already devoted to KiCad development).

    If someone of you is interested in manufacturing these boards or firmware development, let me know.


  • Rev 2.2a. KiCad PCB & Schematics published​

    twl08/24/2017 at 09:51 4 comments

    I've just pushed the full schematics/PCB design of the latest revision of the board to GitHub. It took a while to convert them to KiCad...

  • Rev2.0 prototypes arrived

    twl08/18/2015 at 16:10 27 comments

    I've received a couple of Rev 2.0 prototypes. Iphone4 display is working fine, still waiting for Optimus E980 connectors though...

  • Revision 2.0 & commercial availabilty of the boards.

    twl06/21/2015 at 23:08 26 comments

    Hi all,

    The prototype of Rev 2 PCB (see below) just went to production.

    Some news:

    - Boards will be manufactured and sold by Creotech. We are targeting $99 (+ taxes/shipping).

    - Rev 2 board will support resolutions up to 1080p/48 Hz and work by default with Iphone4 and LG Optimus E980 displays. For other screen types (AMOLED Galaxy S3/S4, Iphone 5) there will be adapters (available later).

    - New version will also come with a composite video input, foreseen for building FPV systems for drones/flying models.

    Note that the initial V2 release firmware WILL not work as a graphics card for Arduino. Writing a graphics accelerator is a serious task and my time resources are quite limited...

  • Commericial availability of the boards

    twl04/28/2015 at 08:43 17 comments

    Hi all,

    We've found an industrial partner to manufacture and ship the DSI shield boards. Before we start the production, we need to know how many people would be like to purchasing the boards and which display models should be supported out-of-the-box. Feel free to fill the Doodle below if you are interested:



  • Galaxy S4 AMOLED screen working

    twl04/14/2015 at 09:47 12 comments

    We have a working Galaxy S4 AMOLED screen, 1920 x 1080. A QHD screen from GS Note 4 is waiting to be tested soon!

  • First release

    twl08/16/2014 at 00:26 0 comments

    The PCB design, FPGA and software sources for the first release of the DSI shield are now available on Github.


  • HDMI to MIPI conversion working

    twl08/05/2014 at 17:37 2 comments

    HDMI to MIPI conversion is finally working, here's a video showing a Raspi driving an iPhone 4 screen.

    Freshest sources coming as soon as I've cleaned them up :)

View all 8 project logs

  • 1
    Step 1

    Build the hardware:

    - Make/order the DSI Shield PCB.

    - Solder it!

    - Check the BOM, as not all components should be mounted.

    - Make/order/design an adapter board for your screen.

    - Connect the two boards together with the LCD. Power the system through USB.

    - No smoke indicates probable success.

  • 2
    Step 2

    Clone the repository:

    git clone

    Install an LM32 toolchain. You may find one on Lattice website. There's a pre-built version for Linux (IA32) available here.

    Download and install Xilinx ISE 14.7 Webpack from Xilinx website.

  • 3
    Step 3

    Build the software:

    - edit software/rev1/panels.h and set the panel type you wish to use.

    $ cd software
    $ make

    This will produce the boot.ram file that the synthesizer will embed in the FPGA bitstream. The file contains both the panel initialization/HDMI handling code and the bootloader, so the LM32 application can be re-loaded at any time via USB UART.

View all 5 instructions

Enjoy this project?



Rick Lau wrote 09/17/2017 at 04:56 point

I need a fpga board to do testing ASAP on a display.  What is the best way to get one?  Is it readily available?

  Are you sure? yes | no

Eduardo wrote 08/14/2017 at 18:59 point

Hello, very good project, great!

I have the nexus 5 display, i see the iPhone 4 display and port is similar.


  Are you sure? yes | no

Paul wrote 05/31/2017 at 12:45 point


Very good project! It works, great!

Question : i work on a similar project (3G SDI camera -> FPGA -> 5" HD screen). But i have a problem with the orientation (portrait / landscape) of the frames! Camera video stream is landscape, and the screen is portrait. 

How do you rotate the frames?

And about the SDRAM, you use it for row buffer or frame buffer? A HD 1920*1080 frame does not fit in 32MB RAM :/

Thank you a lot!


  Are you sure? yes | no

Ben Climo wrote 03/19/2017 at 08:24 point


I'm very interested in this, expecially when you added support for Samsung galaxy s3/4 with the rev 2. 

I'm confused of where I'm going to buy it as you don't have a direct link. You posted a link a few posts ago but that doesn't work properly as you may already know, it just gives a 404 error. 

Also would I be able to use this as a security camera monitor? Which is going from a camera to a sdi to hdmi converter then to this device then into a Samsung galaxy s3 display? 

Is this project dead? I haven't seen an update for it for a very long time. 

Thanks Ben

  Are you sure? yes | no

Hugo wrote 03/05/2017 at 22:03 point

Where can i buy this?  And also the connector for a galaxy s3 (i9300)?

The links shown here don't work  (404 error).

Does it have vertical/horizontal limitation?

Can i use it has a Second Camera Monitor for a 5D Mk2?

  Are you sure? yes | no

Hugo wrote 03/05/2017 at 22:03 point

Where can i buy this?  And also the connector for a galaxy s3 (i9300)?

The links shown here don't work  (404 error).

Does it have vertical/horizontal limitation?

Can i use it has a Second Camera Monitor for a 5D Mk2?

  Are you sure? yes | no

xaled wrote 02/10/2017 at 16:21 point

Could you share the Iphone or LG socket Pinout? I just can not find the reliable pinout source on the net.

  Are you sure? yes | no

inforfernandoalves wrote 01/11/2017 at 14:28 point

Hello again. I'm looking forward to using it with the LG Optimus e980 display. Can you tell me if it will work with the 400 ppi of the display? What about the maximum fps rate that it reaches? I live in Brazil, do you guys go here? How can I make a purchase?

  Are you sure? yes | no

Raukk wrote 01/10/2017 at 16:11 point

Is this project Dead? aka. no longer being worked on or developed?

  Are you sure? yes | no

inforfernandoalves wrote 01/07/2017 at 14:00 point

Hello, I liked your project and I'm interested in buying one of your prototypes. Will you sell one? How much would it cost? Grateful!

  Are you sure? yes | no

Raukk wrote 01/10/2017 at 16:07 point

  Are you sure? yes | no

Timothy Onggowasito wrote 03/14/2017 at 14:41 point

That leads to a 404 page :(

  Are you sure? yes | no

Aditya wrote 12/23/2016 at 12:03 point

Great project man. Do anyone know of a project where a mobile motherboard can be used to output to hdmi

  Are you sure? yes | no

SFR75 wrote 12/18/2016 at 22:48 point

Looks great! Exactly what I've been looking for ...  now ... do I need to build it myself based on BOM or it's possible to buy it from you maybe. I'm not electronic expert, but more of a digital artist.. so I would rather not build it myself :-)

  Are you sure? yes | no

thinhleduc9112 wrote 12/17/2016 at 10:54 point

hi twl,

i'm build one right now, but how do i re-generate the dsi_pll_spartan6.v file using Coregen

  Are you sure? yes | no

Djon wrote 12/17/2016 at 15:14 point

please tell me what this is?

  Are you sure? yes | no

thinhleduc9112 wrote 12/17/2016 at 16:30 point

It's just a needed file to generate bitstream. I think so

  Are you sure? yes | no

Djon wrote 12/17/2016 at 17:01 point

You, too, in ISE errors?

  Are you sure? yes | no

thinhleduc9112 wrote 12/17/2016 at 17:08 point

I have this file, but it still errors "clk_dsi_shifted_i" in dsi_core.v file

  Are you sure? yes | no

thinhleduc9112 wrote 12/17/2016 at 17:24 point

what is your errors?

  Are you sure? yes | no

Djon wrote 12/18/2016 at 09:03 point


  Are you sure? yes | no

thinhleduc9112 wrote 12/18/2016 at 09:37 point

not yet, I'm trying to compile the boot.ram file

  Are you sure? yes | no

Djon wrote 12/18/2016 at 13:03 point

how success will tell me please

  Are you sure? yes | no

thinhleduc9112 wrote 12/18/2016 at 13:13 point

i could not compile its

  Are you sure? yes | no

Djon wrote 12/16/2016 at 16:07 point

Hello everybody! Does anyone have any ready rev1_top.bit file?

  Are you sure? yes | no

K3GER The Great wrote 12/15/2016 at 22:14 point

Hello I am looking for some information,

Where would I buy this from and does it support the LG Optimus G Pro E980 and what is the voltage that it needs to power the screen.


  Are you sure? yes | no

crY x wrote 09/10/2016 at 15:19 point


I just received my board from creotech, works just fine with my iPhone 4S / Raspi3, thanks for your efforts! 
But is it just me or does the board indeed create relatively high temperature, even when 'idle'? Unfortunately I could not measure the temperature yet. I am planning on running it in rather confined space and am having second thoughts whether this is a good idea. Active cooling is unfortunately not possible due to lack of room... 
Does anyone have related experiences?

  Are you sure? yes | no

kari.kolehmainen wrote 09/02/2016 at 12:56 point

Very interesting project as I am trying to find a way to connect 4-lane MIPI panel (AMOLED) to either BBB or Raspberry Pi. I noticed that the latest revision in Github was v1.1, how is the later versions different/better. One thing with the AMOLED panel is that I need to build different adapter as the power lines are completely different from LCD/TFT panels. Does the latest versions from Creotech have a possibility of using custom adapter or should I stick with the v1.1?

  Are you sure? yes | no

Andrey wrote 08/25/2016 at 22:38 point

hi you try connect touch screen?

  Are you sure? yes | no

gordonmkc wrote 08/09/2016 at 10:42 point

Can this board read and use HDMI data which convert from MHL?

  Are you sure? yes | no

Church wrote 07/28/2016 at 08:02 point

Hey I was reading about the TC358870XBG chip. Are there any options for driving the xperia premium 4k screen through displayport or something?

  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