Email or username:

Password:

Forgot your password?
Lukas

Since everyone here seems to love cursed technology, I made a chart rating various interfaces by their perceived cursedness.

Some like 10G BASE-T have a reason for being cursed, whereas others like USB PD not so much.

Any additions?

An X/Y chart with the X axis labeled 'fast [bit/s]' and the Y axis labeled 'cursed'. On the X, axis there are log-spaced ticks from 100k to 10G.

The chart area is filled with various interface names, listed in order of ascending cursedness:

100k Range:
UART, TI Calculator link cable, USB PD

1M/10M Range:
SPI, CAN, USB, FS

100M/1G Range:
USB 3.0, 100Base-T, D-PHY, 1000BASE-T, USB HS, HEC, MHL

10G Range:
PCIe, USB4 v2, 10G BASE-T
96 comments
Jeroen Massar

@karotte @nblr Infiniband.... Ethernet.... DOCSIS..... ;)

Jana

@karotte Canon EF-S Lens Protocol. SPI, but with Open Drain IO and Clock-Stretching :3 it's mildly horrifying. What's worse, an STM32 SPI peripheral can kind of speak that protocol

kloenk

@janamarie @karotte does the STM32 speak that by design or accident?

F4GRX Sébastien

@janamarie @kloenk @karotte the stm32 can also speak SWP which is a full duplex protocol on one wire using voltage modulation in a direction and current modulation in the other one, and is only specifically used by some sim cards NFC interfaces yet they did some silicon IP just for it.

speed low, curse high.

Leah Neukirchen

@karotte UART may look simple but is cursed in practice.

Lukas

@leah The only cursed experience I had with UART was when implementing a soft UART transmitter, didn't leave enough time between two bytes and sometimes the receiver and the protocol decoder in my scope got confused about the byte boundaries. Adding a couple bits of idle time between two bytes fixed it.

Trammell Hudson

@karotte @leah sometimes serial stop bits are necessary for the physical UART mechanism

Marcus Müller

@karotte @leah in practice: many of the very established UART controller IP cores simply have state machine bugs – Cadence, things that ended up in FTDI converters, Zynqs, …
UART also is extremely cursed in concept, with the idea that sample something happening on a physically noisy channel and then go ahead with nothing but at most a single parity bit and act as if it's reliable – and that although you're not even sure where the symbol transitions happened. UART is very very cursed.

kleines Filmröllchen

@leah @karotte UART is less of a standard than SPI or I2C so it is definitely cursed

Leah Neukirchen

@filmroellchen @karotte it's a fine standard that almost noone implements

Domi.UwUException | this nickname is now extra long to prove a point, hi linus yes ~~it runs netware

@leah @filmroellchen @karotte it’s modified RS-232, with the only important change being lower voltage levels and a lot of removed pins

i’d argue that it’s at least based on a standard ^^

MikeTangoшo

@karotte use a comic font and it could be an xkcd

Chip

@karotte How about data over power line stuff? That’s pretty cursed. en.wikipedia.org/wiki/IEEE_190

Or the CCS Combo plug, which is cursed at both the physical and data layers: en.wikipedia.org/wiki/Combined

Leon

@karotte Any reason why there are no wireless protocols in there? Bluetooth is very much cursed, with all its layering and profiles...

Lukas

@lschuermann Wanted to keep it a fair game for the wired protocols. Even though some of the wired protocols (looking at 10GBASE-T) start to look a lot like RF.

Leon

@karotte Hey, now we just need appropriate transceivers in end user devices and a badly shielded cable can replace an access point for cheap!

Leon

@karotte (I know that there are the special "leaky coax" cables used as antennas that are pretty much just that)

niconiconi

@lschuermann@chaos.social @karotte@chaos.social More like "we just need a badly shielded cable can replace [fiber optics] for cheap!"

Lucy 🧙🏼‍♀️🦇

@karotte I don't understand how USB 3.0 and PCIe are less cursed than CAN.

And how I2C is more cursed than CAN.

Leon

@rappet @karotte Oh, I2C, the horrors. I once spent two weeks full time debugging an issue where we'd misconfigure PLLs from a reputable manufacturer via I2C that was bridged over a debug interface.

We ended up debugging this with an oscilloscope to see a tiny change in the pull down strength of the PLL which eventually led us to figure out that the manufacturer actually implemented an SMBus without telling anyone, along with a non-configurable and undocumented SMBus timeout.

Leon

@rappet @karotte I2C is all simple and great when things work, but when they don't, most of the time I just want to throw the whole design away.

This was not even multi-primary, or devices with fixed addresses that collide or any of the other fun stuff.

Peter Bindels

@lschuermann @rappet @karotte Yeah, I'm pretty much on the I2C is more cursed than CAN side there.

Lukas

@rappet Things that make CAN somewhat cursed:

- Other than every (?) other differential signalling standard, it uses 0V and a positive voltage rather than a negative/positive voltage
- Bit-level arbitration

USB 3.0 and PCIe on the other hand are straightforward 8B/10B (or other) coded data down unidirectional lanes.

Lucy 🧙🏼‍♀️🦇

@karotte aah cursed on the electrical level xD

Yes I can agree!

Wolf480pl

@karotte idk if 1-wire is more or less cursed than I²C, but I think it'd be a nice addition

Lukas

@wolf480pl Can you get it stuck in a state that's impossible to get out of in-band?

Wolf480pl

@karotte I don't know :/
Can you do that with I²C?

Lukas

@wolf480pl I was never unlucky enough to have this problem for myself, but most advice for stuck I²C busses seems to be 'send some number of clock pulses and hope for the best'. If that doesn't work, power cycle your system.

Dave W

@karotte no notes, A+ analysis. especially USB-PD, which I'm pretty sure is controlled by a tiny angry cat in every cable

nachtpf03tchen

@karotte power Extension to USB-c cable i wonder what happens if u use power line lan on it: eldritch.cafe/@nachtpfoetchen/

Domi.UwUException | this nickname is now extra long to prove a point, hi linus yes ~~it runs netware

@karotte quad SPI, or SD/MMC signalling (which despite being close to SPI, in some modes can also grow legs and become DDR)

should be both a bit faster and much more cursed

AMS

@karotte Could be worse, could be 10GBase-T1 (802.3ch)

editor note: Why the hell does my phone try to correct that to 10Base-T1?

site reliability erin

@karotte since the copper ethernet standards are here, we can’t forget about QSFP and its many amalgamations for 40/50/100/200/400/800 Gbit speeds! Infiniband and Fibre Channel get honorary mentions too

Bfritz0815

@karotte gibrs nich n rfc für Internet over avian carrier? Das is sicher schön cursed

R

@karotte since you've got the TI calculator protocol there, what about other proprietary-serial-things?

* Sega Dreamcast Maple
* Nintendo Joybus

Phil Ashby :marmite: 🍵

@r @karotte May we also add semi-standard car interfaces before CAN? OBD II in general is a horrid mess!
obdexperts.com/obd-ii-protocol 😁

rhw

@karotte every couple years i look for an adapter to use the Ethernet channel on HDMI, but even though it’s in the spec, i am pretty sure not one company has ever implemented it

Lukas

@rhw That's also my impression. The only thing that 'supports' HEC are HDMI cables.

Toble Miner | tsys

@karotte

FireWire 🥺
SATA 👻
IrDA 🥰 (if that counts)

F4GRX Sébastien

@karotte I dont agree, the ticalc protocol is MUCH MORE cursed than i2c !!

Successive Approximation Register

@f4grx @karotte idk, it's a self-synchronizing interface with bit-level flow control, and it achieves this in a very simple way, much less cursed than I2C's clock stretching imo

F4GRX Sébastien

@dlatchx @karotte yeah I know, so ok I guess the cursedness appreciation is not the same for everyone :)

Sam Clemente

@karotte Okay but we need to be calling 10/100 Fast Ethernet like God (Al Gore) intended

Graham Spookyland🎃/Polynomial

@karotte RS-485, low speed low cursedness (termination required but other than that it's a pretty simple multidrop bus)

PoE++, full speed mid-high cursedness (isolation requirements, complicated negotiation, generally annoying to design for)

Graham Spookyland🎃/Polynomial

@karotte Powerline network - near max cursed, somewhere between 10M and 200M depending on wiring and luck and the phase of the moon

Marcus Müller

@gsuberland @karotte I must admit 10GBase-T feels about as cursed as 1OOOBase-T; less abuse of twisted pair to microwave frequencies, none of the original PAM-5 encoding, and more sensible FEC design, imho. I wonder where people would put V.90 – there's so much interesting stuff you have to pry from the devil's hot fingers in order to do 56 kb/s over a truly analog line, with a draconic bandwidth and power limit.

Andrew Zonenberg

@funkylab @gsuberland @karotte What about Thunderbolt? A huge pain in the neck, but super fast.

And 10Gbase-R / 25Gbase-R (exponentially faster and not all all cursed)

Marcus Müller

@azonenberg @gsuberland @karotte I'm not very familiar with that, but I think the PHY is relatively similar to modern PCIe, so that would make it relatively uncursed. But the USB4 encapsulate-everything-in-everything has potential for much cursing, will see how that turns out!

Lukas

@funkylab

@azonenberg @gsuberland the cursed thing about USB4v2 is that it uses PAM3 on the physical layer.

Andrew Zonenberg

@karotte @funkylab @gsuberland Yes, PAM3 is annoying.

Especially because ~nothing COTS can do PAM3 so there's no hope of speaking it with an FPGA transceiver etc.

jaseg

@azonenberg @karotte @funkylab @gsuberland just out of curiosity, what stops you from configuring the transceivers to PAM-4 and then just not using either the top or the bottom level? Do you get into trouble with level symmetry?

Andrew Zonenberg

@jaseg @karotte @funkylab @gsuberland For TX, I think it would work.

For RX, I think you'd run into problems with asymmetry and the baseline wander correction putting your thresholds in the wrong place.

Andrew Zonenberg

@jaseg @karotte @funkylab @gsuberland (also even PAM4 transceivers are really rare, only like the biggest virtexes have them right now)

Marcus Müller

@azonenberg @gsuberland @karotte The low-speed optical modes like that are relatively OK, it's basically linecode directly onto a laser that's either on or off, or PAM4. "infinite bw" assumption, pretty much. The actual long-distance (read: transatlantic) and high-rate (read: Tb/s) stuff is where the interesting stuff happens; 90 Gbd coherent IQ dual-pol xceivers, non-equal-prob'lity symbols and/or non-regular constellation diagrams, nonlinear-channel equalizers, FEC codewords of scary lengths…

Marcus Müller

@azonenberg @gsuberland @karotte ( … and that's before you learn about the fact that in long-haul connections, you need to put in as much power as you can to get good OSNR at the output, but not as much that your mutual information per symbol drops due to phase smear due to fiber medium nonlinearity at high E-field strengths, but still want to do wavelength multiplex with only small guard bands between the carriers, but of course wavelengths' powers will mutually cause nonlin./phase distortion)

Andrew Zonenberg

@funkylab @gsuberland @karotte Oh I bet fiber gets cursed when you go fast enough.

But at 10/25G its easy.

Darrell Harmon

@azonenberg @funkylab @gsuberland @karotte I'd argue the FEC layer in 25GBASE-R is cursed due to all the transcoding and gearboxes to convert 80 64b66b codewords to one 5140b block to append the 140b parity resulting in the same 5280 bits. It's not pretty.

25GBASE-CR-S is nice and pure like 10GBASE-R but the FEC layer is required in everything else 25GBASE-R.

The FEC itself isn't cursed just the wrapper around it.

roukemap

@dlharmon @azonenberg @funkylab @gsuberland @karotte
Unfortunately people can and do try to run 25G without FEC in the wild (and not short range twinax) . And then there is the firecode vs rsfec question if you do run FEC. The whole history of the 25G consortium, followed by IEEE standardization also adds another layer of cursedness.

Andrew

@karotte the USB PD data channel is faster than I2C?

...why?

Andrew

@karotte @foone keyboard that communicates over the USB-PD CC pin when

Fritz Adalis

@karotte @catsalad
Add a third dimension for year of release?

RS-232 and 422?

artemist

@karotte where does 10gbase-sr go?
Seems like the least cursed high speed thing I can think of (I think it's basically "Ethernet frame + 64b/66b + sync word, stuffed over a laser")

The Penguin of Evil

@karotte I take it that fibrechannel is somewhere off the top of the chart 8)

Cegorach

@karotte @clonejo so… how about IRDA?

oh! Bluetooth! the most cursed of them all!

at least until matter/thread will take that throne

Claudius

@karotte that USB PD and USB PCIe occupy opposite sides is really surprising 🤣

John Ripley

@karotte Would swap PCIe and USB4 if you restricted USB4 to thunderbolt mode only. PCIe is a 7 layer dip where only the top 2 layers are edible.

trystimuli
@karotte GPON, xPON, and NG-PON.

GPON, dispite using fiber where you can separate channels by wavelength and appropriate filters, uses time division multiplexing and optional encryption, and is asymmetrical to boot. xPON does the same thing, but faster on a different wavelength, and the common version is even more asymmetrical. NG-PON introduces multiple wavelengths, but keeps the TDMA - essentially being 4 xPON links in parallel and depends on eletrically tuneable lasers in the client equipment.

10GBASE-LR as the non-cursed version of 10GBASE-T over single mode fiber.
@karotte GPON, xPON, and NG-PON.

GPON, dispite using fiber where you can separate channels by wavelength and appropriate filters, uses time division multiplexing and optional encryption, and is asymmetrical to boot. xPON does the same thing, but faster on a different wavelength, and the common version is even more asymmetrical. NG-PON introduces multiple wavelengths, but keeps the TDMA - essentially...
Sam Oldman 🐀

@karotte I'm happy to see that I²C is only somewhat cursed.

puppy

@karotte I have no additions, but I'd like to argue that PCIe should be moved much higher on the "cursed" axis: weirder.earth/@puppy/113847743

Ignas Kiela

@karotte@chaos.social I'll be a contrarian and will say that USB PD has plenty of reasons to have weird stuff in it.

E.g. it's physical encoding is very resilient to mismatched clock speeds between different sides, it has a tolerance of like +-20% for the clock speed, which even the simplest ring oscillators in silicon should meet - which allows it to be very very cheap to implement.

Nullstring 🏴‍☠️

@karotte usb pd is to silly to be cursed, there should be some kind of measurement for silly on here

SnowFox

@karotte I3C, available in SDR, DDR, two different types of ternary, and a new "bulk transport" mode that I can't seem to find anything about!

IIRC it also has a recommended "the bus has been idle for too long in the middle of a transaction so we'll assume it got stuck and unstick it" timeout.

Thomas Guyot-Sionnest

@karotte Reading about 10GBASE-T on Wikipedia: "10GBASE-T has a slightly higher latency (2 to 4 microseconds) ..."

WTH?! I've seen applications respond faster than this over TCP, as measured on the wires outside the server using optical taps!

David JONES

@karotte irda. It's UART but optically cursed.
TOSLINK? Barely cursed at all, unless you try and make it cross the Atlantic.

Grimmauld

@karotte might make sense to add SATA, Isa and pci (no e)

Григорий Клюшников

How do you determine the cursedness? Is it how hard the interface is to implement, or how the world will perceive you trying to bit-bang it, or some particular quirks that stand out but are needed for backwards compatibility or other reasons?

Lukas

@grishka Mostly unexpected quirkiness when reading about it.

For example, MHL superimposing clock and data using common mode/differential signalling.

Go Up