Article makes fun of how slow i2c is compared to the super high speed pairs next to it on HDMI plug.
Well, please note that there is a bus that is literally a thousand time slower than i2c on that same connector. It's CEC. Contrary to i2c it only occupies one wire rather than two though.
CEC, which is used mainly to power TV on/off or switch sources has a whopping bandwidth of 400bps. No missing multiplier.
Maximum device name is 16B. If you have a TV, a tvbox and a game console, simply asking the name of those devices can take more than a second.
I'm in the process of shortening my product's CEC name, in order to reduce congestion on the bus.
Mainline Linux CEC developer jokes that Voyager 1 which is on the other side of solar system, made 40 years prior to CEC, is faster than CEC.
Voyager is so far away that it's estimated data rate is only a hundred or so bps.[0] So CEC is actually faster now than Voyager! New Horizons still has the edge with an estimated kilobit/sec.
EDIT: I was partially correct. It seems Voyager can transmit at up to 1.4 kbps for certain things.[1]
> CEC, which is used mainly to power TV on/off or switch sources
CEC is much more than that as it allows the use of a single remote instead of two or more, which is super handy; the TV remote sends its commands through the HDMI cable to the active device, so if you switch from TV to an external source like PVR or media center on the TV remote, if that device supports CEC (Kodi on a Raspberry PI does that) you can control it seamlessly through the TV remote. I recently switched my media center from a Raspberry PI 4 to an older (but much faster) unlocked Chromebox whose video chipset doesn't support CEC, so I had to connect an external interface that does USB to CEC conversion. Unfortunately there is only one manufacturer of such interface, which means it's not that cheap.
https://www.pulse-eight.com/p/104/usb-hdmi-cec-adapter
You sound like you know a lot about the HDMI CEC spec. Do you have any insight as to why CEC implementations are often buggy on so many devices? I.E. "one touch play" turning on unintended devices in addition to your display and receiver.
in my experience it doesn't even do that very well. I tried getting a raspberry pi to power off an attached display and support of on/off seems to be hit or miss and specialized.
I suspect it isn't supported because it will commoditizes the device, when manufacturers really want their own protocol that connects only to their own products.
much better sales of acme products if an acme tv can only connect to an acme soundbar and an acme dvd player using acme protocols.
I wish they'd made CEC a little more powerful. I like that I can control my AV receiver's volume with the TV remote, but I don't like that I can't see what the volume is actually set to on the TV. Even if I had a receiver that could overlay onto 4K video, that wouldn't help for the cases where I'm feeding audio back from the TV to the receiver.
Uh, oh. The work project I'm working on uses an OLED display that uses an I2C interface. And I happen to have a spare one sitting on my desk. And I'm no electrical engineer, so let's see how fast I smoke this thing. :-)
Should I succeed, TFA author will not have the worst HDMI display ever, as the one we're using is a two-line display looking something like this (it can do rudimentary graphics, though; we display a company logo at boot):
OT: I'm idly curious why that display (photo: https://www.mouser.com/images/vishay/hd/O020N002ALPP5N000A_t...) has what appears to be a detached single vertical column of presumably-unusable pixels on each side of the active area. Obviously to do with manufacturing, but... ?ˀ?
(I'm also curious about the "Pricing: Request a quote" bit. Doesn't seem to be "not for new designs", but does have a bit about "Factory special order", so perhaps this is just an indication of unusually limited supply or something.)
I love this. What is it about pointless technical projects that are sometimes so alluring? I wonder if it's the removal of secondhand stress since there is no 'meaningful' success criteria.
Yes, I think removing the "must do a thing" component confounds macro-scale sensible classification and measurement of the discrete work that is being done. It's possible for manglement to see that effort is being invested, but the significance of the result cannot be perceived due to lack of resonance with the engineering mindset. This makes it possible to personally take ownership of engineering agency and may be the core reason engineers survive at all because they are able to take and own personal responsibility for their own learning.
Knowing it is not possible for others who don't "get" what we're doing to usefully measure or judge our work in turn disengages the "do thing in anger" stress associated with captive/acute focus, and (in ideal, spherical-cow-like situations providing infinite time) enables unbounded, open-ended introspection into reinforcing the mental solution-finding capacity within the domain in question. (In practice, infinite time would quite harmful as it would provide more space than our attention spans could fill; the practical ideal may be to find the right balance between work (acute focus) and zoning out, which might be trackable by identifying the precise points our ego lags slightly behind, but is cognizant of, our as-yet unused physical capacity.)
Being able to engage in this introspection is critical important for learning: it's almost like dreaming, in absence of any singular focus on finding an optimal solution to a given problem within a limited time frame. This makes it possible to pay attention to the problem-solving network as a whole, cross-reference and merge fragmented ideas that have developed independently, and drift toward blurrier edges of understanding to help reinforce them (ever noticed how the things you instinctively find super interesting that you really want to dive into - and often the itches you want to scratch - all depend on skills that happen to be right at the point of establishing minimum-viable cohesion and fundamentally clicking into place? We wander aimlessly... but we don't!).
Well, another "pointless" project this guy made eventually became a product, the flash synth. It's a tiny synthesizer that fits in a MIDI DIN5 plug. I own one because I love small and weird synths. It actually sounds pretty nice!
Same here, I thought this was great. Even though I have been in the "computer field" for a loong time, there is still so much to learn! I love articles like this.
This design is devilishly clever, but a tad misleading. It's not really an HDMI display notwithstanding that it is a display that plugs into an HDMI port. HDMI has an embedded i2c bus, and this project uses that to send images to the display. That's why you need a layer of software (xrandr) to translate images that the system produces into i2c.
This isn't so much an HDMI display as an I2C display utilizing the DDC channel in the HDMI interface as the I2C bus. I've seen folks utilizing this on the Raspberry Pi as a generic I2C bus as well.
What great timing. I've rearranged my desk and have trouble fitting a second monitor next to my ultrawide + big speakers, and I've been looking for a smaller monitor.
This might be a tad too small, but worth considering!
20 years ago, we came across this tiny CRT display. I think it 4 X 5 inches. We pranked a coworker with it, replacing her large display with this tiny thing.
And left a note explaining how the black and white display was an upgrade. :-)
I recently learned about evdi, an out of tree Kernel module that can add as many virtual outputs as you want. Ideal for things like this, or where you'd normally use a dummy plug.
It's unfortunate it wasn't accepted in-tree because while it was initially developed for a specific commercial product, I do think it has the potential to be generically useful.
The ability to conjure up a display "in software" & then just have the rest of the system automatically treat it as any other physical display is pretty powerful.
There's a couple of projects on my long "projects to do" that would make use of it...
I'm sure that those with a lot more hardware experience than me have the intuition to make guesses like this but I was surprised at:
>You have to register to download the HDMI spec which is more effort than I have for this, but the Hot Plug Detect pin has a pretty descriptive name. I guessed that this either has to be pulled up or pulled down to signal that a cable is connected. Sticking a 20K resistor to the 5V pin seemed to do the trick. With the oscilloscope, we can now see activity on the SCL/SDA lines when it's plugged into the laptop.
Is it really not that concerning to just guess what amperage will/won't fry something? I mean, you could test from very high resistances downwards, but you might overshoot, right? Or is there an assumption that the hardware on either end will provide the appropriate resistance, in this case?
Unrelated but wanted to ask here since this forum may have the knowledge.
Recently I bought one of those 1) USB-C 4-in-1, 2) USB-C 7-in-1 (Anker) to attach an external monitor with HDMI. When connecting to a laptop is there details how to retrieve more details of all the capabilities and ports?
What might also be some easy recommended way to start understanding how something like this works. To start, just sending a "high/low" signal to a data pin either straight connection into HDMI port, USB port as a direct connection (and how about when using a multi-port)?
As far as I know, it isn't really rendered by HW, but composited in HW.
GPUs usually have multiple "Hardware planes" that are composited together in hardware before sending the signal. The OS is free to put whatever it wants there. Most HW include a designated "cursor plane", but it could be used to display whatever.
IIRC a minimum of 3 HW planes is specified somewhere, it could be the Wayland protocol, or the Linux Direct Rendering Manager API. Some devices can have less though. That would be the case for that display, which could use an actual framebuffer driver (although planes could be emulated).
You can thus have a layer for the background, one for the windows, and one for the cursor, and avoid re-painting too often, even though it should be pretty cheap for GPU-accelerated surfaces (like with compositors that rely on OpenGL).
You don't need to go through all the steps involving HDMI. Linux can create framebuffers on I2C/SPI displays like this. Many years ago, I connected two to a Beaglebone and it ran Emacs just fine. Much device tree hacking is involved, though, unfortunately.
HDMI is a pretty crazy protocol. CEC, HDMI, and then on top of that a dedicated hot plug detect? Is all this really needed? Can't I2C do everything?
They could use a 1M pull down on SDA, and pull it up at the display side instead of the host side, and have that be hot plug detect, and then just use i2c for control as well.
Very cool hack indeed!
One thing I learned from this is that having an HDMI port gives you a free I2C port on top as well, as long as you have an old HDMI cable lying around to cut open.
Small note on using these OLEDs with 5V:
Typically they expect 3.3V Vcc and logic levels, although almost all of them seem to work just fine with 5V. In my experiments with a regular 5V Arduino some OLED modules made weird coil whining noises, I presume this is from the charge pump circuitry. Driving them with 3.3V as specified removed the coil whine completely.
[+] [-] phh|4 years ago|reply
Maximum device name is 16B. If you have a TV, a tvbox and a game console, simply asking the name of those devices can take more than a second. I'm in the process of shortening my product's CEC name, in order to reduce congestion on the bus.
Mainline Linux CEC developer jokes that Voyager 1 which is on the other side of solar system, made 40 years prior to CEC, is faster than CEC.
Edit: Sorry for the atrocious original formating
[+] [-] colejohnson66|4 years ago|reply
EDIT: I was partially correct. It seems Voyager can transmit at up to 1.4 kbps for certain things.[1]
[0]: https://space.stackexchange.com/questions/24338/how-to-calcu...
[1]: https://voyager.jpl.nasa.gov/mission/spacecraft/
[+] [-] squarefoot|4 years ago|reply
CEC is much more than that as it allows the use of a single remote instead of two or more, which is super handy; the TV remote sends its commands through the HDMI cable to the active device, so if you switch from TV to an external source like PVR or media center on the TV remote, if that device supports CEC (Kodi on a Raspberry PI does that) you can control it seamlessly through the TV remote. I recently switched my media center from a Raspberry PI 4 to an older (but much faster) unlocked Chromebox whose video chipset doesn't support CEC, so I had to connect an external interface that does USB to CEC conversion. Unfortunately there is only one manufacturer of such interface, which means it's not that cheap. https://www.pulse-eight.com/p/104/usb-hdmi-cec-adapter
[+] [-] babypuncher|4 years ago|reply
[+] [-] m463|4 years ago|reply
in my experience it doesn't even do that very well. I tried getting a raspberry pi to power off an attached display and support of on/off seems to be hit or miss and specialized.
I suspect it isn't supported because it will commoditizes the device, when manufacturers really want their own protocol that connects only to their own products.
much better sales of acme products if an acme tv can only connect to an acme soundbar and an acme dvd player using acme protocols.
[+] [-] ziml77|4 years ago|reply
[+] [-] anthk|4 years ago|reply
[+] [-] mikestew|4 years ago|reply
Should I succeed, TFA author will not have the worst HDMI display ever, as the one we're using is a two-line display looking something like this (it can do rudimentary graphics, though; we display a company logo at boot):
https://www.mouser.com/ProductDetail/Vishay-Dale/O020O002ALP...
[+] [-] exikyut|4 years ago|reply
(I'm also curious about the "Pricing: Request a quote" bit. Doesn't seem to be "not for new designs", but does have a bit about "Factory special order", so perhaps this is just an indication of unusually limited supply or something.)
[+] [-] dylan604|4 years ago|reply
[+] [-] 58x14|4 years ago|reply
[+] [-] ncmncm|4 years ago|reply
[+] [-] munificent|4 years ago|reply
Yup, a key component of the sensation of "play" is low stakes.
[+] [-] micromacrofoot|4 years ago|reply
[+] [-] exikyut|4 years ago|reply
Knowing it is not possible for others who don't "get" what we're doing to usefully measure or judge our work in turn disengages the "do thing in anger" stress associated with captive/acute focus, and (in ideal, spherical-cow-like situations providing infinite time) enables unbounded, open-ended introspection into reinforcing the mental solution-finding capacity within the domain in question. (In practice, infinite time would quite harmful as it would provide more space than our attention spans could fill; the practical ideal may be to find the right balance between work (acute focus) and zoning out, which might be trackable by identifying the precise points our ego lags slightly behind, but is cognizant of, our as-yet unused physical capacity.)
Being able to engage in this introspection is critical important for learning: it's almost like dreaming, in absence of any singular focus on finding an optimal solution to a given problem within a limited time frame. This makes it possible to pay attention to the problem-solving network as a whole, cross-reference and merge fragmented ideas that have developed independently, and drift toward blurrier edges of understanding to help reinforce them (ever noticed how the things you instinctively find super interesting that you really want to dive into - and often the itches you want to scratch - all depend on skills that happen to be right at the point of establishing minimum-viable cohesion and fundamentally clicking into place? We wander aimlessly... but we don't!).
[+] [-] gorjusborg|4 years ago|reply
Other than personal enjoyment.
[+] [-] dimatura|4 years ago|reply
[+] [-] drewlander|4 years ago|reply
[+] [-] lisper|4 years ago|reply
[+] [-] utopcell|4 years ago|reply
[+] [-] technothrasher|4 years ago|reply
[+] [-] hunter2_|4 years ago|reply
[+] [-] v-yadli|4 years ago|reply
Either the DDC is running at very low speed, or... the I2C in HDMI in this laptop is actually a software thing?
[+] [-] madeofpalk|4 years ago|reply
This might be a tad too small, but worth considering!
[+] [-] blamazon|4 years ago|reply
https://youtu.be/8UbVgUFfN8U
[+] [-] ironmagma|4 years ago|reply
https://www.youtube.com/watch?v=t4CRCJUmWsM&list=PLsMUa0l1PW...
[+] [-] stretchwithme|4 years ago|reply
And left a note explaining how the black and white display was an upgrade. :-)
[+] [-] stretchwithme|4 years ago|reply
[+] [-] InCityDreams|4 years ago|reply
[+] [-] gotaquestion|4 years ago|reply
I don't know any laptops that have native I2C output w/o a USB converter.
[+] [-] iforgotpassword|4 years ago|reply
[+] [-] follower|4 years ago|reply
The link for anyone interested: https://github.com/DisplayLink/evdi
It's unfortunate it wasn't accepted in-tree because while it was initially developed for a specific commercial product, I do think it has the potential to be generically useful.
The ability to conjure up a display "in software" & then just have the rest of the system automatically treat it as any other physical display is pretty powerful.
There's a couple of projects on my long "projects to do" that would make use of it...
[+] [-] bskrobisz|4 years ago|reply
>You have to register to download the HDMI spec which is more effort than I have for this, but the Hot Plug Detect pin has a pretty descriptive name. I guessed that this either has to be pulled up or pulled down to signal that a cable is connected. Sticking a 20K resistor to the 5V pin seemed to do the trick. With the oscilloscope, we can now see activity on the SCL/SDA lines when it's plugged into the laptop.
Is it really not that concerning to just guess what amperage will/won't fry something? I mean, you could test from very high resistances downwards, but you might overshoot, right? Or is there an assumption that the hardware on either end will provide the appropriate resistance, in this case?
[+] [-] unknown|4 years ago|reply
[deleted]
[+] [-] dghughes|4 years ago|reply
[+] [-] jzer0cool|4 years ago|reply
Recently I bought one of those 1) USB-C 4-in-1, 2) USB-C 7-in-1 (Anker) to attach an external monitor with HDMI. When connecting to a laptop is there details how to retrieve more details of all the capabilities and ports?
What might also be some easy recommended way to start understanding how something like this works. To start, just sending a "high/low" signal to a data pin either straight connection into HDMI port, USB port as a direct connection (and how about when using a multi-port)?
Thanks!
[+] [-] mjlee|4 years ago|reply
Ah! That perhaps explains why often the cursor moves around just fine when other elements of the stack have completely given up.
[+] [-] MayeulC|4 years ago|reply
GPUs usually have multiple "Hardware planes" that are composited together in hardware before sending the signal. The OS is free to put whatever it wants there. Most HW include a designated "cursor plane", but it could be used to display whatever.
IIRC a minimum of 3 HW planes is specified somewhere, it could be the Wayland protocol, or the Linux Direct Rendering Manager API. Some devices can have less though. That would be the case for that display, which could use an actual framebuffer driver (although planes could be emulated).
You can thus have a layer for the background, one for the windows, and one for the cursor, and avoid re-painting too often, even though it should be pretty cheap for GPU-accelerated surfaces (like with compositors that rely on OpenGL).
[+] [-] makach|4 years ago|reply
[+] [-] jrockway|4 years ago|reply
[+] [-] eternityforest|4 years ago|reply
They could use a 1M pull down on SDA, and pull it up at the display side instead of the host side, and have that be hot plug detect, and then just use i2c for control as well.
[+] [-] kimburgess|4 years ago|reply
[+] [-] epiecs|4 years ago|reply
[+] [-] Unit520|4 years ago|reply
Small note on using these OLEDs with 5V: Typically they expect 3.3V Vcc and logic levels, although almost all of them seem to work just fine with 5V. In my experiments with a regular 5V Arduino some OLED modules made weird coil whining noises, I presume this is from the charge pump circuitry. Driving them with 3.3V as specified removed the coil whine completely.
[+] [-] alana314|4 years ago|reply