Interesting that no one has brought up the Commodore 1541's disaster of an interface. (The following summary is from memory, hopefully I don't get too many details wrong).
Commodore started early on with the (comparatively sane) choice of HP-IB (later "GPIB", later "IEEE-488") for their peripheral bus on the early machines. But then, the story goes, they got in trouble at one point because their single-source connector vendor ran out of stock, so Jack Tramiel freaked out and directed the VIC-20 folks to junk HP-IB and use a cheaper connector. So they had the bright idea of using the shift register on the MOS VIA chip to clock the HP-IB protocol bytes in via a serial connection on a DIN connector (pretty much the same choice Atari had made with their SIO bus).
So the PCBs went to manufacture, got stuffed, the software guys sat down to finish the driver work, and ... oops. The VIA had a bug: a hardware race led to dropped (duplicated?) bits if a clock edge landed too close to a read request. So rather than fix the problem, the VIC folks burried it: they used the same hardware interface, but drove the serial transmission in software via bit banging instead. Needless to say, that's a whole lot slower than the shift register that was intended in the design.
But it gets worse: MOS, of course, fixed the bug for the chipset used in the Commodore 64. But apparently compatibility with the old VIC drives was more important than fixing a huge performance problem, so Commodore made the decision to ship the 64 with the same dumb software serial implementation.
And it gets still worse: unlike the previous box, the 64's VIC-II chip needed to do sprite DMA in bursts, and would hang the CPU bus while it did it. So the CPU would freeze up for a dozen cycles or when this happened, and that was too long for the bit-banging routines from the VIC-20 to handle. So the solution? The 64/1541 slowed the drive communication down even more, to something like 3200 baud, thus shipping a drive that was barely faster than a cassette tape.