Close
0%
0%

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.

twltwl
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.


Features

  • 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.

Hardware

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.

    Tom

  • 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:

    http://doodle.com/uv283rp366prppnt

    Cheers,

    Tom

  • 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.

    Enjoy!

  • 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 https://github.com/twlostow/dsi-shield

    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?

Share

Discussions

thomas.wan wrote 02/24/2016 at 21:26 point

I received the adapter and an LG E980 panel. I have not been able to see any picture on the panel yet after connecting the panel to adapter board and connecting the adapter board to an USB host for power and debug.

I connected to the debug serial port and was able to navigate the menu to select the E980 panel and then to save and restart the adapter - it initially had the iPhone 4 display selected on the first power up. Even after selecting the E980 panel and waiting for the adapter to reinitialize, I don't see any picture on the panel. I am able to adjust the backlight brightness through one of the menu item but no picture so far. I was expecting at least a "NO HDMI" image but I see only either a black frame or occasional vertical or horizontal strips or lines when I connect the adapter to an HDMI source. With a PC as an HDMI source, I can see the detected available resolution is 1080x1920 as expected. I have several pieces of the adapter board and E980 panels just in case I may have done something wrong to the first setup.

I would appreciate any insight. Thank you in advance.

  Are you sure? yes | no

thomas.wan wrote 02/24/2016 at 22:34 point

I've tested a 2nd setup with another adapter and E980 panel but the symptoms remain the same.

  Are you sure? yes | no

thomas.wan wrote 02/29/2016 at 23:30 point

Finally got my setups to work (adapters + E980 panels). First two panels were defective.

  Are you sure? yes | no

dinujohnk wrote 02/19/2016 at 15:04 point

if there any way of getting these in india??

  Are you sure? yes | no

sl33pydog wrote 02/10/2016 at 11:35 point

Got mine from creotech.  It's got the e980 flashed preloaded.  But it's only doing portrait 1080x1920 native.  I can't get the HDMI to work with a blueray player or the pi.  I got it to work with a meego stick.  Any ideas on how to get the resolution to 1920x1080 for other inpit devices?  Check the YouTube link i posted about it. 

  Are you sure? yes | no

twl wrote 02/10/2016 at 14:46 point

Hi,

The device can only do portrait (1080x1920) because smartphone LCDs only support portrait mode. There's no way to force an E980 LCD to scan in another direction :/

An alternative would be to use the DDR framebuffer to implement rotation. I didn't plan it since it makes the device useless for VR applications it was primarily foreseen for (rotation introduces one-frame delay). If someone writes a video rotator core, I'd be glad to add this feature.

Concerning RPi - you need to edit the config file. I'm preparing an official user's manual that will explain this stuff. To set up the pi, you need to edit the 'config.txt' file on the SD card:

hdmi_timings=1080 1 46 1 45 1920 1 10 1 4 0 0 0 48 0 108330000 1
display_rotate=1
framebuffer_width=1920
framebuffer_height=1080

Cheers,

Tom

  Are you sure? yes | no

sl33pydog wrote 02/10/2016 at 15:08 point

Thanks twl for the project and for replying to this so fast.



I guess I'm still having a hard time understanding why you can't switch rows and columns on a dumb panel.  I'm going to do some reading up on LCD panels and why this happens for my own curiosity.
I've been looking too for a rotator, I looked into the minispartan6+ for this but I'm not well versed in code and frame buffering.
I thought it was merely changing lanes or writing in the code that height is 1080 and width is 1920 to get landscape mode.  I wish they made panels in landscape too.
Does this mean that tablet displays like a Samsung Galaxy tab are landscape since it appears they were meant for landscape?

  Are you sure? yes | no

madeline wrote 03/21/2016 at 18:31 point

Hi Tom, do you think it may be possible for this to be a future update for the firmware, or does this require a hardware-based solution? I'm looking to use the E980 display for a HMD. Alternatively, I may want to use it for a field monitor. In both of these cases I'm not using something like a Raspberry Pi which can handle the rotation at the source of the video.

  Are you sure? yes | no

thomas.wan wrote 02/26/2016 at 01:26 point

Your post gives me hope that my setup can eventually work. I also got adapters from Creotech and E980 panels separately but for now cannot see any pictures on the screen (my posts are on 2/24/2016).

When you say "got the E980 flashed preloaded", I presume you mean the adapter FPGA bitfile programming. Was it something you had to do? Or did you mean you had it configured that way as it come from Creotech? I would appreciate any tips you have on getting your setup to work. Thank you for posting a video too.

  Are you sure? yes | no

twl wrote 02/29/2016 at 09:39 point

Hi Thomas,

Could you send me detailed photos of the LCDs you've bought and the way you connect them to the PCB?

Tom

  Are you sure? yes | no

thomas.wan wrote 02/29/2016 at 23:19 point

Hi Tom,

Thank you for responding to these messages and offering to help (I can't reply to your reply - seems like the levels of messages and replies are limited to three).

I finally managed to get multiple setups to work (adapters + E980 panels).

Over the weekend, I figured out that the initial few LCD panels that I was testing with adapters were, disappointingly, defective. With good working panels, I can now see video on screen through the adapters. Thank you again for making this project available.

1080x1920x48Hz is working great. From reading the project notes, I understand that for 1080x1920x60Hz the 64-pin Analog Devices ADV7611 chip is required. Looking at the board Rev 1.1 schematics and PCB layout available in the project repository on Github, I see that this chip used to be part of the design (or was planned?). On the current Rev 2.2 board I see a 32-pin TI TVP5150AM1 chip for analog to digital video input instead.

Does the Rev 2.2 board support only 48Hz at 1080x1920 due to the direct connection to the FPGA?

Thomas

  Are you sure? yes | no

Mehmet Köse wrote 02/08/2016 at 19:21 point

kickstarter +1 

and you must create a newsletter form and simple website

please let us know about the project

  Are you sure? yes | no

Sarah Barran wrote 01/29/2016 at 19:06 point

Has anyone tried this with the PS Vita Slim screen? Considering screens for a project and a replacement Vita screen has better specs than the arduino project screens. 

  Are you sure? yes | no

nick.ceo.uk wrote 01/28/2016 at 12:41 point

Hard to tell if this thing is still on, etc.

The idea of 4k projector from smartphone salvaging is tempting inthe context of current pricing...

This particular project however comes short of the 4k screens because the mipi dsi controller goes full hd but not 4k or higher(Its under features)

Toshiba makes a 4k hdmi 1.4a to mipi dsi chip called TC358870XBG. They also boast that the chip is used by Oculus rift hardware.

http://toshiba.semicon-storage.com/info/lookup.jsp?pid=TC358870XBG&lang=en_us®ion=ncsa

Would be good to know how latency plays into all this, i.e. The Toshiba vs this hackaday.io project speed test, reliability etc.

P.S. I really like the thinking behind going for custom ASIC designs.

Would be great to just give ourself the stuff thats lacking ... Like hdmi 2.0 to mipi dsi/lvds and the 4k super mhl to mipi dsi/lvds or whatever they use to drive 4k and above

  Are you sure? yes | no

SpaceCadet wrote 01/12/2016 at 11:56 point

Great project! Any plans to make a 4k compatible ASIC ? Xperia Z Premium might be used to make a nice 'affordable' 4k projector!  

  Are you sure? yes | no

timemaster wrote 12/23/2015 at 22:57 point

Very interesting project, I would like to order two pcs but Creotech is not responding :( Is is possible to place an order somewhere else?

  Are you sure? yes | no

Ron wrote 11/11/2015 at 23:48 point

Would it be possible to provide a working bitfile for the rev 1.1 board and iphone4 display e.g. on github?

  Are you sure? yes | no

Peter Burkimsher wrote 11/09/2015 at 03:31 point

Do you think that if we all pitch in, we could raise $22k for a custom ASIC?

http://www.sigenics.com/custom-asic-cost-calculator/

If there's 400 people buying it (estimated from 376 on the poll http://doodle.com/poll/uv283rp366prppnt), that's a unit cost of $55 USD. That's more than the $20 FPGA, but power consumption would be lower and physical size would be smaller. 

It would also be so satisfying to see the amateur community finally reaching silicon. 

  Are you sure? yes | no

rz.gcd.shz wrote 11/03/2015 at 17:10 point

will this adapt to the iPhone 6 plus displays ?

  Are you sure? yes | no

ruddolf.stern wrote 10/31/2015 at 03:20 point

For those interested in D-PHY DSI check the "DSI Transmit Bridge" Complete HDL Reference Design from Lattice. Works with MachXO3 FPGA. On DigiKey or Mouser there is a breakout board with MachXO3 for around 25 USD only. I'm not working for Lattice but their new MachXO3 FPGA looks interesting.

  Are you sure? yes | no

ruddolf.stern wrote 10/31/2015 at 02:53 point

The project sources does not compile (in Xilinx). It is missing the dsi_pll_spartan6 Verilog file.

  Are you sure? yes | no

michael.rodenbarger wrote 10/27/2015 at 14:21 point

     This is all great stuff! I've been watching this project for what seems like all year and even though I've searched around and have found alternatives there's nothing that can compare to this.

     A lingering question I still have is will any work be done to make a case available for the screen and board? If a case can be made and sold seperately to make this look like a smartphone or a mini monitor that works as a mini high definition HDMI display. That would add additional appeal people like me that aren't interested in creating a custom case to house this hardware. 

    I plan on buying this either way, I've been anticipating it for so long that won't affect my final decision. I would definitely shell out extra $$ for a hassle free way to house this though :).

  Are you sure? yes | no

cyclone wrote 10/18/2015 at 21:09 point

I need to stream video to a flexible display to make VR environment for an animal behavior study. Would your project work with flexible displays found on smartphones? 

  Are you sure? yes | no

yotamnach wrote 10/15/2015 at 08:49 point

i want to use the Creotech manufacture board for a 800x600 resolution 60 fps lcd, how can i configure those parameters?  

  Are you sure? yes | no

yeomanb wrote 09/23/2015 at 19:55 point

I am ready to buy your board in quantity ? What is the current outlook for purchase?

  Are you sure? yes | no

rgey wrote 09/01/2015 at 20:13 point

i am looking for PS4 hdmi direct connection to a smartphone display.. the CMOAR people need this too

  Are you sure? yes | no

sirus20x6 wrote 08/15/2015 at 14:17 point

Do you know that the note 4 uses MIPI as well?

  Are you sure? yes | no

ray wrote 08/14/2015 at 01:27 point

can your send me  dsi_pll_spartan6.v file ? my email:  iamacoder@outlook.com

thank your very much!

  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