v1.1 Released
What's changed
Clock domain crossing improvements
To account for odd edge cases users might encounter, I've used clock domain crossing techniques where appropriate:
- Audio sample moved from audio clock to pixel clock via a sync chain
- Audio clock counter wrap sent over a sync chain from audio clock to pixel clock
- TMDS coding moved from pixel clock to pixel clock x10 via a sync chain
Audio fixes
There were some TVs audio wasn't working for, because:
- The audio CTS was 1 less than it should be
- The audio sample packets are sent as soon as they are received
- Instead, they are now buffered up until 4 are ready to be sent in a single burst
A big thanks goes to @LMN128 for the many hours spent debugging this with me.
Misc bugfixes/improvements
- Vsync front porch was short because I misread CEA861-D diagrams
- Shouldn't really matter, most HDMI sinks don't really rely on these timings from what I've read
- Info frame checksum was one-off, preventing them from being accepted by displays
- Gave types to all parameters to avoid confusion
- Source product description info frame
Discussion
- HDMI 2.0 implementation is a real possibility now that I have a copy of the spec. I don't have a device capable of 4k formats, so I'm holding off on it for now. Contact me if you are interested.
- Reading E-DDC is possible according to @LMN128, who has tested it with the i2c master
- There are a bunch of additional features HDMI has, like the audio return channel and 3D video formats
- I can't implement everything, but feel free to open an issue if you need one of these
- At the very least I can give you some tips on how to add it 😃