Skip to content

Instantly share code, notes, and snippets.

@cnlohr
Created March 16, 2017 01:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cnlohr/152d4b7f35a7a76e0688ee4305d81a0b to your computer and use it in GitHub Desktop.
Save cnlohr/152d4b7f35a7a76e0688ee4305d81a0b to your computer and use it in GitHub Desktop.
HTC Vive EDID
parse-edid
Checksum Correct
Section "Monitor"
Identifier "HTC-VIVE"
ModelName "HTC-VIVE"
VendorName "HVR"
# Monitor Model Year: 2016
# EDID version 1.3
# Digital Display
# Display Physical Size not given. Normal for projectors.
Gamma 2.20
Option "DPMS" "false"
Horizsync 1-255
VertRefresh 20-120
# Maximum pixel clock is 290MHz
#Extension block found. Parsing...
Modeline "Mode 2" 25.200 640 656 752 800 480 490 492 525 -hsync -vsync
Modeline "Mode 0" 297.00 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync
Modeline "Mode 1" 297.00 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync
Modeline "Mode 3" 27.027 720 736 798 858 480 489 495 525 -hsync -vsync
Modeline "Mode 4" 297.00 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync
Modeline "Mode 5" 297.00 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync
Modeline "Mode 6" 297.00 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync
Modeline "Mode 7" 297.00 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync
Option "PreferredMode" "Mode 2"
EndSection
Edid-decode
Extracted contents:
header: 00 ff ff ff ff ff ff 00
serial number: 22 d2 01 aa 00 00 00 00 ff 1a
version: 01 03
basic params: 80 00 00 78 02
chroma info: 60 bc aa 55 40 b6 23 0c 4c 52
established: 00 00 00
standard: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
descriptor 1: 04 74 70 6a 80 b0 08 41 28 14 c2 04 7a 44 00 00 00 18
descriptor 2: 04 74 70 6a 80 b0 08 41 28 14 c2 04 7a 44 00 00 00 18
descriptor 3: 00 00 00 fc 00 48 54 43 2d 56 49 56 45 0a 20 20 20 20
descriptor 4: 00 00 00 fd 00 14 78 01 ff 1d 01 0a 20 20 20 20 20 20
extensions: 01
checksum: de
Manufacturer: HVR Model aa01 Serial Number 0
Made week 255 of model year 26
EDID version: 1.3
Digital display
Image size is variable
Gamma: 2.20
Supported color formats: RGB 4:4:4
First detailed timing is preferred timing
Established timings supported:
Standard timings supported:
Detailed mode: Clock 297.000 MHz, 122 mm x 68 mm
2160 2200 2220 2266 hborder 0
1200 1228 1230 1464 vborder 0
-hsync -vsync
Detailed mode: Clock 297.000 MHz, 122 mm x 68 mm
2160 2200 2220 2266 hborder 0
1200 1228 1230 1464 vborder 0
-hsync -vsync
Monitor name: HTC
Monitor ranges (bare limits): 20-120Hz V, 1-255kHz H, max dotclock 290MHz
Has 1 extension blocks
Checksum: 0xde (valid)
CEA extension block
Extension version: 3
17 bytes of CEA data
Video data block
VIC 01 640x480@60Hz
VIC 02 720x480@60Hz
Audio data block
Linear PCM, max channels 1
Supported sample rates (kHz): 48 44.1 32
Supported sample sizes (bits): 24 20 16
Speaker allocation data block
Vendor-specific data block, OUI 000c03 (HDMI)
Source physical address 1.0.0.0
Basic audio support
0 native detailed modes
Detailed mode: Clock 297.000 MHz, 192 mm x 120 mm
2160 2200 2220 2266 hborder 0
1200 1228 1230 1464 vborder 0
-hsync -vsync
Detailed mode: Clock 297.000 MHz, 192 mm x 120 mm
2160 2200 2220 2266 hborder 0
1200 1228 1230 1464 vborder 0
-hsync -vsync
Detailed mode: Clock 297.000 MHz, 192 mm x 120 mm
2160 2200 2220 2266 hborder 0
1200 1228 1230 1464 vborder 0
-hsync -vsync
Detailed mode: Clock 297.000 MHz, 192 mm x 120 mm
2160 2200 2220 2266 hborder 0
1200 1228 1230 1464 vborder 0
-hsync -vsync
Checksum: 0xb1 (valid)
EDID block does NOT conform to EDID 1.3!
Detailed block string not properly terminated
EDID block does not conform at all!
Detailed blocks filled with garbage
Range descriptor contains garbage
@geekmaster
Copy link

Vive data from entech monitor asset manager:
http://entechtaiwan.com/util/moninfo.shtm

Monitor
Model name............... HTC-VIVE
Manufacturer............. HVR
Plug and Play ID......... HVRAA01
Serial number............ n/a
Manufacture date......... 2016, ISO week 255
Filter driver............ None

EDID revision............ 1.3
Input signal type........ Digital
Color bit depth.......... Undefined
Display type............. Monochrome/grayscale
Screen size.............. Undefined or variable
Power management......... Not supported
Extension blocs.......... 1 (CEA-EXT)

DDC/CI................... Not supported

Color characteristics
Default color space...... Non-sRGB
Display gamma............ 2.20
Red chromaticity......... Rx 0.665 - Ry 0.334
Green chromaticity....... Gx 0.250 - Gy 0.711
Blue chromaticity........ Bx 0.139 - By 0.050
White point (default).... Wx 0.300 - Wy 0.320
Additional descriptors... None

Timing characteristics
Horizontal scan range.... 1-255kHz
Vertical scan range...... 20-120Hz
Video bandwidth.......... 290MHz
CVT standard............. Not supported
GTF standard............. Not supported
Additional descriptors... None
Preferred timing......... Yes
Native/preferred timing.. 2160x1200p at 90Hz
Modeline............... "2160x1200" 297.000 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync
Detailed timing #1....... 2160x1200p at 90Hz
Modeline............... "2160x1200" 297.000 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync

Standard timings supported

EIA/CEA-861 Information
Revision number.......... 3
IT underscan............. Not supported
Basic audio.............. Supported
YCbCr 4:4:4.............. Not supported
YCbCr 4:2:2.............. Not supported
Native formats........... 0
Detailed timing #1....... 2160x1200p at 90Hz (16:10)
Modeline............... "2160x1200" 297.000 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync
Detailed timing #2....... 2160x1200p at 90Hz (16:10)
Modeline............... "2160x1200" 297.000 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync
Detailed timing #3....... 2160x1200p at 90Hz (16:10)
Modeline............... "2160x1200" 297.000 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync
Detailed timing #4....... 2160x1200p at 90Hz (16:10)
Modeline............... "2160x1200" 297.000 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync

CE video identifiers (VICs) - timing/formats supported
640 x 480p at 60Hz - Default (4:3, 1:1)
720 x 480p at 60Hz - EDTV (4:3, 8:9)
NB: NTSC refresh rate = (Hz*1000)/1001

CE audio data (formats supported)
LPCM 2-channel, 16-bit at 32/44/48 kHz

CE speaker allocation data
Channel configuration.... 2.0
Front left/right......... Yes
Front LFE................ No
Front center............. No
Rear left/right.......... No
Rear center.............. No
Front left/right center.. No
Rear left/right center... No
Rear LFE................. No

CE vendor specific data (VSDB)
IEEE registration number. 0x000C03
CEC physical address..... 1.0.0.0
Maximum TMDS clock....... 165MHz

Report information
Date generated........... 3/15/2017
Software revision........ 2.90.0.1020
Data source.............. Real-time 0x0041
Operating system......... 6.1.7601.2.Service Pack 1

Raw data
00,FF,FF,FF,FF,FF,FF,00,22,D2,01,AA,00,00,00,00,FF,1A,01,03,80,00,00,78,02,60,BC,AA,55,40,B6,23,
0C,4C,52,00,00,00,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,04,74,70,6A,80,B0,08,41,28,14,
C2,04,7A,44,00,00,00,18,04,74,70,6A,80,B0,08,41,28,14,C2,04,7A,44,00,00,00,18,00,00,00,FC,00,48,
54,43,2D,56,49,56,45,0A,20,20,20,20,00,00,00,FD,00,14,78,01,FF,1D,01,0A,20,20,20,20,20,20,01,DE,
02,03,15,40,42,01,02,23,09,07,01,83,01,00,00,65,03,0C,00,10,00,04,74,70,6A,80,B0,08,41,28,14,C2,
04,C0,78,00,00,00,18,04,74,70,6A,80,B0,08,41,28,14,C2,04,C0,78,00,00,00,18,04,74,70,6A,80,B0,08,
41,28,14,C2,04,C0,78,00,00,00,18,04,74,70,6A,80,B0,08,41,28,14,C2,04,C0,78,00,00,00,18,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,B1

@cnlohr
Copy link
Author

cnlohr commented Mar 17, 2017

Current rpi thing I'm playing with:

# For more options and information see
# http://www.raspberrypi.org/documentation/configuration/config-txt.md
# Some settings may impact device functionality. See link above for details

# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800

# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

# Uncomment this to enable the lirc-rpi module
#dtoverlay=lirc-rpi

# Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835)
dtparam=audio=on


hdmi_pixel_freq_limit=300000000
hvs_priority=0x32ff
gpu_mem=256
hdmi_ignore_edid=0xa5000080

max_framebuffer_width=2160
max_framebuffer_height=1200
framebuffer_width=2160
framebuffer_height=1200

arm_freq=1200
gpu_freq=500
sdram_freq=500
over_voltage=5
core_freq=500

hdmi_force_hotplug=1
config_hdmi_boost=5

hdmi_drive=2  #Must be 2!
hdmi_group=2

#will do 1 eye.
#hdmi_mode=4


hdmi_mode=87
#hdmi_cvt=2160 1200 90 5 0 0 1


#hdmi_timings=<h_active_pixels> <h_sync_polarity <h_front_porch> <h_sync_pulse> <h_back_porch> <v_active_lines> <v_sync_polarity> <v_front_porch> <v_sync_pulse> <v_back_porch> <v_sync_offset_a> <v_sync_offset_b> <pixel_rep> <frame_rate> <interlaced> <pixel_freq> <aspect_ratio>
#hdmi_timings=2160 1 40 20 66 1200 0 28 2 234 0 0 0 90 0 297000000 5
#hdmi_timings=2160 1 20 40 66 1200 0 2 28 234 0 0 0 90 0 297000000 5

#hdmi_timings=2160 0 40 20 46 1200 0 28 2 234 0 0 0 90 0 297000000 5

#This is probably the closest!
#hdmi_timings=2160 1 40 20 46 1200 1 28 2 234 0 0 0 90 0 297000000 5


#Cookey idea.  didn't work
#hdmi_timings=1080 1 20 10 23 1200 1 28 2 234 0 0 0 90 0 148500000 5


#"Mode 3" 27.027 720 736 798 858 480 489 495 525 -hsync -vsync
#this is TOTALLY BUSTED
#hdmi_timings = 720 1 16 62 60 480 1 9 6 131 0 0 0 60 0 27027000 5
#hdmi_timings = 1440 1 32 122 120 480 1 9 6 13 0 0 0 75 0 74054000 5

#"Mode 2" 25.200 640 656 752 800 480 490 492 525 -hsync -vsync
#TOTALLY BUSTED (crashes)
#hdmi_timings = 640 1 16 96 48 480 1 10 2 33 0 0 0 60 0 25200000 5
#Maybe it works?  seems to also cause crashes.
#hdmi_timings = 640 0 16 64 120 480 0 1 3 16 0 0 0 75 0 31500000 1
# Crash mania
#hdmi_timings = 1280 0 32 128 240 480 0 1 3 16 0 0 0 75 0 63000000 6

@cnlohr
Copy link
Author

cnlohr commented Jun 16, 2018

SUPER GLITCHY But

with this config:

# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details

# uncomment if you get no picture on HDMI for a default "safe" mode
# hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output
hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
hdmi_group=2
hdmi_mode=87

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800

# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on


# Uncomment this to enable the lirc-rpi module
#dtoverlay=lirc-rpi

# Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835)
dtparam=audio=on


hdmi_pixel_freq_limit=400000000
hvs_priority=0x32ff
gpu_mem=256
#hdmi_ignore_edid=0xa5000080

max_framebuffer_width=2160
max_framebuffer_height=1200
framebuffer_width=2160
framebuffer_height=1200

hdmi_force_hotplug=1
config_hdmi_boost=11  #0..11

dpi_group=2
dpi_mode=87
hdmi_drive=2  #Must be 2!
hdmi_group=2  #DMT
#hdmi_mode=4
hdmi_mode=87

#hdmi_timings=
#   <h_active_pixels> 
#         <h_sync_polarity <h_front_porch> <h_sync_pulse> <h_back_porch>
#         <v_active_lines> <v_sync_polarity> <v_front_porch> <v_sync_pulse> <v_back_porch> <v_sync_offset_a> 
#	  <v_sync_offset_b> <pixel_rep> <frame_rate> <interlaced> <pixel_freq> <aspect_ratio>

#hdmi_timings=2160 1 40 20 66 1200 0 28 2 234 0 0 0 90 0 297000000 5

#hdmi_timings=2160 1 20 40 66 1200 0 2 28 234 0 0 0 90 0 297000000 5
#hdmi_timings=2160 0 40 20 46 1200 0 28 2 234 0 0 0 90 0 297000000 5
#hdmi_timings=2160 1 40 20 46 1200 1 28 2 234 0 0 0 90 0 297000000 5
#hdmi_timings=2160 1 40 20 46 1200 1 28 2 234 0 0 0 90 0 297000000 5
#hdmi_timings=2160 1 40 20 46 1200 1 28 2 234 0 0 0 89 0 297000000 5

#OK NEW
#hdmi_timings=2160 1 40 20 46 1200 1 28 2 234 0 0 0 90 0 297000000 5



#Modeline "Mode 3" 27.027 720 736 798 858 480 489 495 525 -hsync -vsync
hdmi_timings=720 1 16 62 60 480 1 9 6 36 0 0 0 60 0 27027000 5

#x11 modeline: 297.000 2160 2200 2220 2266 1200 1228 1230 1464 -hsync -vsync

This will set the mode.
vcgencmd hdmi_timings 2160 1 40 20 46 1200 1 28 2 234 0 0 0 85 0 295000000 5 && tvservice -e "DMT 87";sleep .5; fbset -depth 8 && fbset -depth 16; sleep .5; cat /dev/urandom > /dev/fb0

@cnlohr
Copy link
Author

cnlohr commented Jun 16, 2018

One other note: You cannot operate the Vive HMD without jamming the system into full speed mode. It seems the default raspberry pi 3b+ CPU Frequency is 1.4GHz, and the core is 400MHz. The core really should be higher.

Add

core_freq=500
sdram_freq=600
sdram_schmoo=0x02000020

to your config.txt

and then at boot...

vcgencmd hdmi_timings 2160 1 40 20 46 1200 1 28 2 234 0 0 0 90 0 297000000 5 && tvservice -e "DMT 87"
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

You can measure performance based on char here: https://elinux.org/RPI_vcgencmd_usage

@cnlohr
Copy link
Author

cnlohr commented Jun 23, 2018

More FYIs - I am trying to use the X thing since it seems with the frame buffer all draw calls take 30+us.

Install libgles2-mesa-dev cmake libglm-dev
Use raspi-config to install full kernel acceleration.

@djloot
Copy link

djloot commented Mar 13, 2019

Any update on this? I got a dual OLED HDMI display and I can get them to do 1080x1200@90fps on a Raspberry PI 3B+ but once I try to go to 2160x1200@90fps I only get half a screen. I assume it cannot be done but is there a device with a similar form factor that can do it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment