Overview
You may have noticed that our RP2350 Feather has an FPC output connector on the end for accessing the HSTX (High Speed Transmission) peripheral. This new capability, not available on the RP2040, is specifically designed to allow the RP2350 chip drive DVI displays really easily! Historically you could use DVI on the RP2040 by mashing together some overclocking and a lot of PIO - it works but its quite hacky. The HSTX peripheral is streamlined, and doesn't require PIO or overclocking and there's a lot more RAM on the RP2350.
If you want to try out HSTX to drive an HDMI monitor or display, this dongle is what you need to take HSTX out and give you a connector with proper level shifting and signal conditioning. Simply connect a 22 pin FPC cable between the Feather RP2350 and Adafruit RP2350 22-pin FPC HSTX to DVI Adapter for HDMI Displays then load DVI output code. In CircuitPython, we have support for 320x240 pixels at 16-bit color, which gets pixel doubled to 640x480. Or, if you're willing to cut some colorspace to save RAM, you can get true 640x480 resolution at 4 / 8 bit color, or 1 / 2 bit grayscale.
The eight HSTX lines are connected to the differential Clock (IO #14 & 15), Lane0 (#18, 19), Lane1 (#16, #17), and Lane2 (#12, #13) connections. I2C is connected as well so you can read the display EEPROM. Hot-plug-detect is connected to IO #11 on the Feather, but can be disconnected by cutting a jumper on the bottom. Ditto for CEC which we connect by default to IO #10.
Each order comes with one DVI adapter board. 22-pin FPC cable is not included, so be sure to get one too!
Page last edited October 07, 2024
Text editor powered by tinymce.
Pinouts
HSTX Port
At the bottom edge of the board is the 22-pin HSTX port. It accepts an FPC ribbon cable to connect to the HSTX FPC output on the Adafruit Feather RP2350 with HSTX. This port is for accessing the 8 consecutive HSTX peripheral pins (GPIO12-19), a few additional GPIO, 3.3V power and GND. The following RP2350 pins are connected to the 22-pin port:
- 3.3V - output from the 3.3V regulator.
- GND - common ground for power and logic.
- SCL/GPIO3 - The main I2C1 clock pin.
- SDA/GPIO2 - The main I2C1 data pin.
- D11/GPIO11 - Digital I/O pin 11.
- D10/GPIO10 - Digital I/O pin 10.
- D0N/GPIO19 - Digital I/O pin 19 and one of the 8 HSTX peripheral pins.
- D0P/GPIO18 - Digital I/O pin 18 and one of the 8 HSTX peripheral pins.
- D1N/GPIO17 - Digital I/O pin 17 and one of the 8 HSTX peripheral pins.
- D1P/GPIO16 - Digital I/O pin 16 and one of the 8 HSTX peripheral pins.
- CKN/GPIO15 - Digital I/O pin 15 and one of the 8 HSTX peripheral pins.
- CKP/GPIO14 - Digital I/O pin 14 and one of the 8 HSTX peripheral pins.
- D2N/GPIO13 - Digital I/O pin 13 and one of the 8 HSTX peripheral pins.
- D2P/GPIO12 - Digital I/O pin 12 and one of the 8 HSTX peripheral pins.
DVI Port
At the top edge of the board is the DVI output port. The following pins from the HSTX port are connected to the DVI port:
- CKP - TMDS clock signal pin. Connected to GPIO14.
- CKN - TMDS clock signal pin. Connected to GPIO15.
- D0P - TMDS channel 0 signal pin. Connected to GPIO18.
- D0N - TMDS channel 0 signal pin. Connected to GPIO19.
- D1P - TMDS channel 1 signal pin. Connected to GPIO16.
- D1N - TMDS channel 1 signal pin. Connected to GPIO17.
- D2P - TMDS channel 2 signal pin. Connected to GPIO12.
- D2N - TMDS channel 2 signal pin. Connected to GPIO13.
- Hot plug detect - Hot plug detection is used to detect if a device is connected or disconnected to the HDMI connector by monitoring power, plug and unplug events. Connected to GPIO11.
- CEC - Consumer Electronic Control is a one-wire bidirectional serial bus that is standardized for remote control functions. Connected to GPIO10.
DVI Port Jumpers
- CEC - on the back of the board, directly below the DVI Out silk label, is the CEC jumper. It is outlined in white on the silk and is labeled CEC. If you cut the jumper, it will disconnect the CEC signal from GPIO10.
- HPD - on the back of the board, along the bottom edge, is the hot plug detect jumper. It is outlined in white on the silk and is labeled HPD. If you cut the jumper, it will disconnect the hot plug detect signal from GPIO11.
Page last edited October 07, 2024
Text editor powered by tinymce.
CircuitPython
It's easy to use the HSTX to DVI Adapter with CircuitPython and the PicoDVI core module. This module lets you create a frame buffer to output a DVI signal on RP2040 and RP2350 boards.
Wiring
Insert a 22-pin FPC cable into the back of the Adafruit Feather RP2350. Connect the other end of the FPC cable into the HSTX to DVI adapter board.
CircuitPython Usage
To use with CircuitPython, you need to update code.py with the example script and copy the display-ruler-rgb-720p.bmp bitmap image to the CIRCUITPY drive.
Thankfully, we can do this in one go. In the example below, click the Download Project Bundle button below to download the bitmap file and the code.py file in a zip file.
Connect your board to your computer via a known good data+power USB cable. The board should show up in your File Explorer/Finder (depending on your operating system) as a flash drive named CIRCUITPY.
Extract the contents of the zip file, display-ruler-rgb-720p.bmp bitmap file and code.py file to your CIRCUITPY drive.
Example Code
Once everything is saved to the CIRCUITPY drive, you can connect the breakout to an HDMI monitor and connect your Feather to USB power. You'll see the display ruler test image display on the screen.
# SPDX-FileCopyrightText: 2024 Scott Shawcroft for Adafruit Industries
#
# SPDX-License-Identifier: MIT
import board
import picodvi
import framebufferio
import displayio
displayio.release_displays()
fb = picodvi.Framebuffer(320, 240, clk_dp=board.CKP, clk_dn=board.CKN,
red_dp=board.D0P, red_dn=board.D0N,
green_dp=board.D1P, green_dn=board.D1N,
blue_dp=board.D2P, blue_dn=board.D2N,
color_depth=16)
display = framebufferio.FramebufferDisplay(fb)
# Initialize the display in the display variable
ruler = displayio.OnDiskBitmap("/display-ruler-rgb-720p.bmp")
t = displayio.TileGrid(ruler, pixel_shader=ruler.pixel_shader)
g = displayio.Group()
g.append(t)
display.root_group = g
display.refresh()
while True:
pass
Page last edited October 07, 2024
Text editor powered by tinymce.
Downloads
Page last edited October 07, 2024
Text editor powered by tinymce.